Firebird/Trigger
Firebird/Trigger
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.
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.
Sorunuzu biraz daha net ifade edebilirseniz yardımcı olmaya çalışalım. Mesela
Kolay gelsin....
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.SP'in Trigger IBExpert de çalışıyor
Kolay gelsin....
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...
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...
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.

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

Ü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



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 !!!
Zoru başarırım, İmkansız zaman alır
FreeMan 35.5
Soru sormaya üşenmiyorsan, sorunun çözümünü yazmaya da üşenme !!!
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.
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/
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
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ı...
Yani benim tespit ettigim asil sorun IBDataSet'in insert sırasında default degerleri database'in atamasına bir sekilde engel olması...
- Yusuf AYDIN
- Üye
- Mesajlar: 69
- Kayıt: 02 Oca 2004 05:45
- Konum: Antalya
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.
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.
Kolay Gelsin.
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';
Sadece karşılaştıklarımı ve çözümü mü paylaşmak istedim.
Bu işlemide ilgili Gride bağlı componentin AFTERPOST eventına koyacağınız, CommitRetaining ve Refresh satırları ile sağlayabilirsiniz.DBGrid'te veri girdikten sonra hemen nasıl commit edebilirim.
Kolay Gelsin.