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