Öncelikle, örnekleri incelediğim halde çare bulamadığım için buraya yazıyorum..
Elimde 2 tablo var, Master ve Detail Tablo
her iki tabloyu birbirine TC KİMLİK NO ile bağlıyorum.
ANa Tablo da, TC_KIMLIKNO, ADI,SOYADI
Detail Tablo da ise, TC_KIMLIKNO, GOREV_YERI, UNVANI
alanlar bulunmaktadır.
------------------------
procedure TForm1.GorevYeri1Click(Sender: TObject);
begin
if Edit1.Text ='' Then Edit1.SetFocus;
if Edit1.Text<>'' Then
Begin
AdoQuery1.Close;
AdoQuery2.Close;
AdoQuery1.SQL.Clear;
AdoQuery1.Sql.Add('SELECT * From TABLO1, TABLO2 where Gorev_Yeri = '''+Edit1.Text+''' ');
AdoQuery1.Sql.Add('and TABLO1.Tc_KimlikNo=TABLO2.Tc_KimlikNo ');
AdoQuery1.Open;
//
AdoQuery2.SQL.Clear;
AdoQuery2.Sql.Add('SELECT * FROM TABLO2 where TABLO2.Tc_KimlikNo=:Tc_KimlikNo ');
AdoQuery2.Sql.Add('And Gorev_Yeri = '''+Edit1.Text+''' ');
AdoQuery2.Open;
End;
end;
-----------------------------
Bu sorguyu çalıştırdığım zaman
DBGRID1 de
---------------
TC_KIMLIKNO ADI SOYADI
11111111111 Ali AK
11111111111 Ali AK
Detail TABLO nun bağlı olduğu TBGRID2 de
TC_KIMLIKNO GOREV_YERI UNVANI
11111111111 Ankara Şef
11111111111 İstanbul Sayman
olarak çıkıyor, yani DBGRID2 kayıtları normal getiriyor
Ancak DB GRID1'de aslında tek bir kayıt çıkması lazım, çünkü veritabaninda zaten bir tane.
diğer kayitlar da alt alta bu şekilde Grid1 de mükerrer çıkıyor.
Sorgulamayi nasil yapmaliyiz ki, Detail Tabloda sorgulama yaptigimiz zaman Ana tablonun bağlı olduğu DBGRID1 de tek kayit çıksın.
MS SQL SORGU(Ana ve Detail Tablo)
MS SQL SORGU(Ana ve Detail Tablo)
Gelecek günden ne dilersen, doğacak günler onu getirir
şu şekilde kullanabilirsin;
yalnız Tc_KimlikNo iki tabloda da aynı şekilde yazılmış ise
TABLO2.Tc_KimlikNo=:Tc_KimlikNo '); satırını
TABLO2.Tc_KimlikNo=:TABLO1.Tc_KimlikNo '); yaz ve görev_yeri
Kod: Tümünü seç
AdoQuery1.Close;
AdoQuery2.Close;
AdoQuery1.SQL.Clear;
AdoQuery1.Sql.Add('SELECT * From TABLO1 where Gorev_Yeri = '''+Edit1.Text+''' ');
AdoQuery1.Open;
//
AdoQuery2.DataSource := AdoQuery1 e ait datasource;
AdoQuery2.SQL.Clear;
AdoQuery2.Sql.Add('SELECT * FROM TABLO2 where TABLO2.Tc_KimlikNo=:Tc_KimlikNo ');
AdoQuery2.Open;
TABLO2.Tc_KimlikNo=:Tc_KimlikNo '); satırını
TABLO2.Tc_KimlikNo=:TABLO1.Tc_KimlikNo '); yaz ve görev_yeri
öncelikle ilginiz için teşekkür ederim.
yalnız şöyle bir sorun var.
iki tablodaki ortak alan olan tc_kimlikno ile arama yapmanın bir zorluğu yoktur, yani daha doğrusu, birinci tablodaki alanlar üzerinden arama yapılabiliyor, ve bu birinci tablodan arama yapılıdğında TABLO2 dolayısıyla DBGRID2 de ona göre açılıyor,
sorun şu;
istiyorum ki, TABLO2 deki alanlardan her hangi birisinde arama yapayım, örneğin TABLO2 ye ait olan Gorev_Yerin'ne göre arama yapayım, ve buna göre kayıtlar gelsin, ve TABLO2 de bulunamayan bir kaydin TABLO1 de hiç görüntüsü gelmesin.
Örneğin, görev yeri "ANKARA" değilse, tc_kimlikler eşit olsa bile TABLO1 de aynı tc kimlige ait olan kayıt hiç gelmesin.. oysa sorudaki örnekte te belirttiğim gibi olmasa bile geliyor.
yalnız şöyle bir sorun var.
iki tablodaki ortak alan olan tc_kimlikno ile arama yapmanın bir zorluğu yoktur, yani daha doğrusu, birinci tablodaki alanlar üzerinden arama yapılabiliyor, ve bu birinci tablodan arama yapılıdğında TABLO2 dolayısıyla DBGRID2 de ona göre açılıyor,
sorun şu;
istiyorum ki, TABLO2 deki alanlardan her hangi birisinde arama yapayım, örneğin TABLO2 ye ait olan Gorev_Yerin'ne göre arama yapayım, ve buna göre kayıtlar gelsin, ve TABLO2 de bulunamayan bir kaydin TABLO1 de hiç görüntüsü gelmesin.
Örneğin, görev yeri "ANKARA" değilse, tc_kimlikler eşit olsa bile TABLO1 de aynı tc kimlige ait olan kayıt hiç gelmesin.. oysa sorudaki örnekte te belirttiğim gibi olmasa bile geliyor.
Gelecek günden ne dilersen, doğacak günler onu getirir
Sorunu şu şekilde çözdüm,
lazım olan arkadaşların işine yarar diye buraya yazıyorum...
------
procedure TForm1.Button4Click(Sender: TObject);
begin
if Edit1.Text ='' Then Edit1.SetFocus;
if Edit1.Text<>'' Then
Begin
AdoQuery1.Close;
AdoQuery1.SQL.Clear;
AdoQuery1.SQL.Add('SELECT TABLO1.Tc_KimlikNo, TABLO2.Gorev_Yeri, TABLO1.Adi, TABLO1.Soyadi, TABLO1.Kurum_Sicili, TABLO1.Dogum_Yeri, TABLO1.Dogum_Tarihi');
AdoQuery1.SQL.Add('FROM TABLO1 INNER JOIN TABLO2 ON TABLO1.Tc_KimlikNo = TABLO2.Tc_KimlikNo');
AdoQuery1.SQL.Add('GROUP BY TABLO1.Tc_KimlikNo, TABLO2.Gorev_Yeri, TABLO1.Adi, TABLO1.Soyadi, TABLO1.Kurum_Sicili, TABLO1.Dogum_Yeri, TABLO1.Dogum_Tarihi');
AdoQuery1.SQL.Add('HAVING (TABLO2.Gorev_Yeri = '''+Edit1.Text+''' ) ');
AdoQuery1.Open;
//
AdoQuery2.SQL.Clear;
AdoQuery2.Close;
AdoQuery2.Sql.Add('SELECT * FROM TABLO2 WHERE TABLO2.Tc_KimlikNo=Tc_KimlikNo ');
AdoQuery2.Sql.Add('And Gorev_Yeri = '''+Edit1.Text+''' ');
AdoQuery2.Open;
End;
end;
lazım olan arkadaşların işine yarar diye buraya yazıyorum...
------
procedure TForm1.Button4Click(Sender: TObject);
begin
if Edit1.Text ='' Then Edit1.SetFocus;
if Edit1.Text<>'' Then
Begin
AdoQuery1.Close;
AdoQuery1.SQL.Clear;
AdoQuery1.SQL.Add('SELECT TABLO1.Tc_KimlikNo, TABLO2.Gorev_Yeri, TABLO1.Adi, TABLO1.Soyadi, TABLO1.Kurum_Sicili, TABLO1.Dogum_Yeri, TABLO1.Dogum_Tarihi');
AdoQuery1.SQL.Add('FROM TABLO1 INNER JOIN TABLO2 ON TABLO1.Tc_KimlikNo = TABLO2.Tc_KimlikNo');
AdoQuery1.SQL.Add('GROUP BY TABLO1.Tc_KimlikNo, TABLO2.Gorev_Yeri, TABLO1.Adi, TABLO1.Soyadi, TABLO1.Kurum_Sicili, TABLO1.Dogum_Yeri, TABLO1.Dogum_Tarihi');
AdoQuery1.SQL.Add('HAVING (TABLO2.Gorev_Yeri = '''+Edit1.Text+''' ) ');
AdoQuery1.Open;
//
AdoQuery2.SQL.Clear;
AdoQuery2.Close;
AdoQuery2.Sql.Add('SELECT * FROM TABLO2 WHERE TABLO2.Tc_KimlikNo=Tc_KimlikNo ');
AdoQuery2.Sql.Add('And Gorev_Yeri = '''+Edit1.Text+''' ');
AdoQuery2.Open;
End;
end;
Gelecek günden ne dilersen, doğacak günler onu getirir