Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Anzahl von Datenbank Einträgen. (https://www.delphipraxis.net/178090-anzahl-von-datenbank-eintraegen.html)

ngott2 17. Dez 2013 08:15

Datenbank: MDB • Version: keine Angabe • Zugriff über: TADOQuery

Anzahl von Datenbank Einträgen.
 
Guten morgen Liebe Delphi Praxis Community.

Habe ein Sql Statment gebastelt das mir die Anzahl der Einträge meiner Datenbank zurück geben soll.Ich brauch die Anzahl der Datenbankeinträge.
Beim Ersten aufruf gibt er 2 zurück was momentan richtig ist. Bei jeden weiteren Aufruf kommt einer hinzu. Warum ist das so ?
Vermutlich ist Query.SQL.count falsch oder ? Query = class var Query : TADOQuery; Ich brauche die Anzahl für eine Fortlaufende Dokumenten Nummer.


Code:
Query.SQL.Add('SELECT COUNT (ID) from Document');
    Result := Query.SQL.Count;
Habe zwei Sachen aus dem Internet ausprobiert die gehen aber leider auch nicht.

Der schöne Günther 17. Dez 2013 08:20

AW: Anzahl von Datenbank Einträgen.
 
Schau doch nochmal genau was
Delphi-Quellcode:
Query.SQL
ist. Nicht
Delphi-Quellcode:
Query
, sondern
Delphi-Quellcode:
Query.SQL
. Was du damit aktiv anstellst, und was du mit
Delphi-Quellcode:
Query.SQL.Count
abfragst :wink:

Mikkey 17. Dez 2013 08:22

AW: Anzahl von Datenbank Einträgen.
 
Verwende Query.sql.Text.

Sonst verlängerst Du die Query immer weiter.

Die Abfrage geht dann auch mit Query.Fields[0], oder Du musst eine Klausel "AS Anzahl" oder so anhängen.

rapante 17. Dez 2013 08:22

AW: Anzahl von Datenbank Einträgen.
 
Moin,
probiere es mal so:

Delphi-Quellcode:
Query.SQL.Text := 'SELECT COUNT (ID) AS counter from Document';
Query.Open;
Result := Query.FieldByName('counter').AsInteger;

Bebe 17. Dez 2013 08:23

AW: Anzahl von Datenbank Einträgen.
 
Hallo,

so wie ich das sehe fügst du immer wieder das gleiche Statement hinzu (ohne zu löschen [SQL.Clear]) und fragst dann nach der Anzahl der Zeilen von dem Statement ab. Das muss immer wachsen.

Im Statement hast du Count(ID) enthalten, daher musst du danach das erste Feld der Query abfragen. Die zweite Zeile gehört dort nicht rein.

Gruß
Matze

DeddyH 17. Dez 2013 08:27

AW: Anzahl von Datenbank Einträgen.
 
Und rapantes Code noch einmal mit Kommentaren zum Verständnis:
Delphi-Quellcode:
(* Gesamtes Statement auf einmal setzen -> evtl. vorhandenes überschreiben *)
Query.SQL.Text := 'SELECT COUNT (ID) AS counter from Document';
(* Abfrage auf die DB loslassen *)
Query.Open;
(* Ergebnismenge unter Verwendung des im Statement angegeben Feldalias auswerten *)
Result := Query.FieldByName('counter').AsInteger;

baumina 17. Dez 2013 08:28

AW: Anzahl von Datenbank Einträgen.
 
Du solltest lieber SELECT COUNT(*) statt SELECT COUNT(ID) nehmen.

1. Weils schneller sein müsste und
2. Weil du nur so sicher gehen kannst, die Anzahl der Datensätze zu erhalten, denn NULL-Werte in der Spalte ID würden bei SELECT COUNT(ID) nicht mitgezählt werden.

ngott2 17. Dez 2013 08:39

AW: Anzahl von Datenbank Einträgen.
 
Zitat:

Zitat von baumina (Beitrag 1240074)
Du solltest lieber SELECT COUNT(*) statt SELECT COUNT(ID) nehmen.


2. Weil du nur so sicher gehen kannst, die Anzahl der Datensätze zu erhalten, denn NULL-Werte in der Spalte ID würden bei SELECT COUNT(ID) nicht mitgezählt werden.

Das kann doch eigendlich nicht Passieren bei Auto ID oder ?


PS counter kann man oder zumindest ich nicht verwenden ist Reserviert.

Danke für eure Antworten:) Funktioniert jetzt und ich verstehe es auch :)

DeddyH 17. Dez 2013 08:51

AW: Anzahl von Datenbank Einträgen.
 
Zitat:

Zitat von ngott2 (Beitrag 1240078)
PS counter kann man oder zumindest ich nicht verwenden ist Reserviert.

Dann nimm halt einen anderen Alias, den kannst Du ja frei vergeben.
Delphi-Quellcode:
Query.SQL.Text := 'SELECT COUNT(*) AS Erbsensuppe from Document';
Query.Open;
Result := Query.FieldByName('Erbsensuppe').AsInteger;
Das funktioniert genauso gut. Inwieweit dieser Alias allerdings auf den Inhalt schließen lässt, das steht auf einem anderen Blatt :mrgreen:

ngott2 17. Dez 2013 09:11

AW: Anzahl von Datenbank Einträgen.
 
Zitat:

Zitat von DeddyH (Beitrag 1240079)
Zitat:

Zitat von ngott2 (Beitrag 1240078)
PS counter kann man oder zumindest ich nicht verwenden ist Reserviert.

Dann nimm halt einen anderen Alias, den kannst Du ja frei vergeben.
Delphi-Quellcode:
Query.SQL.Text := 'SELECT COUNT(*) AS Erbsensuppe from Document';
Query.Open;
Result := Query.FieldByName('Erbsensuppe').AsInteger;
Das funktioniert genauso gut. Inwieweit dieser Alias allerdings auf den Inhalt schließen lässt, das steht auf einem anderen Blatt :mrgreen:

Ja wenn Erbensuppe im Quellcode steht, dann ist eine Gute Quellcode Dokumentation wichtig :) Wir hatten mal in unserm Quellcode vor Jahren Turm und Springer als Variablen Name. Und nein es war kein Schachspiel ^^ Zum glück war ich da noch nicht da.


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:08 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