So, tut mir Leid Leute, aber ich verstehe immer noch nicht ganz, wie ich meine WHERE-Klausel ersetze und immer noch zu dem gewünschten Ergebniss komme. Ich denke, wenn ihr mir mit einem Praktischen Beispiel zeigt, wie es geht, werden ich es besser verstehen.
Also, ich habe auf der Form ein DBGrid1, der über ADOQuery1 aus der Datenbank VERWALTUNG auf den
MSSQL Server Rechnungsdaten bezieht. Die Beispieltabelle hat vier Spalten:
"name",
"produkt",
"preis" und
"status". Die ersten drei sind klar, der Spalte "status" wird einen der drei Werte zugewissen: "Bezahlt" oder "Nicht bezahlt" oder "Storniert". So, dann habe ich noch einen Edit1-Textfeld für die Eingabe des Suchbegriffs. Es werden alle vier Spalten durchgesucht:
Delphi-Quellcode:
...
var
suchbegriff:
string;
begin
with ADOQuery1
do
begin
active := false;
sql.Clear;
suchbegriff := '
%' + Edti1.Text + '
%';
sql.Text := '
SELECT * FROM VERWALTUNG' + #10 +
'
WHERE (LOWER(name) LIKE :Param1)' + #10 +
'
OR (LOWER(produkt) LIKE :Param2)' + #10 +
'
OR (LOWER(preis) LIKE :Param3)' + #10 +
'
OR (LOWER(status) LIKE :Param4)';
ParamCheck := true;
Parameters.ParamByName('
Param1').Value := LowerCase(suchbegriff);
Parameters.ParamByName('
Param2').Value := LowerCase(suchbegriff);
Parameters.ParamByName('
Param3').Value := LowerCase(suchbegriff);
Parameters.ParamByName('
Param4').Value := LowerCase(suchbegriff);
active := true;
open;
end;
...
Jetzt würde ich in der StatusBar anzeigen, wieviele Rechnungen bezahlt sind, wieviele nicht bezahlt und wiviele storniert. Diese Zahlen müssen für jeder Anfrage aktuell sein. Ich habe es zwar mit den oben geposteten Beispiele irgenddwie erreicht, dass die Datensätze gezählt wurden, aber es waren jedesmal alle Datensätze in der Tabelle gezält und nicht nur auf die Anfrage zurückgelieferte Ergebnisse.
Könnt ihr mir bitte zeigen, wie ich meine Abfrage ändern soll, damit ich zu dem gewünschten Ergebniss komme?
Im Vorraus vielen Dank!