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.
>>>
>>
>