Firebird UDF kullanımında hata

Firebird ve Interbase veritabanları ve SQL komutlarıyla ilgli sorularınızı sorabilirsiniz. Delphi tarafındaki sorularınızı lütfen Programlama forumunda sorunuz.
Cevapla
Kullanıcı avatarı
gkimirti
Admin
Mesajlar: 1956
Kayıt: 02 Eyl 2003 04:44
Konum: İstanbul

Firebird UDF kullanımında hata

Mesaj gönderen gkimirti »

ibphoneix.com da examples kısmında ekte linki bulunan makaleyi denedim
kendime ornek bir dll olusturdum
http://www.ibphoenix.com/a590.htm?a=ibp ... ibp_howto2

delphi deki dll projesi

Kod: Tümünü seç

library mylib;

function Power2(var i: Integer): Integer;
begin
  result:=i*i;
end;

exports Power2;

end.
build edip mylib.dll aldım bunu pc nin muhtelif yerlerine kopyaladım
(Firebird bin , udf dizinlerine Winnt ve System dizinlerine)

DbWorkbench te bir udf tanımı girdim

DECLARE EXTERNAL FUNCTION POW2
INTEGER
RETURNS INTEGER BY VALUE
ENTRY_POINT 'Power2' MODULE_NAME 'mylib';

udf eklendi

test etmek icin
select Pow2(3) from rdb$database
calıstırıyorum ama

< ERROR:
ISC ERROR CODE:335544343

ISC ERROR MESSAGE:
invalid request BLR at offset 60
function POW2 is not defined
module name or entrypoint could not be found

STATEMENT:
TIB_DSQL: "<TIB_Script>.<TIB_DSQL>."

seklinde bir error alıyorum
simdi nerede bir hata var :x
Saygılar
Kullanıcı avatarı
Kuri_YJ
Moderator
Mesajlar: 2248
Kayıt: 06 Ağu 2003 12:07
Konum: İstanbul
İletişim:

Mesaj gönderen Kuri_YJ »

Kod: Tümünü seç


library mylib; 

function Power2(var i: Integer): Integer; cdecl ;
begin 
  result:=i*i; 
end; 

exports Power2; 

end. 

Kendi makinamda değilim örneği şu an gönderemiyorum, ama Function'ın declarasyonunu yaparken cdecl şeklinde bir belirtme yapıyorsun. Yani veri alışverişinde (dll'lerden) Use C Declaration demek oluyor :)

Pascal'ın farklı C'nin farklı, onların verilerinde low high byte word olayları filan var ya bu sebeple olabilir !...

Ama benim fiilen yazdığım ve çalıştırdığım UDF'ler var ayrıca bir UDF library bulmuştum onu da sana göndereyim..

Makinama kavuşup internete bağlandığımda :)

Kolay gelsin

Not : cdecl'i helpten bir oku detaylı anlatıyor :) Ve senin yazdığında kodda bunu ekle sanırım çalışır.
Kuri Yalnız Jedi
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
Kullanıcı avatarı
gkimirti
Admin
Mesajlar: 1956
Kayıt: 02 Eyl 2003 04:44
Konum: İstanbul

Mesaj gönderen gkimirti »

yukarıda yazdıgım library bugun bir sekilde calıstı
ama firebird serveri gocertti
yani server kendini kapatyor ben bu fonksiyonu kullanınca
neyse dedim sonra tum maylib.dll leri (bir cok yere kopyalamıstım)
bilgisayarımdan sildim
daha onceki yazdıgım hatayı verdi
iyi gusel sonra bu fonksiyonu test ettigim stored proceduru silmeye kalkısıyorum
bir turlu silmiyor
yukarıdaki entry not found hatasını veriyor
udf yi kaldırmaya calısıyorum bu sefer dependencie problemi cıkıyor
ne yapacagım simdi kaldı oyle
ben nasıl yok etsem bu proceduru ve udf tanımını
Kullanıcı avatarı
gkimirti
Admin
Mesajlar: 1956
Kayıt: 02 Eyl 2003 04:44
Konum: İstanbul

Mesaj gönderen gkimirti »

hele sukur be en sonunda hallettim
hatta bu konuda bir makale hazırlayıp (daha dogrusu linkini verdigim makaleyi biraz tercume edip biraz ekleyerek) mustafa beyin sitesine de izin verirse koyarız insallah

onemli noktalar:
udf deklarasyonunda
DECLARE EXTERNAL FUNCTION POW2
INTEGER
RETURNS INTEGER BY VALUE
ENTRY_POINT 'Power2' MODULE_NAME 'mylib';

dll ismi .dll siz olacak
ve firebird udf klasorune kopyalanacak

delphide hazırladıgım dll de fonksiyon tanımı sonuna kuri nin dedigi gibi cdecl anahtar sozcugu eklencek

Kod: Tümünü seç

function Power2(var i: Integer): Integer;cdecl;
begin 
  result:=i*i; 
end; 
galiba server stop edip tekrar calıstırmak da gerekebilir
en sonunda bunlar olunca sorunsuz calıstı
kuri eger sende sendeki udf libraryleri bana gonderirsen bunlarıda sayın adminin izniyle siteye koyabiliriz herkeste faydalanmıs olur
oh be uzerimden bi yuk daha kalktı
kalın saglıcakla
Kullanıcı avatarı
Kuri_YJ
Moderator
Mesajlar: 2248
Kayıt: 06 Ağu 2003 12:07
Konum: İstanbul
İletişim:

Mesaj gönderen Kuri_YJ »

Selam,

IB_UDF Zip isimli dosyayı göndermeye çalışıyorum (çalışıyorum çünkü GPRS üzerinden bağlantım var şu anda ve pek verimli olmuyor, özellikle bizim evin bulunduğu yerden <:( )

Umarım başarırım :)

Kolay Gelsin.
Kuri Yalnız Jedi
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
Kullanıcı avatarı
gkimirti
Admin
Mesajlar: 1956
Kayıt: 02 Eyl 2003 04:44
Konum: İstanbul

Mesaj gönderen gkimirti »

http://www.ibphoenix.com/a457.htm
ilgili linkte bir yıgın udf library mevcut
indirip bi bakacagım
SieS
Üye
Mesajlar: 166
Kayıt: 17 Haz 2003 10:41
Konum: Konya

Mesaj gönderen SieS »

Merhaba
Firebird, triger procedure derken azıcık azıcık bişeyler öğrendim sanıyorum akşam kendimi test ettim bol trigerli procedurlu bir database oluşturdum gayet güzel çalıştı baya keyfe geldim bilmeden büsür şeyin hamallığını yapmışım ya neyse geç oldu güzel oldu şimdi sınanın UDF lere geldiğini düşünüyorm arattım sizin muhabetiniz geldi belliki bu işi iyi biliyorsunuz .
Vaktinizin uygun olduğu bir zamanda UDF konusunda bana yardımcı olursanız memnun olurum .
UDF nedir ne yapar nasıl çalışır gibi. Kaynak döküman örnek vs.

Şimdiden teşekkür ederim. Allah razı olsun.
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Mesaj gönderen rsimsek »

UDF; yukarıda verilen örnekteki gibi veritabanının tanımadığı fonksiyonları tanımlamak için kullanılır. mesela trunc() fonksiyonu, logaritma fonksiyonu yazabilirsin, exponansiyel (exp(x, y) x nin y inci kuvveti) gibi fonksiyonları eğer ihtiyacın varsa udf yazıp ekliyebilirsin. zaten ib ve fb program files klasörlerindeki UDF klasörlerine bakarsan bir sürü örnek var.
Kullanıcı avatarı
gkimirti
Admin
Mesajlar: 1956
Kayıt: 02 Eyl 2003 04:44
Konum: İstanbul

Mesaj gönderen gkimirti »

cok gerekmedikce udf yazmaya gerek yok
firebird udf klasoru icindeki dll de yeterince fonksiyon mevcut
yanındaki *.sql dosyasını calıstırdıgın zaman hepsini database e eklemekte
udflerin en buyuk avantajı sorguların icerisinde kullanılabilmeleri
ÜŞENME,ERTELEME,VAZGEÇME
Kullanıcı avatarı
mussimsek
Admin
Mesajlar: 7601
Kayıt: 10 Haz 2003 12:26
Konum: İstanbul
İletişim:

Mesaj gönderen mussimsek »

gkimirti yazdı:hatta bu konuda bir makale hazırlayıp (daha dogrusu linkini verdigim makaleyi biraz tercume edip biraz ekleyerek) mustafa beyin sitesine de izin verirse koyarız insallah
ne demek Gökmen hocam, makale hazırlayıp, Makale ve İpucu kısmına gönderebilirsin. Ben onu siteye ekliyorum zaten.

Kuri_TLJ yazdı:IB_UDF Zip isimli dosyayı göndermeye çalışıyorum
abi bana gönderirsen, siteye koyayım. Herkes faydalansın.

Kolay gelsin.
Kullanıcı avatarı
mussimsek
Admin
Mesajlar: 7601
Kayıt: 10 Haz 2003 12:26
Konum: İstanbul
İletişim:

Mesaj gönderen mussimsek »

Kuri_TLJ'nin gönderdiği dosyaları siteye koydum. Teşekkürler abi.

http://www.delphiturkiye.com/dfiles/ib_udf.zip

http://www.delphiturkiye.com/dfiles/nb_ib_utils.zip

Kolay gelsin.
Kullanıcı avatarı
Kuri_YJ
Moderator
Mesajlar: 2248
Kayıt: 06 Ağu 2003 12:07
Konum: İstanbul
İletişim:

Mesaj gönderen Kuri_YJ »

Recaaaaa ederim Admin'İm Mustafa'm :)

Senin emeklerinle :)

Kolay Gelsin.
Kuri Yalnız Jedi
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
Cevapla