// Die Anzahl der
Sätze einer Datenbank kann man eigentlich über die Eigenschaft
//
RecordCount
ermitteln. Seltsamerweise liefert diese Eigenschaft nicht immer
// den korrekten Wert. Besser ist es, die Sätze mittels SQL zu zählen. Das hat
// zusätzlich den Vorteil, durch eine Bedingung nur bestimmte Sätze auszählen
// zu können.
// Getestet mit D4 unter WinME
function DB_Anzahl(tb: TTable; Bedingung: string): longint;
begin
if Bedingung <> '' then Bedingung := ' WHERE ' + Bedingung;
with TQuery.Create(nil) do
try
SQL.Text := 'SELECT COUNT(*) FROM "' + tb.Tablename + '"' + Bedingung + ';';
Open;
result := Fields[0].AsInteger;
finally
free;
end;
end;
// alle Datensätze werden gezählt
procedure TForm1.Button4Click(Sender: TObject);
var
vergleich: string;
begin
vergleich := '';
showmessage(inttostr(DB_Anzahl(Table1, vergleich)));
end;
// alle Datensätze, bei denen im Feld NAME das Wort Meier eingetragen
// ist, werden gezählt
procedure TForm1.Button5Click(Sender: TObject);
var
vergleich: string;
begin
vergleich := 'NAME = "Meier"';
showmessage(inttostr(DB_Anzahl(Table1, vergleich)));
end;
// alle Datensätze, bei denen im Feld NAME ein 'sch' vorhanden
// ist, werden gezählt. Groß- und Kleinschreibung beachten!
procedure TForm1.Button6Click(Sender: TObject);
var
vergleich: string;
begin
vergleich := 'NAME LIKE "%sch%"';
showmessage(inttostr(DB_Anzahl(Table1, vergleich)));
end;
// alle Datensätze Derjenigen, die am aktuellen Datum
// Geburtstag haben, werden gezählt.
// Bedingung: Das Feld GEBOREN ist ein Datumsfeld und kein String
procedure TForm1.Button7Click(Sender: TObject);
var
vergleich: string;
Year, Month, Day: word;
begin
decodedate(date, Year, Month, Day);
vergleich := '(EXTRACT(MONTH FROM GEBOREN) = "' + inttostr(month) +
'") AND (EXTRACT(DAY FROM GEBOREN) = "' + inttostr(day) + '")';
showmessage(inttostr(DB_Anzahl(Table1, vergleich)));
end;
|