sql ile iki tabloyu bağlama

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
ademcicek
Üye
Mesajlar: 409
Kayıt: 03 Eki 2003 01:50
Konum: Ankara

sql ile iki tabloyu bağlama

Mesaj gönderen ademcicek »

merhaba arkadaşlar.
ihale diye master tablom var. bir de malzeme diye detail tablom var. bunları sql ile nasıl bağlayabirim. çok teşekür ederim kolay gelsin
ademcicek
Üye
Mesajlar: 409
Kayıt: 03 Eki 2003 01:50
Konum: Ankara

Mesaj gönderen ademcicek »

detail querisine aşağıdaki kodları yazıyom ama çalışmıyor.
nerede hata yapıyorum
select * from detail where master_detail_id=id
Kullanıcı avatarı
husonet
Admin
Mesajlar: 2962
Kayıt: 25 Haz 2003 02:14
Konum: İstanbul
İletişim:

Mesaj gönderen husonet »

Büyük bir ihtimalle gönderdiğin parametrede değer uyuşmazlığı olabilir.
Sql cümleciğinin geçtiği kodu tam olarak yazarsan iyi olur( Query ).

Kolay Gelsin.

Gazete manşetleri
* DİKKAT :Lütfen forum kurallarını okuyalım ve uyalım...!
* Warez,crack vs. paylaşımı kesinlikle yasaktır.
ademcicek
Üye
Mesajlar: 409
Kayıt: 03 Eki 2003 01:50
Konum: Ankara

Mesaj gönderen ademcicek »

ben adoquery kullanıyorum. kullandığım kodlar gönderdiğim kodlardır.
yaptığım uygulama bir deneme. tabloların bağlanmasını görmek için yaptığım bir örnektir.

kullandığım tek kod aşağıdadır.
select * from detail where master_detail_id=id
Kullanıcı avatarı
gkimirti
Admin
Mesajlar: 1956
Kayıt: 02 Eyl 2003 04:44
Konum: İstanbul

Mesaj gönderen gkimirti »

aslında bir makale halinde ilerde ipucu bolumune eklemek lazım ama ben kısaca nasıl yapıldıgını izah edeyim
  • detail ve master isimli iki adet sorgunuz olsun
detail parametre alacak bir sorgu olacak
ornegin
select * from detail where master_detail_id=:id
buradaki : isareti sql icinde parametre belirtmek icin kullanılır...

master ise
select * from master
olsun.

2 tane datasource alıp sorgulara baglşarız dsDetail ve dsMaster
detail querysinn DataSource diye bir ozelligi vardır buraya masterin datasource unu bagladıkmı iki sorguyu acınca master-detail baglkantısı hazır demektir.
kolay gelsin
ÜŞENME,ERTELEME,VAZGEÇME
Kullanıcı avatarı
MicroChip
Kıdemli Üye
Mesajlar: 1119
Kayıt: 02 Ağu 2003 01:02
Konum: İstanbul
İletişim:

Mesaj gönderen MicroChip »

sql cümlesine where den başka diğer bir alternatif de join dir... Bir önceki projemde 11 tabloyu rahatlıkla birleştirmiştim. Where den daha iyi sonuç alınabiliyor. Çünkü where sadece eşleşen kayıtları getiriyor.
Saygılar....
Kafkas Kartalı Kabarday
Sitesi!= http://www.ahmetceylan.com
Resim
Kullanıcı avatarı
gkimirti
Admin
Mesajlar: 1956
Kayıt: 02 Eyl 2003 04:44
Konum: İstanbul

Mesaj gönderen gkimirti »

bildigim kadarı ile join islemi : left join ve right join kullanımına gore
eslesen ve eslesmeyen de dahil tum kayıtları getirebiliyor...
ÜŞENME,ERTELEME,VAZGEÇME
Kullanıcı avatarı
fahrettin
Admin
Mesajlar: 2619
Kayıt: 11 Haz 2003 10:38
Konum: İstanbul
İletişim:

Mesaj gönderen fahrettin »

Evet id 'nin onunde : koymak isi cozecektir. Tabi unutulmamasi gereken bir konu da master tablonuzun icinde id isimli bir alan olmasidir....
ademcicek
Üye
Mesajlar: 409
Kayıt: 03 Eki 2003 01:50
Konum: Ankara

hata veriyor

Mesaj gönderen ademcicek »

---------------------------
Debugger Exception Notification
---------------------------
Project Project1.exe raised exception class EDatabaseError with message 'Field 'id' cannot be modified'. Process stopped. Use Step or Run to continue.
---------------------------
OK Help
---------------------------


gkimirdi abinin yazdığı şeylerin aynısını kullanıyorum ama yukarıdaki hatayı veriyor. vallahi ben bu iki tabloyu sql ile bağlayamazsam programcılığı bırakacam bu nasıl bir iştir elimi attığım yer çürüyor.bu iki tabloyu sql ile bağlama işlemini binlerce yapan bir arkadaşımla yaptık oda bana gösterirken çalıştıramamıştı.

master ve detail diye iki tablo oluşturdum.master e id,adisoyadı,nasilsin diye alanlar oluşturdum.
detailde id,master_detail_id,merhaba diye alan oluşturdum.
sonra 1 adoconnection, 2 adoquery,2 datasource koydum.ikide dbgrid.
adoconnection ile bağlantıyı yaptım.
master_adquery stringine select * from master yazdım.
detail_adoquery stringine select * from detail where master_detail_id=:id yazdım.
detail_adoquery datasourcesini master_datasource eşitledim.
ve en yukarıda yazmış olduğum hata çıktı.
iki tabolunun id lerini otomatik artmasını sağladım. niye çalışmaz.
kafayı yiyecem.

ayrıca bana zaman ayıran herkese teşekür ederim.
kolay gelsin
Kullanıcı avatarı
gkimirti
Admin
Mesajlar: 1956
Kayıt: 02 Eyl 2003 04:44
Konum: İstanbul

Mesaj gönderen gkimirti »

bu hatayı ne yaparken veriyor
yeni bir kayıt mı ekliyorsun yoksa programı baslatıp tabloları acarken mi veriyor.
eger kayıt girisi yada duzenleme gibi bir islem yaptıracaksan farklı bir yol dene bence
ikincisi master_detail_id unique falan olmayacak primarykey falan olamayacak
ama benim ornegimde master tablonun id si primary key ve bir artan sayıya sahip
ayrıca detail tablomda da detail_id var ve primary key aratn sayı
ÜŞENME,ERTELEME,VAZGEÇME
Kullanıcı avatarı
fahrettin
Admin
Mesajlar: 2619
Kayıt: 11 Haz 2003 10:38
Konum: İstanbul
İletişim:

Re: hata veriyor

Mesaj gönderen fahrettin »

Oncelikle programciligi birakmayai hic dusunmeyin evel Allah bu sorunu hallederiz. Gerekirse kodu komple gonderirsin halleder geri gonderir yine sorunu cozeriz. Ama buna gerek yok bence cunku anlatiminiz bu ise yeni baslayanlara makale olacak sekilde sorunsuz yapilmis gibi duruyor.

Benim gozume carpan su tablo yapilaraina bakinca iki tablo arasindaki iliski id alani uzerinden gibi gorunuyor. Yani master tabloda id=1 ise detayda da id=1 olan ama master_detail_id alani farkli kayitlar olmali diye dusunuyorum ama detayin sql kodu bu mantıga uygun degil.
[quote="ademcicek
detail_adoquery stringine select * from detail where master_detail_id=:id [/quote]seklinde yazmissiniz.

Kod: Tümünü seç

select * from detail where id=:id 
seklinde olmali.
tabi iki tablo arasindaki iliski detay tarafta id alani uzerinden olacaksa eger....

Bir de butun bunlarin disinda id ismi reserved word olabilir mi diye dusunuyorum. Bu alan adini her iki tabloda da degistirerek bir deneyin derim mesela MASTER_ID gibi..... ya da bu da sakat bir alan adi olabilir :wink: MERHABA_ID yapin mesela :D

Kolay gelsin.....
ademcicek
Üye
Mesajlar: 409
Kayıt: 03 Eki 2003 01:50
Konum: Ankara

herkese teşekür ederim

Mesaj gönderen ademcicek »

sevgili fahrettin ve g kimirdi yardımlarınız için çok teşekür ederim. sonuda sorunu fahrettin abinin dediği şekilde hallettim.

önceki yaptıklarımda olmamasının nedeni master_detail_id=:id oluyormuş.
detail de yapmış olduğum id ve master_detail_id nin yerini değiştirmdim.
fahrettin abinin dediği gibi yaptım.
select * from detail where id=:id yaptım ve çalıştı.
hepinizden allah razı olsun.
kolay gelsin
Kullanıcı avatarı
fahrettin
Admin
Mesajlar: 2619
Kayıt: 11 Haz 2003 10:38
Konum: İstanbul
İletişim:

Mesaj gönderen fahrettin »

cümlemizden....

sorunu asmaniza sevindim dogrusu....
programcilik hayatina devam yani :wink:
Cevapla