CdGrid üzerinde, inner join sonucunda gelen alanları gösterme

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
mantik20
Üye
Mesajlar: 10
Kayıt: 25 Ağu 2015 09:42

CdGrid üzerinde, inner join sonucunda gelen alanları gösterme

Mesaj gönderen mantik20 »

Merhaba. Öncelikle belirtmek isterim, forumda sorunumla ilgili arama yapmaya çalıştım fakat o kadar çok sonuç var ki, bir yerde yoruldum ve affınıza sığınarak sormak istedim;

Delphi formumda 1 cxgrid ve 4 adet cxtextedit var, bunların 3 tanesinin onchange olayına, ibdataset kullanarak tek tablodan sonuç alan sql sorgusu yazdım ve dönen alanlar/sonuçlar cxgrid üzerinde gösteriliyor. 4. cxtextedit onchange olayına ise, yine aynı dataseti kullanarak inner join ile iki tabloyu birleştirdiğim bir sorgu yazdım ve alanlar/sonuçlar yine gösteriliyor ama inner join ile birleştirdiğim ikinci tablonun alanlarını cxgrid üzerinde göstermeyi başaramadım. Bu konuda yardımcı olabilirseniz çok memnun olurum, iyi geceler diliyorum.

Tek tablodan veri çektiğim sorgum;

Kod: Tümünü seç

DM_REHBER.REHBER_dts.Close;
DM_REHBER.REHBER_dts.SelectSQL.Clear;
DM_REHBER.REHBER_dts.SelectSQL.Add('SELECT * FROM VERI_TBL WHERE DURUM=0 AND ADSOYAD like ''%'+cxTextEdit1.Text+'%''') ;
DM_REHBER.REHBER_dts.Open;
Inner join kullandığım sorgum;

Kod: Tümünü seç

DM_REHBER.REHBER_dts.Close;
DM_REHBER.REHBER_dts.SelectSQL.Clear;
DM_REHBER.REHBER_dts.SelectSQL.Add('select * from veri_tbl  v inner join birim_tbl  b on v.birim_id=b.birim_id where b.gorevtanim like ''%'+cxTextEdit4.Text+'%''');
DM_REHBER.REHBER_dts.Open;
ertank
Kıdemli Üye
Mesajlar: 1653
Kayıt: 12 Eyl 2015 12:45

Re: CdGrid üzerinde, inner join sonucunda gelen alanları gösterme

Mesaj gönderen ertank »

Merhaba,

Anladığım kadarıyla örnek verdiğiniz Join sorgusu çalıştığı zaman sonucunda dönen kolon isimleri Join olmayan ile aynı mı kontrol etmenizde fayda var ki yüksek ihtimal ile farklı. Eğer farklı ise birkaç alternatif sunabilirim.

1) Tüm butonlar SQL çalıştıktan sonra aşağıdaki kodu çalıştırabilir.

Kod: Tümünü seç

cxGrid1DBTableView1.BeginUpdate();
try
  cxGrid1DBTableView1.ClearItems();
  cxGrid1DBTableView1.DataController.CreateAllItems();
finally
  cxGrid1DBTableView1.EndUpdate();
end;
2) Her iki SQL cümlenizi detaylı olarak yazarak "select *" değil "select a.adi as "ad", b.soyadi as "soyad" from" gibi her halukarda kolon isimleri sabit olacak şekilde düzenleyerek cxGrid kolon oluşturma işine hiç girmeyebilirsiniz.

3) cxGrid kolon ayarlarını INI dosyası içine saklayabilir. Bu özelliğinden faydalanabilirsiniz.

Kod: Tümünü seç

cxGrid1DBTableView1.StoreToIniFile('Sorgu1GridGorunum', True, [gsoUseFilter..gsoUseSummary]);
Her iki sorgu için ayrı ayrı tasarımı dizayn zamanında yaparak yukarıdaki kod yardımı ile her ikisini de farklı dosya isimlerinde kaydeder iseniz aşağıdaki kodu kullanarak ekran kolon tanımlamalarını tasarım zamanındaki gibi yükleyebilirsiniz.

Kod: Tümünü seç

cxGrid1DBTableView1.RestoreFromIniFile('Sorgu1GridGorunum', True, True, [gsoUseFilter..gsoUseSummary]);
cxGrid1DBTableView1.DataController.Filter.Clear();
mantik20
Üye
Mesajlar: 10
Kayıt: 25 Ağu 2015 09:42

Re: CdGrid üzerinde, inner join sonucunda gelen alanları gösterme

Mesaj gönderen mantik20 »

Sayın ertank, cevap verme nezaketiniz için teşekkür ederim. Devexpress bileşenlerini yeni yeni öğrendiğim için, cevabınızdaki detayları okuyup uygulamaya çalıştım ama birkaç gündür pek ilerleyemedim açıkçası.
Ve sorumu da sanırım detaylandırmam gerekiyor.

-Bir tabloya (veri_tbl), dataset(rehber_dts) kullanarak insert-update-select vb. işlemleri yapıyorum.
-Aynı datasete(rehber_dts) bağladığım datasource'u, cxgridin datasource özelliğine bağlayıp, tablo(veri_tbl) alanlarını cxgrid üzerinde otomatik seçiyorum ve verileri yüklüyorum, burada sorun yok.

-Veritabanındaki diğer bir tablo(birim_tbl) ile, veri_tbl tablosu arasında inner join ile bağlantı kurup sorgulama yapmam gerekti ve sorgu sonucunda hem veri_tbl hem de birim_tbl tablolarından alanları cxgrid üzerinde göstermem gerekti. Fakat, cxgridin alanları, datasource ile bağlı olduğu datasetten(veri_dts) otomatik geliyor ve inner join sorgusu sonucu gelen 2 tablonun alanlarını gösteremiyorum, sıkıntım burada. Sizin verdiğiniz cevap büyük ihtimalle sorunumu çözecek ama dediğim gibi devexpress bileşenleriyle henüz yeni tanışıyorum.
Cevabınız için size tekrar teşekkür ederim.
Cevapla