Mein
SQL ist zwar gerade etwas eingerostet, aber geht es nicht einfacher (schneller) so?
Delphi-Quellcode:
Function StatusCustomer (Customer_Number: String): Boolean;
Begin
result:= false;
FormMain.QueryUpdate.SQL.Text := 'SELECT Count(*) AS Anzahl FROM ' + Tabelle.position +
' Where (Customer_Number = '''+Customer_Number+''') and (announcement_date >= '''+Date()+''')' ;
FormMain.QueryUpdate.Open;
Try
result := (FormMain.QueryUpdate.FieldByName('Anzahl').AsInteger > 0);
Finally
FormMain.QueryUpdate.Close;
End;
End;
Ergänzend schlage ich auch die Verwendung von Parametern vor, da gerade im Fall der wiederholten Abfrage (hier für jeden Kunden) ein Performancegewinn erzielt werden kann. Dabei würde man den
SQL.Text entweder statisch in der
IDE oder dynamisch vor der while-Schleife über die Kunden zuweisen. Bei der ersten Abfrage macht der
SQL-Server dann ein Prepare, was beim wiederholten Aufruf mit anderen Parameterwerten dann nicht mehr gemacht werden muss.
Delphi-Quellcode:
FormMain.QueryUpdate.SQL.Text := 'SELECT Count(*) AS Anzahl FROM ' + Tabelle.position +
' Where (Customer_Number = :Customer_Number) and (announcement_date >= :Date)' ;
Die Funktion reduziert sich dann auf
Delphi-Quellcode:
Function StatusCustomer (Customer_Number: String): Boolean;
Begin
result:= false;
FormMain.QueryUpdate.Params.ParamValues['Customer_Number'] := Customer_Number;
FormMain.QueryUpdate.Params.ParamValues['Date'] := Date();
FormMain.QueryUpdate.Open;
Try
result := (FormMain.QueryUpdate.FieldByName('Anzahl').AsInteger > 0);
Finally
FormMain.QueryUpdate.Close;
End;
End;