master detail aynı anda kayıt eklemek
master detail aynı anda kayıt eklemek
selam Arkadaşlar;
master/detail tablom var projeye dbgrid ekledim gerekli bağlantıları yaptım ilk önce mastere bilgiler girip kaydedip daha sonra detaile veri girip kaydettiğimde sorun yok gerekli triggerlerle kendi otomatik bağlantıyı kuruyor fakat ben şunu yapmak istiyorum
yeni kayıt dediğimde master ve detaile yeni kayıt açarak her iki alanıda doldurduktan sonra tek tuşla kayıt dediğimde master/detail sistemini bozmadan kaydetsin bunu normal editlerle arka planda yapabiliriz ama benim istediğim DB componentleriyle yapmak istediğimde forgkeyn hatası veriyor nasıl yapabilirim bu olayı biliyorum biraz karmaşık anlattım ama sorularınızla sadeleşir sanırım
şimdiden teşekkürler
master/detail tablom var projeye dbgrid ekledim gerekli bağlantıları yaptım ilk önce mastere bilgiler girip kaydedip daha sonra detaile veri girip kaydettiğimde sorun yok gerekli triggerlerle kendi otomatik bağlantıyı kuruyor fakat ben şunu yapmak istiyorum
yeni kayıt dediğimde master ve detaile yeni kayıt açarak her iki alanıda doldurduktan sonra tek tuşla kayıt dediğimde master/detail sistemini bozmadan kaydetsin bunu normal editlerle arka planda yapabiliriz ama benim istediğim DB componentleriyle yapmak istediğimde forgkeyn hatası veriyor nasıl yapabilirim bu olayı biliyorum biraz karmaşık anlattım ama sorularınızla sadeleşir sanırım
şimdiden teşekkürler
s.a.
sorun master tablodaki id alanının yeni kayıt dediğinizide henüz verilmemiş olması dolayısı ile detay tabloya verilecek değeri bilememesi.
çözüm olarak bir öneri.
master tablo olarak ibdataset kullan.
ibdatasetin generatorfields parametrelerinde onnewrecord u seç.
böylelikle insert dediğin zaman pkey alan değerini alacak detay tabloda bu alanı görüp kendisine otomatik olarak alacaktır.
(eğer otomatik almazsa elle atama yaparsın.)
koaly gelsin.
sorun master tablodaki id alanının yeni kayıt dediğinizide henüz verilmemiş olması dolayısı ile detay tabloya verilecek değeri bilememesi.
çözüm olarak bir öneri.
master tablo olarak ibdataset kullan.
ibdatasetin generatorfields parametrelerinde onnewrecord u seç.
böylelikle insert dediğin zaman pkey alan değerini alacak detay tabloda bu alanı görüp kendisine otomatik olarak alacaktır.
(eğer otomatik almazsa elle atama yaparsın.)
koaly gelsin.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
evet o şekilde yapıyorum dediğiniz gibi otomatik alıyor o kısımda sıkıntı yok ama söylediğim gibi ilk önce masteri girip kaydetip daha sonra detaili girdiğimde herşey otomatik hallediyor,aslangeri yazdı:s.a.
sorun master tablodaki id alanının yeni kayıt dediğinizide henüz verilmemiş olması dolayısı ile detay tabloya verilecek değeri bilememesi.
çözüm olarak bir öneri.
master tablo olarak ibdataset kullan.
ibdatasetin generatorfields parametrelerinde onnewrecord u seç.
böylelikle insert dediğin zaman pkey alan değerini alacak detay tabloda bu alanı görüp kendisine otomatik olarak alacaktır.
(eğer otomatik almazsa elle atama yaparsın.)
koaly gelsin.
ben her iki tablodada gerekli bilgileri girdiğimde kaydet dediğimde forgieyn hatası veriyor
- kadirkurtoglu
- Üye
- Mesajlar: 748
- Kayıt: 22 May 2005 01:20
- Konum: Uzakta Görünen Tepeden...
iyi sende öyle bir durum var gene bende proje kullanımı açısından o şekilde bir altarnetifimde yok mesela kullanıcı sende masteri girdi diyelim detaile geçti sonra vaz geçme şansı yok çünkü sen masteri kaydetmiş oluyorsun vardır mutlaka bir yolu inşallah öğreneceğizhaydarxxx yazdı:Syn Abrak bende aynı dert ten muzdaribim.Master a kayıt girileceği durumda datail e girilecek kayıt butonunun enabled özellliğini false yapıyorum bu şekilde master kaydının kayıt girişi bitmeden datail kayıt girdirmeyi engelliyorum.Umarım bunun daha pratik bir yolu vardır.
- kadirkurtoglu
- Üye
- Mesajlar: 748
- Kayıt: 22 May 2005 01:20
- Konum: Uzakta Görünen Tepeden...
baktım son mesaj mustafa beyden tamamdır geldi çözüm diye bir anda panik yapmıştımmussimsek yazdı:sp'leri trigger'dan tetiklemiyorsan kontrol yine DB'de değil sen de oluyor. Bir yerden patlar...kadirkurtoglu yazdı:ben Foreign Key kullanmıyorum. master kayıt silindiğinde detay kayıtları silmek için sp yazıyorum.

saygılar
- kadirkurtoglu
- Üye
- Mesajlar: 748
- Kayıt: 22 May 2005 01:20
- Konum: Uzakta Görünen Tepeden...
elbette trigger den tetiklenerek çalıştırıyorum.mussimsek yazdı:sp'leri trigger'dan tetiklemiyorsan kontrol yine DB'de değil sen de oluyor. Bir yerden patlar...kadirkurtoglu yazdı:ben Foreign Key kullanmıyorum. master kayıt silindiğinde detay kayıtları silmek için sp yazıyorum.
sp
Kod: Tümünü seç
Create procedure detay_sil(masterid integer)
as
begin
delete from hareket
where masterid =:masterid;
end
Kod: Tümünü seç
CREATE TRIGGER DETAY_DEL FOR MASTER
ACTIVE BEFORE DELETE POSITION 0
AS
begin
execute procedure detay_sil(old.masterid);
end
merhaba,
bilmiyorum sorun çözüldü mü ama aklıma şu geldi belki yanlıştır. kaydet butonuna bastığın anda ilk önce master tablo kaydetsin arada bir kum saati gibi bir zaman geçirecek işlem koyup daha sonra detail tabloyu kaydetmesini sağlayabilirsin. tek button ile olacaksa tabi. benimde şu anki uygulamam bir master beş detail den oluşuyor ve fk ile birbirlerine bağlı. ben detail alana girildiğinde yani gride girildiğinde dataset in state komutu ile kontrol ettirip eğer insert veya edit ise masteri kaydettiriyorum. arka planda olduğu için kullanıcı anlamıyor ve yoluna takılmadan devam ediyor.
kolay gelsin
bilmiyorum sorun çözüldü mü ama aklıma şu geldi belki yanlıştır. kaydet butonuna bastığın anda ilk önce master tablo kaydetsin arada bir kum saati gibi bir zaman geçirecek işlem koyup daha sonra detail tabloyu kaydetmesini sağlayabilirsin. tek button ile olacaksa tabi. benimde şu anki uygulamam bir master beş detail den oluşuyor ve fk ile birbirlerine bağlı. ben detail alana girildiğinde yani gride girildiğinde dataset in state komutu ile kontrol ettirip eğer insert veya edit ise masteri kaydettiriyorum. arka planda olduğu için kullanıcı anlamıyor ve yoluna takılmadan devam ediyor.
kolay gelsin
Şefkat-u Merhamette Güneş Gibi Ol.
Başkalarının Kusurunu Örtmekte Gece Gibi Ol.
Sehavet-u Cömertlikte Akarsu Gibi Ol.
Hiddet-u Asabiyette Ölü Gibi Ol.
Tevazu-u Mahviyette Toprak Gibi Ol.
Ya Olduğun Gibi Görün Ya Göründüğün Gibi Ol.

Başkalarının Kusurunu Örtmekte Gece Gibi Ol.
Sehavet-u Cömertlikte Akarsu Gibi Ol.
Hiddet-u Asabiyette Ölü Gibi Ol.
Tevazu-u Mahviyette Toprak Gibi Ol.
Ya Olduğun Gibi Görün Ya Göründüğün Gibi Ol.

- kadirkurtoglu
- Üye
- Mesajlar: 748
- Kayıt: 22 May 2005 01:20
- Konum: Uzakta Görünen Tepeden...
bu sorunu çözebilmek için ufak bir tablo oluşturdum
İl master
ilce detail
semt subdetail
BeforePost
ilce Dbgrid insert diyorum daha sonra
semt DBgrid insert diyerek dolduruyorum
tekrar dönüp ilceye kaydet dediğimde (violation of FOREİGN KEY constraint FK_SEMT_1" on table "SEMT") hatası veriyor belki bu hatadan nedemek istediğini anlayabilirsiniz diye yazdım bana sadece semt açık ifadesi çağrıştırıyor.
Syn bobasturk dediğinizi yapmaya çalıştım fakat olmadı sanırım çözüm sizde saklı
Syn kadirkurtoğlu FK kullanmamdaki ısrar kayıtları silerkenki gerekli olan alt detaillerinde silinmesi gibi veya raporlamalarda sağlayacağı kolaylıktan dolayı ısrar ediyorum.
en son çare DB leri kaldırıp arka planda normal editlerden bilgileri alarak kaydetmek olacak ozaman bir sorun olmayacaktır[/code]
İl master
ilce detail
semt subdetail
BeforePost
Kod: Tümünü seç
if DataSet.Fields.Fields[1].IsNull then
DataSet.Fields.Fields[1].Value:=DataSet.DataSource.DataSet.Fields.Fields[0].Value;
semt DBgrid insert diyerek dolduruyorum
tekrar dönüp ilceye kaydet dediğimde (violation of FOREİGN KEY constraint FK_SEMT_1" on table "SEMT") hatası veriyor belki bu hatadan nedemek istediğini anlayabilirsiniz diye yazdım bana sadece semt açık ifadesi çağrıştırıyor.
Syn bobasturk dediğinizi yapmaya çalıştım fakat olmadı sanırım çözüm sizde saklı

Syn kadirkurtoğlu FK kullanmamdaki ısrar kayıtları silerkenki gerekli olan alt detaillerinde silinmesi gibi veya raporlamalarda sağlayacağı kolaylıktan dolayı ısrar ediyorum.
en son çare DB leri kaldırıp arka planda normal editlerden bilgileri alarak kaydetmek olacak ozaman bir sorun olmayacaktır[/code]
s.a.
peki tabloların pkeylerine değerleri ne zaman veriyorsun.
yaptığın örneğe üç tanede grid ekle.
tablodaki id alanlarınıda göstersin. kayıt girişini gene editlerden dene.
bakalım id alanlarını alıyormu.
kolay gelsin.
peki tabloların pkeylerine değerleri ne zaman veriyorsun.
yaptığın örneğe üç tanede grid ekle.
tablodaki id alanlarınıda göstersin. kayıt girişini gene editlerden dene.
bakalım id alanlarını alıyormu.
kolay gelsin.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim