DBGRID Anzahl der Datensätze anzeigen.

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
Andy Nightingale
Beiträge: 366
Registriert: Mo 13. Jan 2025, 12:11

DBGRID Anzahl der Datensätze anzeigen.

Beitrag von Andy Nightingale »

Hallo Leute,
gibt es eine einfache Möglichkeit im DBGRID die Anzahl der geladenen Daten im Grid anzuzeigen? Momentan habe ich ein Label mit dieser Programmierung:

Code: Alles auswählen

procedure TFStickstoff.Label1Click(Sender: TObject);
begin
    Label1.Caption := Format('Anzahl Datensätze: %d', [DataSourceStickstoff.DataSet.RecordCount]);
end;                                                                                                

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 7201
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: DBGRID Anzahl der Datensätze anzeigen.

Beitrag von af0815 »

RecordCount gibt die je nach Datenbank nur zurőck, wieviele Datensátze gefeched worden sind.

siehe auch
https://lazarus-ccr.sourceforge.io/docs ... count.html
https://wiki.lazarus.freepascal.org/SqlDBHowto/de

Am besten ist es, den Server direkt mit "SELECT COUNT(*)" oder ähnlich zu fragen. Es gibt den Tip "Query.PacketRecords := -1; // <-- FetchAll" zu verwenden, nur das erzwingt, das das komplette Datenset geladen wird. Bei sicher immer kleinen Datenmengen ist das jetzt noch akzeptabel.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Joh
Lazarusforum e. V.
Beiträge: 343
Registriert: Sa 26. Mai 2012, 17:31
OS, Lazarus, FPC: Win 10 (L 2.2.6 x64 FPC 3.2.2)
CPU-Target: 64Bit

Re: DBGRID Anzahl der Datensätze anzeigen.

Beitrag von Joh »

af0815 hat geschrieben: Do 12. Mär 2026, 16:37 Am besten ist es, den Server direkt mit "SELECT COUNT(*)" oder ähnlich zu fragen. Es gibt den Tip "Query.PacketRecords := -1; // <-- FetchAll" zu verwenden, nur das erzwingt, das das komplette Datenset geladen wird. Bei sicher immer kleinen Datenmengen ist das jetzt noch akzeptabel.
Bei ((sicher immer kleinen Datenmengen) und (lokalen Datenbanken))...
just my two Beer

Andy Nightingale
Beiträge: 366
Registriert: Mo 13. Jan 2025, 12:11

Re: DBGRID Anzahl der Datensätze anzeigen.

Beitrag von Andy Nightingale »

Joh hat geschrieben: Do 12. Mär 2026, 17:54
af0815 hat geschrieben: Do 12. Mär 2026, 16:37 Am besten ist es, den Server direkt mit "SELECT COUNT(*)" oder ähnlich zu fragen. Es gibt den Tip "Query.PacketRecords := -1; // <-- FetchAll" zu verwenden, nur das erzwingt, das das komplette Datenset geladen wird. Bei sicher immer kleinen Datenmengen ist das jetzt noch akzeptabel.
Bei ((sicher immer kleinen Datenmengen) und (lokalen Datenbanken))...
Genau richtig erkannt...

Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 7201
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

Re: DBGRID Anzahl der Datensätze anzeigen.

Beitrag von af0815 »

Joh hat geschrieben: Do 12. Mär 2026, 17:54 lokalen Datenbanken
Man muss den Typ der Datenbank sich ansehen. Bei Dbase, FoxPro oder Access war der Recordcount das richtige MIttel der Wahl (Abgesehen, das ich eine Access und Excel Allergie berufsbedingt habe).
Bei Server Datenbanken (auch wenn sie lokal sind) sieht das anders aus, weil die Treiberschichten auf Datenmengen ausgelegt sind und nicht auf Datensätze.

Wenn du den den "SELECT COUNT(*)" verwendest, so kann der Optimizer vom SQL-Server sich die Daten optimiert zusammenstellen und liefert genaugenommen nur ein einfaches Recordset mit einer Zeile zurück. Das geht flott, meisten ist es nur ein IP-Paket. Muss der Server jetzt die kompletten Daten übertragen, so kann das im schlechtesten Fall die Netzwerklast unnötig belasten, weil Daten übertragen werden, die am Client nur gepuffert werden, genaugenommen aber nicht gebraucht werden. Brauche ich die Daten wirklich alle, so ist es besser diese geeignet abzulegen und dann die Anzahl übers Programm zu berechnen. Das schlechteste ist natürlich die Daten 2x abzurufen - einmal umd die Anzahl in Erfahrung zu bringen und einmal um sie anzuzeigen.

Ich habe da viel Lehrgeld gezahlt, über die Netzwerkverbindungen früher nach Fernost. Das ging am Anfang noch über T1 Verbindungen (https://de.wikipedia.org/wiki/Trunk_1). Viel Spass mit Datenmengen auf den Leitungen :-) . Es ist aber aus Sicht des DB-Admins auch nicht lustig, wenn man draufkommt, das da unnötige Locks, Bandbreiten, Loads etc. am Server erzeugt werden.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Benutzeravatar
Zvoni
Beiträge: 586
Registriert: Fr 5. Jul 2024, 08:26
OS, Lazarus, FPC: Windoof 10 Pro (Laz/FPC fixes)
CPU-Target: 64Bit
Wohnort: BW

Re: DBGRID Anzahl der Datensätze anzeigen.

Beitrag von Zvoni »

Oder statt einem separaten SELECT COUNT(*) gleich im ursprünglichen SELECT mitliefern
(Beispiel aus einem meiner Programme)

Wichtig: Der Filter muss in beiden SELECTs derselbe sein. Kann sogar parametriert werden

Code: Alles auswählen

select * from tbl_country_provider_zone As B
inner join 
(select count(*) as Cnt from tbl_country_provider_zone where Country_ID=1) as A on 1=1
where B.Country_ID=1
Damit wird die Anzahl Zeilen bei jedem Datensatz geliefert, und du brauchst nur die Spalte im ersten Datensatz auszulesen
Ein System sie alle zu knechten, ein Code sie alle zu finden,
Eine IDE sie ins Dunkel zu treiben, und an das Framework ewig zu binden,
Im Lande Redmond, wo die Windows drohn.

Antworten