Tema: Re: VBA to T-SQL
Autorius: Raimis
Data: 2013-08-02 11:51:37
Klaida, vykdant funkcija, gali buti del to, kad nepilnai nurodytas funkcijos 
vardas - reikia butinai nurodyti owner'i , pvz (owner dbo):

SELECT dbo.linksniuotas('vienas', 2)



"CurrentUser" <ne_toks@yahoo.com> wrote in message 
news:kte5ov$8ok$1@trimpas.omnitel.net...
> DJ gerb. Raimi,
>
> Sukišau šį kodą į db, niekas nesikeikia, tai turbūt parašyta gramatiškai. 
> Sakau, 'turbūt' todėl, kad negaliu patikrinti: darant kokį view'ą 
> keikiasi, kad 'it's not a built-in function. Nežinau, kodėl gi jūzerio 
> funkcijos turėtų nepriimti. Tikriausiai todėl, kad aš visapusis oluchas: 
> šitos kalbos (T-SQL, C++, Crystal ir pan.) totaliai žalias, todėl 
> praleidęs šiąnakt prie googlo padariau išvadą, kad per vėlu jau man į 
> šitai lįst. Beieškodamas išeities radau, kad Crystal Reports priima ir 
> Basic syntaksę, tai truputį pertvarkęs kodą įkėliau tas (VB) funkcijas į 
> ten ir viskas važiuoja. Dabar tik dar viena bėda iškilo, kad būtų labai 
> patogu tas funkcijas sukelt į dll, kad būtų pasiekiama kaip ir kitos 
> bibliotekos - iš sistemos, bet irgi paryčiais pasidaviau - nėra pagrindų, 
> kad suprast kaip ją sukurt.
> Tokie va reikalai.
>
> "Raimis"  wrote in message news:ktaaub$bkb$1@trimpas.omnitel.net...
>
> Pirmas blynas ...
>
> Funkcijos naudojimas:
> SELECT dbo.linksniuotas('duodu vienas kirtis-gaunu du', 3)
>
> SQL:
>
> IF EXISTS (SELECT *
>    FROM   sysobjects
>    WHERE  name = N'linksnis')
> DROP FUNCTION linksnis
> GO
>
> CREATE FUNCTION linksnis(@Zodis nvarchar(1000), @linksnis int)
> RETURNS nvarchar(1000)
> AS
> BEGIN
> DECLARE @galune nvarchar(3), @galune_n nvarchar(10)
> IF Len(Rtrim(@Zodis))>=3
> BEGIN
> SELECT @galune = Right(Rtrim(@Zodis),3)
>
> SELECT @galune_n=
>  CASE @galune
>   WHEN 'nas' THEN
>   CASE @linksnis
>    WHEN 1 THEN 'no'
>    WHEN 2 THEN 'nui'
>    WHEN 3 THEN 'ną'
>    WHEN 4 THEN 'nu'
>    WHEN 5 THEN 'ne'
>    ELSE ''
>   END
>   WHEN 'tis' THEN
>   CASE @linksnis
>    WHEN 1 THEN 'čio'
>    WHEN 2 THEN 'čiui'
>    WHEN 3 THEN 'tį'
>    WHEN 4 THEN 'čiu'
>    WHEN 5 THEN 'tyje'
>    ELSE ''
>   END
>  ELSE @galune
>  END
> SELECT @Zodis = Substring(@Zodis, 1,Len(@Zodis) - 3) + @galune_n
> END
>
> RETURN @Zodis
> END
> GO
>
> IF EXISTS (SELECT *
>    FROM   sysobjects
>    WHERE  name = N'linksniuotas')
> DROP FUNCTION linksniuotas
> GO
>
> CREATE FUNCTION linksniuotas(@sakinys nvarchar(2000), @linksnis int)
> RETURNS nvarchar(2000)
> AS
> BEGIN
>
>
>
>
> DECLARE @sakinys_n nvarchar(2000), @Zodis nvarchar(1000)
> SELECT @sakinys_n=''
>
>
>
> SELECT @sakinys = Rtrim(@sakinys) + ' '
>
> WHILE CHARINDEX(' ', @sakinys) > 0
> Begin
> SET @Zodis = LEFT(@sakinys, CHARINDEX(' ', @sakinys))
>
>
> IF CHARINDEX('-',@Zodis)>0
> BEGIN
>  DECLARE @zod nvarchar(1000), @nsak nvarchar(1000)
>  SELECT @zod=  replace(@Zodis,'-',' '), @nsak=''
>
>
>  WHILE CHARINDEX(' ', @zod) > 0
>  BEGIN
>    SET @Zodis = LEFT(@zod, CHARINDEX(' ', @zod))
>    SELECT @nsak =  @nsak + dbo.linksnis(@Zodis, @linksnis) + '-'
>    SET @zod = SUBSTRING(@zod,CHARINDEX(' ', @zod)+1,len(@zod))
>  END
>  SELECT @sakinys_n =  @sakinys_n + ' ' + LEFT(@nsak,LEN(@nsak)-1)
> END
> ELSE
>  BEGIN
>    SELECT @sakinys_n =  @sakinys_n + ' ' + dbo.linksnis(@Zodis, @linksnis)
>  END
>
> SET @sakinys = SUBSTRING(@sakinys,CHARINDEX(' ', 
> @sakinys)+1,len(@sakinys))
> End
>
> RETURN @sakinys_n
> END
>
>
>
>
>
>
> "CurrentUser" <ne_toks@yahoo.com> wrote in message
> news:kt68m1$lhc$1@trimpas.omnitel.net...
>> Dedu. Prašymas labai nesityzdavot. Esu tik 'amateur', neturiu jokio IT 
>> išsilavinimo, bet kai ką pasidarau dėl automatizacijos. Taigi
>>
>> Function Linksniavimas(Name, Lin As Integer)
>> On Error Resume Next
>> Dim ar_su_bruksniu As Integer
>>
>> ar_su_bruksniu = InStr(1, Name, "-", vbTextCompare) 'nustatoma, ar yra 
>> stringe brūkšnys
>>    If ar_su_bruksniu > 0 Then 'jei yra brūkšnys
>>        Linksniavimas = Bruksnys(Name, Lin) 'su brūkšniu
>>    Else                        ' jei nėra brūkšnio
>>        Linksniavimas = separate(Name, Lin) 'be brūkšnio
>>    End If
>>
>> End Function
>> Function Bruksnys(Name, Lin)
>> On Error Resume Next
>> Dim pos As Integer
>> Dim iki_bruksnio, po_bruksnio
>>
>>    pos = InStr(Name, "-") 'nustatoma, kur yra brūkšnys
>>    iki_bruksnio = Mid(Name, 1, pos - 1) 'paimamas Str iki brūkšnio
>>    po_bruksnio = Mid(Name, pos + 1) 'paimamas Str nuo brūkšnio
>>
>>    Bruksnys = separate(iki_bruksnio, Lin) & "-" & separate(po_bruksnio, 
>> Lin) 'viskas linksniuojama ir sujungiama
>>
>> End Function
>>
>> Function separate(Name, Lin)
>> On Error Resume Next
>> Dim num, poz As Integer
>>
>> If IsNull(Name) Then
>>    separate = ""
>>    Exit Function
>> Else
>>    Name = Replace(Name, "-", " ")
>>    seka = Split(Name, , , vbTextCompare) 'Išskirstomi stringo žodžiai į 
>> Seką
>>    For num = 0 To UBound(seka)
>>        zodzio_gal = IIf(linksnis(seka(num), Lin) = "", Right(seka(num), 
>> 3), linksnis(seka(num), Lin))
>>        'suformuojama seka iš naujai gautų žodžių
>>        seka(num) = Replace(seka(num), Right(seka(num), 3), zodzio_gal)
>>    Next num
>> End If
>> separate = Trim(Join(seka)) 'sujungiama seka i nauja string'-a
>>
>> End Function
>> 'Identifikuojama galūnė
>> Function linksnis(Name, Lin)
>> galune = Right(Name, 3)
>> Select Case galune
>>    Case "nas"
>>        linksniai = Array("no", "nui", "ną", "nu", "ne")
>>    Case "tis"
>>        linksniai = Array("čio", "čiui", "tį", "čiu", "tyje")
>>    Case Else
>>        linksniai = Array("", "", "", "", "")
>>    End Select
>>
>> linksnis = linksniai(Lin)
>>
>> End Function
>>
>> "zZz"  wrote in message news:kt3uii$vrv$1@trimpas.omnitel.net...
>>
>> Įmesk kodą ;)
>>
>> "CurrentUser" <ne_toks@yahoo.com> wrote in message 
>> news:ks1ht5$tou$1@trimpas.omnitel.net...
>>> Sveiki,
>>>
>>> Kas galetu konvertuoti VBA koda (tokia nedidele 'user function' (50
>>> eiluciu)) i SQL Serveriui (2008 R2) suprantama kalba (gal T-SQL, ar koki
>>> biesa - cia as ABS. zalias)?
>>> atlygis alumi vln
>>>
>>> Pagarba.
>>>
>>
>