Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   SQL Abfrage dauert ewig (https://www.delphipraxis.net/170820-sql-abfrage-dauert-ewig.html)

value is NULL 4. Okt 2012 14:47

AW: SQL Abfrage dauert ewig
 
cool DANKE ;)

Flutscht einwandfrei ;)

gmc616 4. Okt 2012 15:58

AW: SQL Abfrage dauert ewig
 
Zitat:

Zitat von Bummi (Beitrag 1185704)
versuch mal statt while not eof ... next, ist um Welten schneller
Delphi-Quellcode:
   while not Adodataset1.RecordSet.EOF do
    begin
       sl.Add(Adodataset1.RecordSet.Fields[0].Value);
       Adodataset1.RecordSet.MoveNext;
    end;

Kurze Zwischenfrage, wo ist der Unterschied? :gruebel:

p80286 4. Okt 2012 16:50

AW: SQL Abfrage dauert ewig
 
Ich schließe mich dieser Frage an, da dies hier nur Fehler produzier:
Delphi-Quellcode:
procedure TForm1.btn1Click(Sender: TObject);
var
  liste:TStringList;
  sz1 :Integer;
  sz2 : Integer;
  sz3 : Integer;
begin
  liste:=TStringList.Create;
  sz1:=0;
  sz2:=0;
  sz3:=0;
  adoquery1.Close;
  sz1:=gettickcount;
  adoquery1.open;
  sz2:=GetTickCount;
  Form1.Caption:=IntToStr(liste.Count)+' '+IntToStr(sz2-sz1)+' >>Open '+IntToStr(sz3-sz2)+' >>GetData';
  Application.ProcessMessages;
  if not(adoquery1.Eof) then
    repeat
      liste.Add(adoquery1.Fields[0].asstring);
      adoquery1.Next;
    until adoquery1.eof;
  sz3:=GetTickCount;
  adoquery1.Close;
  Form1.Caption:=IntToStr(liste.Count)+' '+IntToStr(sz2-sz1)+' >>Open '+IntToStr(sz3-sz2)+' >>GetData';
  liste.Free;
end;

procedure TForm1.btn2Click(Sender: TObject);
var
  liste:TStringList;
  sz1 :Integer;
  sz2 : Integer;
  sz3 : Integer;
begin

  liste:=TStringList.Create;
  sz1:=0;
  sz2:=0;
  sz3:=0;
  adoquery1.Close;
  sz1:=gettickcount;
  adoquery1.open;
  sz2:=GetTickCount;
  Form1.Caption:=IntToStr(liste.Count)+' '+IntToStr(sz2-sz1)+' >>Open '+IntToStr(sz3-sz2)+' >>GetData';
  Application.ProcessMessages;
  if not(adoquery1.recordset.Eof) then
    repeat
      liste.Add(adoquery1.Recordset.Fields[0].value);
      adoquery1.Recordset.MoveNext;
    until adoquery1.eof;
  sz3:=GetTickCount;
  adoquery1.Close;
  Form1.Caption:=IntToStr(liste.Count)+' '+IntToStr(sz2-sz1)+' >>Open '+IntToStr(sz3-sz2)+' >>GetData';
  liste.Free;
end;
---------------------------
Project1
---------------------------
Either BOF or EOF is True, or the current record has been deleted. Requested operation requires a current record.
---------------------------
OK
---------------------------

Gruß
K-H

Bummi 4. Okt 2012 17:02

AW: SQL Abfrage dauert ewig
 
auch bei
Delphi-Quellcode:
 While not adoquery1.RECORDSET.EOF

p80286 4. Okt 2012 17:07

AW: SQL Abfrage dauert ewig
 
Zauberei:
Delphi-Quellcode:
 while not(adoquery1.recordset.Eof) do begin
    liste.Add(adoquery1.Recordset.Fields[0].value);
    adoquery1.Recordset.MoveNext;
  end;
warum wird
Delphi-Quellcode:
repeat ..until .eof
so verschmäht?

Gruß
K-H

P.S.
Das fluppt wirklich!!

Bummi 4. Okt 2012 17:10

AW: SQL Abfrage dauert ewig
 
Ist IMHO nicht intuitiv ....

Ich denke das Problem lag hier ...

adoquery1.Eof statt adoquery1.recordset.Eof

p80286 4. Okt 2012 17:34

AW: SQL Abfrage dauert ewig
 
*schäm*
*schäm*

Du hast Recht, bleibt die Frage warum. Zumindest die OH von 2006 warnt davor das RecordSet zu nutzen:
Zitat:

Hinweis:
Verwenden Sie diese Eigenschaft nur, wenn Sie mit ADO-Objekten und speziell mit ADO-Verbindungsobjekten vertraut sind. Die entsprechenden Informationen finden Sie in der Hilfe zum Microsoft SDK.
Gruß
K-H

shmia 4. Okt 2012 18:48

AW: SQL Abfrage dauert ewig
 
@Value is NULL:
Welche konkreter Typ hat bei dir eigentlich der Parameter
Delphi-Quellcode:
DestList: TStrings
?
Ich frage deshalb, weil es ein Riesenunterschied (Faktor 50) in Bezug auf die Performance ist ob man eine TStringList (schnell) oder TMemoStrings (langsam) verwendet.

Bummi 4. Okt 2012 23:25

AW: SQL Abfrage dauert ewig
 
@p80286

nicht ganz umsonst, TAdoDataset packt einen Haufen Watte um die Recordsets, mit den Varianten bei NULL-Sätzen gilt es umzugehen ... die "Oberfläche" ab TADODataset kann sich desynchronisieren etc.
Aber für Fälle wie in o.g. Anforderung sehe ich kaum Probleme ...

Furtbichler 5. Okt 2012 07:21

AW: SQL Abfrage dauert ewig
 
Soweit ich mich erinnere, war 'Next' der Pferdefuß


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:14 Uhr.
Seite 2 von 2     12   

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz