Thema: Delphi Schleifen Optimierung?

Einzelnen Beitrag anzeigen

youuu

Registriert seit: 2. Sep 2008
Ort: Kleve
822 Beiträge
 
Delphi 2010 Professional
 
#1

Schleifen Optimierung?

  Alt 14. Jul 2009, 20:47
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] = 'aktivethen
        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?
Steven
  Mit Zitat antworten Zitat