Thema: Delphi Schleifen Optimierung?

Einzelnen Beitrag anzeigen

Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.024 Beiträge
 
Delphi 12 Athens
 
#15

Re: Schleifen Optimierung?

  Alt 15. Jul 2009, 09:38
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;
Uwe Raabe
  Mit Zitat antworten Zitat