master detay tabloda insert into

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
polikarp
Üye
Mesajlar: 20
Kayıt: 07 Eki 2003 03:28

master detay tabloda insert into

Mesaj gönderen polikarp »

Selamlar;
Birbiriyle ilişkili master ve detay iki tablom var. Detay tablo master tablonun otomatik artan numaralı alanına bağlı.

Detay tabloya başka bir tablodan insert into ile veri alıyorum.

Kod: Tümünü seç

qry4.Close;
qry4.SQL.Clear;
qry4.SQL.Add('Insert into detaytablo (tabloalanı1,tabloalanı2...) Select tabloalanı1, tabloalanı2... from  verialınantablo');
qry4.ExecSQL;
Bu şekilde detaytablo nun ilgili alanlarına verialınantablo nun ilgili alanları yerleşiyor. Ancak masterdetail olarak bağlantılı olmasına rağmen detaytablo nun bağlı olduğu mastertablo alanınındaki numara detayda yer almıyor ve boş kalıyor. Kısaca master detail ilişki kurulamıyor alınan veri bağımsız kalıyor.

Master da yer alan numarayı nasıl alabilirim?
En son polikarp tarafından 22 Eki 2010 12:26 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Re: master detay tabloda insert into

Mesaj gönderen aslangeri »

s.a.
1.kullanıdığınız veritabanı nedir.
2.forumda buna benzer konular çok konuşuldu, o mesajları bi inceleyin. master tablo daki id alanını gridde veya veri bilinçli bir bileşende gösterirseniz problemin kaynağını görebilirsiniz.
kolay gelsin.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
polikarp
Üye
Mesajlar: 20
Kayıt: 07 Eki 2003 03:28

Re: master detay tabloda insert into

Mesaj gönderen polikarp »

Cevap için teşekkürler;

1. Delphi paradox7 tablolar.
2. Forumda aramama rağmen buna benzer bir şey bulamadım.

Sorun alınan verinin gride dolayısıyla tabloya gelmesi ancak bağlantı olmasına rağmen masterdan gelmesi gereken ilgili alanın gelmemesi.

Bir şekilde insert into ile master detail ilşkisinin kurulamaması veya insert into ile gelen verinin master detail bağlantısından bağımsız hareket etmesi.
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Re: master detay tabloda insert into

Mesaj gönderen aslangeri »

s.a.
bu sıkıntıya genelde firebird veritabanına yeni geçen arkadaşlarda oluyor. onların çözümleri bu durumda işinize yaramaz.
paradoks deyince işler değişiyor.
eğer ttable bileşenlerini kullanıp mastersource vs ayarlarını yaptıysanız sıkıntı olmaz master bağlantı için gerekli olan değerleri kendisi yazar.
ancak siz anladığım kadarı ile kendiniz bir sql cümleciği oluşturup onu execute ediyorsunuz. bu durumda master detay bağlantı için gerekli olan alanları ve değerleri de kendi sql cümleciğinizde vermeniz gerekli.
kolay gelsin.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
polikarp
Üye
Mesajlar: 20
Kayıt: 07 Eki 2003 03:28

Re: master detay tabloda insert into

Mesaj gönderen polikarp »

Datasource ve qry ayarları şöyle.

dtsource1 - qry1
qry1 sql

Kod: Tümünü seç

select * from mastertablo
dtsource2 - qry2
qry2 - dtsource - dtsource1
qry2 - sql-

Kod: Tümünü seç

select * from detaytablo where detaytablo.ortakalan=:ortak alan
TForm1.btn1Click olayı şöyle;

Kod: Tümünü seç

qry2.Close;
qry2.SQL.Clear;
qry2.SQL.Add('Insert into detaytablo (tabloalanı1,tabloalanı2...) Select tabloalanı1, tabloalanı2... from verialınantablo');
qry2.ExecSQL;
Muhtemelen sorun qry1 ve qry2 ye master detail bağlantı için object inspector da sql alanına yazdığım kodların unit içinde yazılmamasından kaynaklanıyor. Object inspactor yerine buton click olayına bağlantıyı sağlayacak kodu ne şekilde ekleyebilirim?
En son polikarp tarafından 22 Eki 2010 12:25 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Re: master detay tabloda insert into

Mesaj gönderen aslangeri »

qry2 nin sql kodunu değiştirdiğiniz zaman qy1 ve ary2 arasında yaptığınız bağlantıyıda iptal etmiş oluyorsunuz.
yapmanız gereken şey qry2 deki insert komutuna detaytablodaki master alanı da eklemeniz.
kod şöyle olmalı

Kod: Tümünü seç

insert into detaytablo(masterbaglantialani,alan1,alan2....)values(qry1dekalanindegeri,deger1,deger2...)
kolay gelsin.
not:kodlarınızı code tagını kullanarak yazarsanız daha okunaklı olur.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
polikarp
Üye
Mesajlar: 20
Kayıt: 07 Eki 2003 03:28

Re: master detay tabloda insert into

Mesaj gönderen polikarp »

Zaman ayırıp cevap verdiğiniz için çok teşekkür ederim; (Kodlu alanları düzelttim)
Verdiğiniz kodun ;

Kod: Tümünü seç

insert into detaytablo(masterbaglantialani,alan1,alan2....)values(qry1dekalanindegeri,deger1,deger2...)
masterbaglantıalanı kısmını eklediğimde invalid parameter yani geçersiz parametre hatası veriyor.

qry2 unit alanına yazdığım kod;

Kod: Tümünü seç

Insert into detaytablo (detayalan1,detayalan2...) select verialınantabloalanı1, verialınantabloalanı2....  from verialınantablo
Sizin verdiğiniz koda göre;

Kod: Tümünü seç

insert into detaytablo(masterbaglantialani,alan1,alan2....)values(qry1dekalanindegeri,deger1,deger2...)

Kod: Tümünü seç

Values 
kısmına yazabileceğim bir şey yok. Master tablonun ilgili alanı otomatik artan değer alıyor. Ayrıca values devreye girdiğinde select hata veriyor.

Başka bir konu.

Kod: Tümünü seç

Insert into detaytablo (alan1,alan2....) Select verialınantabloalanı1, verialınantabloalanı2....  from  verialınanmastertablo  inner join verialınandetaytablo on verialınanmastertablo.ortakalan=verialınandetaytablo.ortakalan 
Yukarıdaki kodda kullandığım

Kod: Tümünü seç

inner join
ile tek tabloya veri alma işini master detail tablodan sorunsuz yapabiliyorum.

Aslında bunun tam tersini yapmak istiyorum (Master detaile tek tablodan veri almak)

Kod: Tümünü seç

 insert into
ve

Kod: Tümünü seç

inner join
kullanarak yukarıdaki kodu tam tersine çevirebilsem sorun hallolacak ama düzgün şekilde nasıl çevirebileceğimi bilmiyorum.
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Re: master detay tabloda insert into

Mesaj gönderen aslangeri »

detay tabloya kayıt gireceğiniz sırada master tablodaki id(yani bağlantıı sağlayan alan) ın değerini biliyor olman lazım.
işlem sırası şöyle olmalı.
master tablo insert et.
master tablonun id sini al
detay tabloya insert yap.
master tablonun id alanını alıp bir değişkene attığınız zaman detay tablonunu insert querysi şu hale gelmeli

Kod: Tümünü seç

qry2.sql.add('insert into detaytablo(masterbağlantıalanı,alan1,alan2) select '+masterid+',alan1,aln2,....
kolay gelsin.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
polikarp
Üye
Mesajlar: 20
Kayıt: 07 Eki 2003 03:28

Re: master detay tabloda insert into

Mesaj gönderen polikarp »

Teşekkürler.
master tablonun id alanını alıp bir değişkene attığınız zaman

Kod: Tümünü seç

'+masterid+'
Bunu nasıl yapabileceğim konusunda bir bilgim yok biraz açabilirseniz sevinirim.
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Re: master detay tabloda insert into

Mesaj gönderen aslangeri »

masterid senin tanımlayacağın bir değişken.

Kod: Tümünü seç

var
masterid:string;
.........
daha sonra master tablona insert yaptığın zaman bu değişkeni set edeceksin.

Kod: Tümünü seç

......
masterid:=mastertablo.fieldbyname('birincialanadi').asstring;
.........
en son olarak detay tabloyu insert ederken bir önceki mesajda gönderdiğim kodu kullanman lazım.
kolay gelsin.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
polikarp
Üye
Mesajlar: 20
Kayıt: 07 Eki 2003 03:28

Re: master detay tabloda insert into

Mesaj gönderen polikarp »

Hocam çok teşekkür ederim olay çözüldü. Esen kalmanız dileği ile.
Cevapla