Cia aprasyta, kaip padaryti:
http://www.slxdeveloper.com/page.aspx?action=viewarticle&articleid=103
Pats nebandziau.
"CurrentUser" <ne_toks@yahoo.com> wrote in message
news:kug7d4$thc$1@trimpas.omnitel.net...
> Sutinku - galimas ir toks variantas. Bet kai funkcija pasiekiama iš
> bibliotekos, tai daug racionaliau, kadangi nereikia atskirai kiekvienam
> reikiamam raportui kurti atskiro view'-o, ypač jei recordsource naudojamos
> tik lenteles.
>
> "Raimis" wrote in message news:ktq3re$p6d$1@trimpas.omnitel.net...
>
> ....
> Del funkcijos kisimo i dll, tai nelabai suprantu - kam? Galima crystal
> reportui paduoti jau apdirbtus, linksniuotus duomenis per view'a ar stored
> procedure, kuriuose bus panaudota si funkcija.
>
>
>
>
> "CurrentUser" <ne_toks@yahoo.com> wrote in message
> news:kth34c$fn5$1@trimpas.omnitel.net...
>> Vėl puikiai.
>> Dabar viskas ore. O apskritai, tokia abejonė, ar normalu, kai yra ~200
>> Case, kišti į funkciją (stabdymo nėra?). Gal logiškiau sukišti į lentelę
>> i per ryšius paimti reikšmę. Aišku, funkciją gali plačiau naudoti. Tik
>> blogai va, kad neina į dll sudėti - dabar dar nepatogumas bus
>> kiekvienąkart įkelt į crystal raportą kaip user-defined funkciją.
>>
>> "Raimis" wrote in message news:ktfoe9$caf$1@trimpas.omnitel.net...
>>
>> 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.
>>>>>
>>>>
>>>
>>
>