AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Schleifen Optimierung?

Ein Thema von youuu · begonnen am 14. Jul 2009 · letzter Beitrag vom 15. Jul 2009
 
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
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:35 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz