Master\Detail IBDataSet_recordcount

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\Detail IBDataSet_recordcount

Mesaj gönderen haydarxxx »

Paradox tan FB ye geçen biri olarak
FB_1,5 DELPHİ7.0
IBDataSet -IBTransaction-IBDatabase kulanarak yaptığım master tabloma bağlı detailtablomda aşağıda ki gibi ,bir kayıt için detay bulunuyor.ve detay tablomun SelectSQL sinde
select *from TBL_DERSLER where OGRENCI_ID=:OGRENCI_ID

(forumda select count(*) seklinde bir komut var ama nasıl kullacağız örneğini bulamadım :? )

tablo adı :TBL_DERSLER

DERS_ID OGERNCİ_ID DERS_KATILIM
6 1 TÜRKÇE
7 1 MATEMATİK
8 1 FEN BİLGİSİ

Edit1.text:=inttostr(IBQuery1(örneğin)yada.recordcount);
bir kişiye ait 3adet detay bilgim var.Bu detaydaki kayıtları Select*from TBL_DERSLER olarak saydırmak istiyorum bunun için IBDataSet mi IBQuery mi kullanılıyor ve nasıl SQL yazılıyor.Paradox taki gibi yazılanı almıyor

IBQuery1.close;
IBQuery1.SQL.Clear;
IBQuery1.SQL.Add('select*from TBL_DERSLER '); // ('select count(*) TBL_DERSLER ') şeklinde denedim
IBQuery1.open;
Edit1.text:=inttostr(IBQuery1.recordcount);

Bağlantı şekli ile bir örnek verecek arkadaş olursa çok memnun olacağım.
Kullanıcı avatarı
nitro
Üye
Mesajlar: 1112
Kayıt: 23 Ağu 2004 01:18
Konum: Çanakkale
İletişim:

Mesaj gönderen nitro »

Kod: Tümünü seç

IBQuery1.close;
IBQuery1.SQL.Clear;
IBQuery1.SQL.Add('select*from TBL_DERSLER ');
IBQuery1.open;
IBQuery1.last;
Edit1.text:=inttostr(IBQuery1.recordcount); 
bu kod sana tablodaki kayıt sayısını verir.
Kullanıcı avatarı
hbahadir
Kıdemli Üye
Mesajlar: 544
Kayıt: 06 Ara 2004 05:03
Konum: BURSA idi artık İST.
İletişim:

Mesaj gönderen hbahadir »

Kod: Tümünü seç

IBQuery1.SQL.Clear; 
IBQuery1.SQL.Add('select count(*) from TBL_DERSLER ') 
IBQuery1.open; 
Edit1.text:=inttostr(IBQuery1.Fields[0].AsInteger); 
Kullanıcı avatarı
haydarxxx
Üye
Mesajlar: 668
Kayıt: 09 May 2005 11:31
Konum: izmir

Mesaj gönderen haydarxxx »

nitrokonat teşekkür ediyorum ama benim istediğim tablodaki tüm kayıtlar değil master tablodaki bir kişiye ait detail deki kayıt sayısı yinede sağolasın.

hbahadir aratmayaptıgım alan string değerli yani yukarda verdiğim tabloda bir kişi ile ilişkilenmiş 3 adet ders var ben bu kişi üzerinde iken sorgulama yaptığımda edit de 3 ,başka bir kişi sorguladığımda edit te 2 gibi her kişi ile ilgili detayları saydıracağım.ve IBQuery1 nsnesinin datasourc ünü kayıtların tutulduğu IBdataset e bağladım bilimiyorum bağlantım doğrumu :?

IBQuery1.SQL.Clear;
IBQuery1.SQL.Add('select count(*) from TBL_DERSLER ') ;
IBQuery1.open;
Edit1.text:=inttostr(IBQuery1.Fields[0].AsInteger);

yaptığımda PK alanlı olan DERS_ID not found hatası alıyorum.
Edit1.text:=inttostr(IBQuery1.Fields[0].Asstring); olarakta denedim sonuç değişmedi.

(datasetime bağlı vt_tablosunun özellikği
DERS_ID..... >PK
OGRENCI_ID..... >FK
DERS_KATILIM.... >VARCHAR)
Kullanıcı avatarı
hbahadir
Kıdemli Üye
Mesajlar: 544
Kayıt: 06 Ara 2004 05:03
Konum: BURSA idi artık İST.
İletişim:

Mesaj gönderen hbahadir »

ibquery1 bileşeninde select count(*) dediğinde döndürdüğü alan sayısı sadece 1 alan olur. Senin ibquery1 bileşeninde diğer fieldler yüklüdür. onları temizle ve ondan sonra bu işlemi yenile (haliyle sorgu sonucunda dönmeyen bir alanı bulamıyor datasetin).
Kullanıcı avatarı
haydarxxx
Üye
Mesajlar: 668
Kayıt: 09 May 2005 11:31
Konum: izmir

Mesaj gönderen haydarxxx »

SY hbahadir dediğinizi yaptım ama
IBQuery1 in FieldEditor den tüm alanları çıkardım.sql kod sorgulama yapıyor ama kayıt sayısını 8 olarak gösteriyor yani tüm tabloyu alıyor nitrokonat verdiği kodla farklı bir işlem yapmıyor, oysaki bir kişiye ait detayları gösteren IBDataset te ve buna bağlı dbgirid ten kayıtlara bakıyorum
TÜRKÇE
MATEMATİK
FEN BİLİGİSİ
olmak üzere üç kayıtım var tamam tüm tabloda 8 kayıt var (detailde) ama örneğin hbahadir üç tane derse geliyor nitrokonat 2 tane derse katılıyor haydar 5 tanene derse katılıyor bunlar detail tablosunda kişi üzerinden görüyorum sorgulama yaptığımda kime tıklamışsam onun detay bilgileri ve sayıları değişiyor dolayısı ile
hbahadir recordcount= 3
nitrokonat recordcount=2
haydar recordcount=5 gibi herkişiye göre sorgu yapacak.Kısacası detail tablosu ndaki tüm kayıtlar değil o kişiye ait kayıt sayılarını arıyacak :roll:
Kullanıcı avatarı
hbahadir
Kıdemli Üye
Mesajlar: 544
Kayıt: 06 Ara 2004 05:03
Konum: BURSA idi artık İST.
İletişim:

Mesaj gönderen hbahadir »

sende sorgunu

Kod: Tümünü seç

IBQuery1.SQL.Add('select count(*) from TBL_DERSLER where DERS_ID = 1') 
şekline çevir.
Kullanıcı avatarı
nitro
Üye
Mesajlar: 1112
Kayıt: 23 Ağu 2004 01:18
Konum: Çanakkale
İletişim:

Mesaj gönderen nitro »

Kod: Tümünü seç

select max(ogrenciadi), max(ogrencisoyadi), count(*) from tbl_dersler group by ogrenciadi
bu kod sana

Kod: Tümünü seç

nitro    konat    4
ali      akgün    5
veli     güneş    6
ahmet    yılmaz   2
gibi bi sonuç döndürür. kolay gelsin
Cevapla