Firebird/Trigger

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
dost
Üye
Mesajlar: 104
Kayıt: 08 Oca 2004 11:33

Firebird/Trigger

Mesaj gönderen dost »

Merhaba,

Delphi7'de Firebird veritabanı IBExpert ile tarih alanını Date, Default Source'inide 'now' olarak tanımladım. SP'in Trigger IBExpert de çalışıyor. Ancak, Delphi7 de tarih faild alanının Required ini False yapmama rağmen hata veriyor. Delphi de nasıl çalıştırabilirim.

Yardımlarınız için Teşekkürler.
Kullanıcı avatarı
fahrettin
Admin
Mesajlar: 2619
Kayıt: 11 Haz 2003 10:38
Konum: İstanbul
İletişim:

Mesaj gönderen fahrettin »

Sorunuzu biraz daha net ifade edebilirseniz yardımcı olmaya çalışalım. Mesela
SP'in Trigger IBExpert de çalışıyor
derken ne demek istediniz. sorunun genelinden insert ederken bir hata oluştuğunu düşündüm ama trigger ve SP ile ilişkiler nedir? Bir de verdiği hata nedir? Bu da önemli.

Kolay gelsin....
dost
Üye
Mesajlar: 104
Kayıt: 08 Oca 2004 11:33

Mesaj gönderen dost »

Fahrettin bey, öncelikle Trigger, Stored Procedure kullanımı ve Referential Integrity konulu Makaleniz için sizi kutlarım, makalenizi okuyarak Firebird'de uygulama yaparken, IBExpert'te SP ile Trigger'ler güzel çalışıyor, sonuçlarını görebiliyorum ancak, Delphi de insert de hata veriyor. Ben sanıyorum konuyu tam ifade edemedim. Giriş tarihi'ni kendi alması gerekirken boş geçince hata veriyor.

Ayrıca, Delphi'de yapılan işlemleri DBGrid üzerinde hemen göremiyorum. programdan çıkıp tekrar girdiğimde görebiliyorum. DBGrid'te veri girdikten sonra hemen nasıl commit edebilirim.

İlginiz için Teşekkürler.

Kolay gelsin...
Kullanıcı avatarı
fahrettin
Admin
Mesajlar: 2619
Kayıt: 11 Haz 2003 10:38
Konum: İstanbul
İletişim:

Mesaj gönderen fahrettin »

Verilen hatanın ne oldugunu yine yazmamışsınız ;)

Neyse sanırım o alanı boş geçemeyeceğinize dair bir hata veriyor diye düşünüyorum.

Forumda daha önce buna benzer bir konu geçmiş hatta sorun yaşayan arkadaşın veritabanını ben şahsen incelemiştim. Çıkan sonuç şu idi. Veritabanında default deger tanımlanan alanlara veri girişini delphi dışında nereden yaparsanız yapın sorun olmadan default degerler atanıyordu. Delpi tarafına gelince standart TDatabase ve ona bagli Ttable veya TQuery bileşenleri ile insert etme de de hiç bir sorun yokken. IBDataSet ile yapılan insert işlemi sırasında default değerler atanmıyordu.
O mesajin likni şu:
viewtopic.php?t=1202

Sorunu en pratik yoldan aşmak için ise IBDataSet'inizin after insert'inde ilgili alana default değer atamasını bir de delphi tarafından yapmanızı önerebilirim.
Kullanıcı avatarı
freeman35
Admin
Mesajlar: 2380
Kayıt: 12 Haz 2003 04:05
Konum: merkez camii yanı

Mesaj gönderen freeman35 »

Bende hala şiddetle forum kurallarını biraz okuyup birazda kafa yorun diyorum.Bu forma gruplandırdık ki herkez aradığını daha kolay bulsun. Egoist olmayın forumda 800 kişi var başkalarınıda düşünün.
Üye sayısına bakıyorum birde cevap verenlere, yaw arkadaş, hiçmi bir başkasının sorduğu soruyu 3-5 kişiden başkası bilmiyor

Bu sözler şahsa değil geneledir

:evil: :evil: :evil:
ZAGOR TENAY TÜRK'tür... TÜRK kalacak...
Zoru başarırım, İmkansız zaman alır
FreeMan 35.5

Soru sormaya üşenmiyorsan, sorunun çözümünü yazmaya da üşenme !!!
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 »

Selamlar,

Yazdıklarınızdan anladığım kadarı ile,

Herhangi bir Stored Procedure veya Trigger''ın içinde, Delphi Tarafında yaptığınız Default Değer Atamaları geçerli değildir !...

Yani database'deki bir tabloda Tarih field'ı NOT NULL tanımlanmış olsun.

Siz Delphi tarafında Table Nesnesinde gidip o field'a default bir değer atayabilirsiniz ve herhangi bir kayıt girerken (Delphi üzerinden) oraya değer atandığı için database herhangi bir hata vermez. Ancak bu işlemi bir stored procedure veya trigger içinde yaparken Database sizin Delphi tarafında Default Değer Atamanızı bilmediği (ve hatta ilgilenmediği için) otomatikman hata verecektir.

Umarım açıklayıcı olmuştur.

Kolay Gelsin.
Kuri Yalnız Jedi
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
Kullanıcı avatarı
fahrettin
Admin
Mesajlar: 2619
Kayıt: 11 Haz 2003 10:38
Konum: İstanbul
İletişim:

Mesaj gönderen fahrettin »

Kuri_TLJ, dedigine aynen katılıyorum. Bu mesajdaki sorun tam olarak o mudur bilmiyorum ama daha onceki inceledigimdeki sorun su idi. Veritabanı tarafında alan default 0 olarak tanımlandıgı icin yeni bir kayıt anında o alana sıfır degeri veritabanı tarafından verilmesi gerekiyor. Yeni kayit ekleme isini SQL Explorer veya IBExpert uzerinden yapınca default deger atanıyor. DElphi de TTable veya TQuery uzerinden insert edince de sorun yok. Fakat IBDataSet uzerinden bir kayit insert edildiginde veritabanı tarafinda gerekli default deger atanmıyor. Eger not null olarak tanımlandıysa hata veriyor dogal olarak tanımlanmadıysa da null kalıyor ve ona bagli yapilacak hesaplari filan etkiliyor vs....

Yani benim tespit ettigim asil sorun IBDataSet'in insert sırasında default degerleri database'in atamasına bir sekilde engel olması...
Kullanıcı avatarı
Yusuf AYDIN
Üye
Mesajlar: 69
Kayıt: 02 Oca 2004 05:45
Konum: Antalya

Mesaj gönderen Yusuf AYDIN »

Bizde projemizde Firebird kullanıyoruz.
Buna benzer bir aksaklık bizde de oldu.

Çözüme ulaşması gerektiği için hatanın kaynağını aramadık. Meseleyi şöyle hallettik,

IBDataSet in OnNewRecorduna default değerlerini yazdık.

İllaki SP ile veya triger ile işlem yapılacaksa. Yine çözüm olarak alanların null olup olmadığı kontrol edilerek ise default değer atamsı yapılabilir.

Kod: Tümünü seç

   IF (Tarih is Null) then Tarih = 'Now';
Diye düşünüyorum. Ama bunun delphinin hata döndürmesine engel olacağınıda sanmıyorum.

Sadece karşılaştıklarımı ve çözümü mü paylaşmak istedim.
DBGrid'te veri girdikten sonra hemen nasıl commit edebilirim.
Bu işlemide ilgili Gride bağlı componentin AFTERPOST eventına koyacağınız, CommitRetaining ve Refresh satırları ile sağlayabilirsiniz.

Kolay Gelsin.
dost
Üye
Mesajlar: 104
Kayıt: 08 Oca 2004 11:33

Mesaj gönderen dost »

Merhaba,

İlgi ve yardımlarınız için çok Teşekkürler.

IBDataSet'in afterinsert'inde tanımladım.
Cevapla