![]() |
[Interbase] GetRecordCount
Hi,
ich habe hier 2 DBgrids (Master/Detail). Nun will ich wissen, wieviele Einträge das Detail-Dataset des ausgewählten Master-Datasets hat. Mit DetailDataSet.GetRecordCount erhalte ich Werte, die nicht stimmen können. Bzw. wo ist die beste Stelle, dies einzufügen ? |
Re: [Interbase] GetRecordCount
Hi,
die Anzahl der Records wird bei IB/FB eigentlich nur über ein
SQL-Code:
richtig abgefragt. Über die Komponenteneigenschaften RecordCount,... müsste der Client alle Datensätze von der Datenbank holen (FetchAll) und das widerspricht mal wieder allem worauf man bei Client/Server achten soll....
Select Count(..) From ...
Grüße Lemmy |
Re: [Interbase] GetRecordCount
Hi Lemmy,
Du meinst mit COUNT ? Sagen wir mal so, wenn ich 10.000 Datensätze habe und diese z.B. mit
SQL-Code:
einschränke, das müßte doch gehen ?
SELECT COUNT * FROM TABLE WHERE Bedingung
|
Re: [Interbase] GetRecordCount
Hai Hansa,
so müsste es stimmen:
SQL-Code:
Dann kannst Du über .FieldByName ('anzahl').AsInteger die Menge abfragen.
SELECT Count (*) As anzahl FROM tabelle WHERE bedingung
|
Re: [Interbase] GetRecordCount
Hi Hansa,
COUNT ist eine SQL-Funktion die die Anzahl der Datensätze zählt, die sich in der Ergebnismenge befinden würden: WEnn Du also ne Abfrage erstellst:
SQL-Code:
Select * from Adressen where PLZ=7000
dann bekommst Du mit
SQL-Code:
die Anzahl der Datensätze zurück.
Select count(*) as Anzahl from Adressen where PLZ=7000
Grüße Lemmy P.S.: Halt so wie es Sharky erklärt hat, nur etwas ausführlicher.... |
Re: [Interbase] GetRecordCount
Das ist ja schon mal gut. Aber bei mir muß es immer kompliziert werden. Ich habe zwei DBgrids (Master/Detail), wobei halt das Master als Source der Detailtable dient. Und nun bräuchte ich nur die Anzahl der jeweiligen Detailmenge. Wie mache ich das denn jetzt ? Wo und wie soll ich da das Count einbauen ? :gruebel:
|
Re: [Interbase] GetRecordCount
Uff... mit den Master/Detail Funktionen habe ich nie gearbeitet.
Ich habe immer für jedes Grid ein Query / Datasource. Wenn z.B.: Query1 für die "Mastertabelle" zuständig ist setze ich im AfterScroll-Ereigniss einfach den SQL-Befehl für mein Query2 neu.
Delphi-Quellcode:
procedure TForm1.Query1AfterScroll(DataSet: TDataSet);
begin Query2.Close; Query2.SQL.Text := 'SELECT *, Count (*) As anzahl from detail WHERE master_id = ' + DataSet.FieldByName ('master_id').AsString; Query2.Open; end; |
Re: [Interbase] GetRecordCount
Hi Hansa,
Zitat:
Wenn Du ne Master/Detail-Ansicht hast, brauchst Du 2 Grids und für jedes Grid ne TDataSource incl. Anhang (also TDataSet). Dadurch hast Du 2 SQL-Statements. Wenn Du die Anzahl der Datensätze der jeweiligen Abfrage haben willst, gibts 2 Möglichkeiten: 1. Direkte Abfrage im Client durch eine weitere TDataSet: Es wird erst die Anzahl der Master-Datensätze bestimmt, dann die Anzahl der Detail-Datensätze. 2. Über SP wenn es denn die Abfragen zulassen. Grüße Lemmy |
Re: [Interbase] GetRecordCount
Hi,
die Hinweise waren hilfreich. Sharkys Methode sieht am besten aus, aber leider ging sie nicht. Enweder wird COUNT verwendet, oder ein "," und die einzelnen Feldnamen. Gemischt scheint das leider nicht zu gehen. Wenn ich das ganze nun aber mit der Idee von Lemmy irgendwie mische und noch meinen eigenen Senf dazu gebe, so wird der Brei nicht verdorben. :mrgreen:
Delphi-Quellcode:
Tja, so funktioniert es jetzt. Ein zusätzliches DataSet ist in dieser Variante anscheinend auf jeden Fall nötig.
procedure TForm1.DataSource2DataChange(Sender: TObject; Field: TField);
begin AnzDS.Close; AnzDS.ParamByName('ID_MASTER').AsInteger := MasterDS.FieldByName ('ID').AsInteger; AnzDS.SelectSQL.Text := 'SELECT COUNT (ID) AS ANZAHL FROM DETAIL WHERE ID_MASTER= :ID_MASTER'; AnzDS.Open; Label1.Caption := 'Anzahl : '+ AnzDS.FieldByName ('ANZAHL').AsString; end; @Admin: was ist bloß mit dem Server los? Den Beitrag hier hatte ich jetzt über eine St. in die Zwischenablage gerettet. Und das ohne 1&1. :lol: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:08 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz