Master Tablonun Detay Döküm Raporu

Firebird ve Interbase veritabanları ve SQL komutlarıyla ilgli sorularınızı sorabilirsiniz. Delphi tarafındaki sorularınızı lütfen Programlama forumunda sorunuz.
Cevapla
Kullanıcı avatarı
haydarxxx
Üye
Mesajlar: 668
Kayıt: 09 May 2005 11:31
Konum: izmir

Master Tablonun Detay Döküm Raporu

Mesaj gönderen haydarxxx »

Slm

TBL_OGRENCI adında bir master tablom var ve burada ADI_SOYADI ve SINIFI bölümüne girişleri yapıyorum.Bu tabloya bağlı olan detay tablom olan TBL_DERSLER tablosunda da her isimle bağdaşan dersler var.Bağlantılarımı IBdataset le sağlıyorum.DBLookupComboBox1 de SINIF adları örneğin (1A,2B,4C,...) DBLookupComboBox2 de dersadları var örneğin (TÜRKÇE,MATEMATİK,FEN VE TEKNOLOJİ...).Ben örneğin DBLookupComboBoxlara uygun verileri getirarak örneğin 2A(DBLookupComboBox1 ) Sınıfında ,TÜRKÇE(DBLookupComboBox2 ) dersine katılanları sorgulayarak raporlama yapmak istiyorum.Yani rapora master tablomda 2A sınıfında olanları ve bu sıınıfta TÜRKÇE dersi ile bağlantısı olanları sorgulamak ve bunları raporlamak istiyorum.Örneğin

Kod: Tümünü seç

IBQuery3.SQL.Clear;
IBQuery3.SQL.Add('select * from TBL_OGRENCI Where SINIFI='+#39+DBLookupComboBox1.text+#39+'' );
IBQuery3.open;
form9.quickrep1.preview ;
üzerinden sınıf sorgusu yapıyorum master tablomda fakat bu sınıfta DBLookupComboBox2 de yer alan ders ile ilgisi olan detay bilgisini nasıl sorgulatabilirim.Umarım anlatabilmişimdir. :? :roll:
Kullanıcı avatarı
bobasturk
Kıdemli Üye
Mesajlar: 1387
Kayıt: 20 May 2004 08:39
Konum: Düzce

Mesaj gönderen bobasturk »

Merhaba,

Master ve Detail Tablolarınızda benzemez ve öğrenciyi belirleyici sayısal alanınız vardır, öğrenci no gibi. sorguyu yaptığınız query ye detail tabloyu bağlarsanız sorgu sonucunda çıkan sonuçlarda öğrenci no ile uyuşma gösterenleri birbirine bağlayarak detail tabloyu size verecektir.

detail tablonun ibdatasetinin datasource özelliğini master tablonun datasource suna bağlarsanız ve datail ibdatasetin sql sine

Kod: Tümünü seç

select*from tablonuz where öğrenci no=:öğrenci no 
şeklinde yazarsanız tabloları ilişkili olarak verileri sonuçta bulunan öğrenci no ilişkisi ile verecektir.

acemiden bukadar olur. 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.

Resim
Kullanıcı avatarı
haydarxxx
Üye
Mesajlar: 668
Kayıt: 09 May 2005 11:31
Konum: izmir

Mesaj gönderen haydarxxx »

sy bobasturk
bahsettiğiniz master ve deait tablo bağlantısı ben bunu istemedim yanlız dedikleriniz projemde zaten var.

Benim istediğim şu (raporlama olarak) örneğin master tablomda 2A sınıfında olan ve detail tablodaki TÜRKÇE dersi atanmış olanları listelecek bunun için nasıl bir sql yazılır bunu soruyorum :(
Kullanıcı avatarı
haydarxxx
Üye
Mesajlar: 668
Kayıt: 09 May 2005 11:31
Konum: izmir

Mesaj gönderen haydarxxx »

Lütfen yardım arkadaşlar. :cry:
Kullanıcı avatarı
bobasturk
Kıdemli Üye
Mesajlar: 1387
Kayıt: 20 May 2004 08:39
Konum: Düzce

Mesaj gönderen bobasturk »

Merhaba,

Şimdi kayıt işlerinde ben master detail bağlantılar ile kişinin bilgilerini tablolara bölerek bir birine bağlı bir şekilde işliyorum. yani kişinin özlük hakları bir tabloda(ana tablo), aile bilgileri bir tabloda, çocuk bilgileri bir tabloda, vs vs. burada bunlar kişinin sicil nosu ile birbirine bağlı. şimdi query ve datasourcemiz var ana tabloya bağlı ve buradan sorgu çekiyoruz 2A sınıfı diye ve bize query 2a sınıfındaki kişileri döküyor. bu kişiler öğrenci no gibi değişmez ve benzemez sayı ile belirtilmiş, detail tabloları yani ders, ödül ceza vb gibi tablonun (datasetin) datasource özelliğini bizim bu ana tablodan sorgu çeken query nin datasourcesine bağlarsak ve sql satırına where öğrenci no=:öğrenci no yazarsak query de dönen sonuçlar detail tablolar ile bağlanacak ve siz rapor bileşeni üzerinde bu verilerin yazılacağı yerleri düzenlediğinizde çıktıyı alacaksınız.

Çok bilmiş değilim ama mantık aynı veri girerken veya görüntülerken master/detail ilişkisini nasıl kuruyorsanız o şekilde.

birde işin başka ve çokça kullanılan yönü var JOIN
bu join olayını forumda aratırsan baya güzel şeyler göreceksin. join ile tabloları birbirine birleştirip aynı grid içinde veya rapor içinde gösterebilecek ve çıktı alabileceksin.

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.

Resim
Kullanıcı avatarı
kadirkurtoglu
Üye
Mesajlar: 748
Kayıt: 22 May 2005 01:20
Konum: Uzakta Görünen Tepeden...

Mesaj gönderen kadirkurtoglu »

merhabalar

Kod: Tümünü seç

select * from OGRENCI where sinif = '2A'

Kod: Tümünü seç

select * from DERS where ders = 'turkce'
detil tabloyu aynı zamanda master detail olarakda şarta tabi tutabilirsin

Kod: Tümünü seç

select * from DERS where ders = 'turkce' and ogrencino =:ogrencino
Kullanıcı avatarı
haydarxxx
Üye
Mesajlar: 668
Kayıt: 09 May 2005 11:31
Konum: izmir

Mesaj gönderen haydarxxx »

sy bobasturk,kadirkurtoglu teşekkür ediyorum derdimi anladığınızı biliyorum ama ben bu iş beceremiyorum :(

Kod: Tümünü seç

IBQuery3.SQL.Clear;
IBQuery3.SQL.Add('select * from TBL_OGRENCI where SINIFI=''2A''   ' );
IBQuery3.open;
IBQuery5.SQL.Clear;
IBQuery5.SQL.Add('select * from TBL_DERSLER where DERS_KATILIM=''TURKCE'' AND OGRENCI_ID=:OGRENCI_ID ' );
IBQuery5.open;
form9.quickrep1.preview ;
denemesi yaptım ama olmadı.arkadaşlar bunla ilgili basit bir örnek yollayabileceklere çok minnetter olacağım.(haydaryuceloglu@hotmail.com)Join kullanma yazılarına baktım ama nafile :(
viewtopic.php?t=9193&highlight=join aradığı şeyi bulamadım zannediyorum :?: :idea:

Kod: Tümünü seç

TBL_OGRENCI    TABLOM (MASTER)
OGRENCI_ID *
ADI_SOYADI
SINIFI

TBL_DERSLER    TABLOM (DETAY)
DERS_ID
OGRENCI_ID *
DERS_GIRIS

* Olanlar ortak key

OGRENCI_ID          ADI_SOYADI                   SINIFI
1                        abc                  2A
2                        abd                 2C
3                        abe                 2A
4                        abf                  2A

DERS_ID               OGRENCI_ID             DERS_GIRIS
 1                         1                  TURKCE
2                          1                MATEMATIK
3                          1                RESIM
4                          2                  TURKCE
5                          2                  FEN
6                          2                RESIM
7                          3                  TURKCE
8                          3                MATEMATIK
9                          3                 FEN
10                        4                 SOYAL
11                        4                MATEMATIK
12                        4               FEN

1.Sorgu sonuçunda 2A sınıfına giden ve yanlızca TURKCE dersine katılanları süzecek ki burada bu kişiler abc ve abe (sql si) nasıl olacak yada nasıl hangi join nasıl yazılacak

2.rapor kısmınıda doğru yapılandırabilmem için (sorguyu raporda kontrol etmek) quickrep de subdetail bantının dataset i ne olmalı ADI_SOYADI, SINIF, DERS_KATILIM QRDBTEXT lerini datset i ne olmalı.
Kullanıcı avatarı
bobasturk
Kıdemli Üye
Mesajlar: 1387
Kayıt: 20 May 2004 08:39
Konum: Düzce

Mesaj gönderen bobasturk »

Merhaba,

Benzer uygulama elimde yok, verdiğin linki işledim ve gayet güzel açıklamış @naile ustam. oradaki inner join olayını iyi bir incele verilen örnek senin çalışmana benzer gibi geliyor. örnekte tüm kayıtlar dökülmüş where şartı kullanılarak kısıtlama yapılmamış, siz bu koda where şartı eklemeye çalışın. düzenlediğniz kodlar ile olmadı demişsiniz, ne olmadı acaba verimi gelmedi, hata mesajı mı verdi. @kadirkurtoğlu ustam benden daha güzel anlamış olayı ve güzel bir cevap vermiş.

Kod yazınız derseniz burada lafazanlık yaptığımdan ve o kadar usta olmadığımdan veremeyeceğim. kusura bakmayın 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.

Resim
Kullanıcı avatarı
haydarxxx
Üye
Mesajlar: 668
Kayıt: 09 May 2005 11:31
Konum: izmir

Mesaj gönderen haydarxxx »

Kod: Tümünü seç

procedure TForm1.Button2Click(Sender: TObject);
begin
IBQuery3.SQL.Clear;
IBQuery3.SQL.Add('SELECT TBL_OGRENCI.ADI_SOYADI, TBL_OGRENCI.SINIFI, TBL_DERSLER.DERS_KATILIM TBL_OGRENCI where SINIFI='+#39+DBLookupComboBox1.text+#39+' and TBL_DERSLER DERS_KATILIM='+#39+DBLookupComboBox3.text+#39+' ON TBL_DERSLER.OGRENCI_ID=TBL_OGRENCI.OGRENCI_ID   ');
IBQuery3.open;
form9.quickrep1.preview ;
end;
IBQuery3 ün sql sinde select* from TBL_OGRENCI yazıyor

saçmaladığımı biliyorum ama ilk başta da sorduğum Ana tablomdaki (TBL_OGRENCI)(DBLookupComboBox1.text) istediğim bir sınıfdaki öğrencileri Detay tablomdaki (TBL__DERSLER)(DBLookupComboBox1.tex3) içindeki istediğim dersi sorgulatmaya çalışıyorum.

DBLookupComboBox1 sınıfları DBLookupComboBox3 dersleri tutmakta ,IBQuery3 ün datasorcesine bağlı giridte kayıtlar gözüküyor ama butona bastığımda sorgulama yaptığında gridi boş gösteriyor ve raporun ön izlemesini de vermiyor.

koşullu olacak olan join nasıl yazılıp raporlanıyor.Bu konuda bilgisi olan bir arkadaşın yardımını bekliyorum.Çok teşekkürler
Kullanıcı avatarı
haydarxxx
Üye
Mesajlar: 668
Kayıt: 09 May 2005 11:31
Konum: izmir

Mesaj gönderen haydarxxx »

Lütfen yardım :shock: bekliyorum.Saygılar sevgiler :oops:
Cevapla