Hi,
ich habe ein Problem, am Anfang meines Programms Teste ich den Status einzellner Einträge.
Ausgangssituation.
2 Tabellen
--> Tabelle 1 Kunde
--> Tabelle 2 Positionen (mehrere Einträge möglich pro Kundennummer)
Nun möchte ich testen ob der Kunde noch aktive ist oder inaktive, heißt wenn der Kunde keine aktive position mehr besitzt, dann ist er inaktive.
Ich habe es bislang so gelöst.
Delphi-Quellcode:
Query.SQL.Text:='
SELECT * FROM '+Tabelle.customer+'
';
Query.Open;
while not Query.Eof
do
begin
Customer:= TCustomerDaten.create;
with Customer
do
Begin
Anrede:= Customer.FieldByName('
Anrede').AsString;
name:= Customer.FieldByName('
name').AsString;
end;
VstCustomer.Addchild(
nil, Customer);
If StatusCustomer (Customer.Customer_number)
Then // Status updaten
Customer.status:= '
aktive'
Else
Customer.status:= '
inaktive';
Customer.Next
Hier die Funktion Status Customer
Delphi-Quellcode:
Function StatusCustomer (Customer_Number: String): Boolean;
Var
Status: TStringlist;
i: Integer;
Begin
Status:= TStringlist.Create;
result:= false;
Try
QueryUpdate.SQL.Text:='SELECT * FROM '+Tabelle.position+' Where Customer_Number = '''+Customer_Number+'''';
QueryUpdate.Open;
while not QueryUpdate.Eof do
Begin
if StrToDate(QueryUpdate.FieldByName('announcement_date').AsString) >= Date() then
status.Add('aktive')
else
status.Add('inaktive');
QueryUpdate.Next;
End;
for i := 0 to status.Count - 1 do
if Status[i] = 'aktive' then
Begin
result:= True;
exit;
End
Else
result:= false;
Finally
QueryUpdate.Close;
Status.Free;
End;
End;
So entstehen bei 10.000 Kunden a 40.000 Positionen extreme lange Wartezeiten.
Kann mir jemand einen Tipp geben um dies zu beschleunigen?