Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi DBGrid SelectedRows (https://www.delphipraxis.net/158687-dbgrid-selectedrows.html)

-187- 26. Feb 2011 19:18

Datenbank: Firebird • Version: 2 • Zugriff über: Interbase

DBGrid SelectedRows
 
Moin, ich hab ein kleines Problem mit meiner Datenbank. Ich habe ca 50.000 Einträge und möchte jetzt von allen selektierten Einträge ein Feld in einer Stringlist speichern.

Das ganze mache ich so, is aber sehr langsam:

Delphi-Quellcode:
  for i:=0 to DBGrid1.SelectedRows.Count-1 do
  begin
    DBGrid1.DataSource.DataSet.GotoBookmark(Pointer(DBGrid1.SelectedRows.Items[i]));
    ClearList.Add(DBGrid1.DataSource.DataSet.FieldByName('NUMBER').AsString);
  end;
Kann das jemand performanter gestalten?

Sir Rufo 26. Feb 2011 19:26

AW: DBGrid SelectedRows
 
Delphi-Quellcode:
var
  fld : TField;


  fld := DBGrid1.DataSource.DataSet.FieldByName('NUMBER');
  for i:=0 to DBGrid1.SelectedRows.Count-1 do
  begin
    DBGrid1.DataSource.DataSet.GotoBookmark(Pointer(DBGrid1.SelectedRows.Items[i]));
    ClearList.Add(fld.AsString);
  end;

-187- 26. Feb 2011 19:45

AW: DBGrid SelectedRows
 
Hmm wirklich schneller gehts das damit nicht :) Warum auch ?

Edit: Jedes GotoBookmark wird ja im GUI angezeigt. Kann man das irgendwie für diese Dinge "abkoppeln"?

joachimd 26. Feb 2011 19:59

AW: DBGrid SelectedRows
 
Zitat:

Zitat von -187- (Beitrag 1084589)
Jedes GotoBookmark wird ja im GUI angezeigt. Kann man das irgendwie für diese Dinge "abkoppeln"?

DisableControls heisst das Stichwort.

-187- 26. Feb 2011 20:00

AW: DBGrid SelectedRows
 
Und es funktioniert sogar :)

Vielen Dank!

-187- 26. Feb 2011 20:19

AW: DBGrid SelectedRows
 
Hm das war aber nicht alleine die Ursache für meine lame Anwendung. Nachdem ich alle Werte der Clearlist hinzugefügt habe möchte ich für diese Datensätze ein Query ausführen. Momentan mach ich das so:

Delphi-Quellcode:
  for i:=0 to ClearList.Count-1 do
  begin
    IBQuery2.Close;
    IBQuery2.SQL.Clear;
    IBQuery2.SQL.Add(Format('UPDATE %s SET '+ ...
    IBQuery2.Open;
    IBQuery2.Close;
  end;
Ich muss für jeden Datensatz den SQL Command ausführen. Alle Commands adden und am Ende einmal ausführen funktioniert nicht. Das macht die Sache auch ziemlich lahm :/

Bummi 26. Feb 2011 21:36

AW: DBGrid SelectedRows
 
ID's sammeln und ein Update mit
Code:
where ID in (1,2,3,4)
geht nicht in Deinem Fall ?

-187- 26. Feb 2011 21:59

AW: DBGrid SelectedRows
 
Hmm kannte ich ehrlich gesagt nicht :)

Hab's grad mal ausprobiert. Wenn ich 10 Datensätze markiere klappt es, wenn ich jedoch alle Datensätze markiere (3000 Testweise) krieg ich:

Attempt to execute an unprepared dynamic SQL statement.


Kann es sein das es für das Statement eine max Length gibt ?

Bummi 26. Feb 2011 22:03

AW: DBGrid SelectedRows
 
muss ich passen, it ID und Firebird habe ich so gut wie keine Erfahrungen, mit MSSQL-Server bin ich bisher nicht auf derartige Grenzen gestoßen...

-187- 26. Feb 2011 22:06

AW: DBGrid SelectedRows
 
Habs grad rausgefunden. Maximal 1500 Items..

Naja immernoch besser als nichts :)

Edit: Ok, habe jetzt mein Query je auf 1500 Items begrenzt jedoch kommt es mir immernoch langsam vor.

Noch jemand eine Idee? Vielleicht ein ganz anderen Ansatz?


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:13 Uhr.
Seite 1 von 2  1 2      

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