AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi [Interbase] GetRecordCount
Thema durchsuchen
Ansicht
Themen-Optionen

[Interbase] GetRecordCount

Ein Thema von Hansa · begonnen am 10. Jan 2004 · letzter Beitrag vom 12. Jan 2004
Antwort Antwort
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#1

[Interbase] GetRecordCount

  Alt 10. Jan 2004, 19:39
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 ?
Gruß
Hansa
  Mit Zitat antworten Zitat
Lemmy

Registriert seit: 8. Jun 2002
Ort: Berglen
2.381 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: [Interbase] GetRecordCount

  Alt 12. Jan 2004, 10:04
Hi,

die Anzahl der Records wird bei IB/FB eigentlich nur über ein
Select Count(..) From ... 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....

Grüße
Lemmy
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#3

Re: [Interbase] GetRecordCount

  Alt 12. Jan 2004, 13:01
Hi Lemmy,

Du meinst mit COUNT ? Sagen wir mal so, wenn ich 10.000 Datensätze habe und diese z.B. mit SELECT COUNT * FROM TABLE WHERE Bedingung einschränke, das müßte doch gehen ?
Gruß
Hansa
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.252 Beiträge
 
Delphi 2006 Professional
 
#4

Re: [Interbase] GetRecordCount

  Alt 12. Jan 2004, 13:03
Hai Hansa,

so müsste es stimmen:

SELECT Count (*) As anzahl FROM tabelle WHERE bedingung Dann kannst Du über .FieldByName ('anzahl').AsInteger die Menge abfragen.
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
Lemmy

Registriert seit: 8. Jun 2002
Ort: Berglen
2.381 Beiträge
 
Delphi 10.4 Sydney
 
#5

Re: [Interbase] GetRecordCount

  Alt 12. Jan 2004, 13:18
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:

 Select * from Adressen where PLZ=7000
dann bekommst Du mit


 Select count(*) as Anzahl from Adressen where PLZ=7000 die Anzahl der Datensätze zurück.

Grüße
Lemmy

P.S.: Halt so wie es Sharky erklärt hat, nur etwas ausführlicher....
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#6

Re: [Interbase] GetRecordCount

  Alt 12. Jan 2004, 13:53
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 ?
Gruß
Hansa
  Mit Zitat antworten Zitat
Benutzerbild von Sharky
Sharky

Registriert seit: 29. Mai 2002
Ort: Frankfurt
8.252 Beiträge
 
Delphi 2006 Professional
 
#7

Re: [Interbase] GetRecordCount

  Alt 12. Jan 2004, 14:57
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;
Stephan B.
"Lasst den Gänsen ihre Füßchen"
  Mit Zitat antworten Zitat
Lemmy

Registriert seit: 8. Jun 2002
Ort: Berglen
2.381 Beiträge
 
Delphi 10.4 Sydney
 
#8

Re: [Interbase] GetRecordCount

  Alt 12. Jan 2004, 17:26
Hi Hansa,

Zitat von Hansa:
... wobei halt das Master als Source der Detailtable dient. Und nun bräuchte ich nur die Anzahl der jeweiligen Detailmenge.
jetzt muss ich mal ....

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
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#9

Re: [Interbase] GetRecordCount

  Alt 12. Jan 2004, 20:48
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.

Delphi-Quellcode:
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;
Tja, so funktioniert es jetzt. Ein zusätzliches DataSet ist in dieser Variante anscheinend auf jeden Fall nötig.

@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.
Gruß
Hansa
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:28 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz