![]() |
Datenbank: MSSQL • Version: egal • Zugriff über: ADO
CSV Export eines ADOQueries beschleunigen
Hallo zusammen,
ich speichere im Moment das Ergebniss eines Queries wie folgt in einer CSV Datei:
Delphi-Quellcode:
Problem ist nun, dass das ganze nicht besonders schnell ist - es ist ganz in Ordnung, aber z.B. adoquery.savetofile ist viel viel viel schneller - das Dateiformat passt halt leider nicht.
sl := TStringList.Create;
try with AdoQuery do begin First; // - Alle Datensätze durchlaufen - while not (Eof) do begin inc(count); tString := ''; // - Alle Felder eines Datensatzes durchgehen - for ndx := 0 to Fields.Count -1 do begin // Gleichzeitig trim ! tString := tString + '"' + trim(Fields.Fields[ndx].AsString) + '";'; end; sl.Add(tString); // Ab in die Stringliste Next; end; end; sl.SaveToFile(File2Use); // Und auf die Pladde ;-) finally FreeAndNil(sl); end; end; Hat jemand eine Optimierungsidee ? lg Sebastian |
Re: CSV Export eines ADOQueries beschleunigen
Hallo,
ist der cursor client oder serverseitig. Setze mal vor dem First noch ein Last (bei client cursor). Hier noch ein interssanter Link ![]() Gerade das, wass von Andreas Kosch kommt. Heiko |
Re: CSV Export eines ADOQueries beschleunigen
Hi !
wow - das ist mal schnelle Hilfe :-) Habe jetzt AdoQuery.CursorLocation:=clUseClient; gesetzt - mit Erfolg ! Das ganz läuft spürbar schnller ! Vielen Dank! lg Sebastian |
Re: CSV Export eines ADOQueries beschleunigen
Hallo,
tja, wir sind ja von der schnellen Sorte. Das Read-Only setzen könntest du auch noch ausprobieren. Heiko |
Re: CSV Export eines ADOQueries beschleunigen
Hi!
ist das eine TAdoquery Eigenschaft ? Ich sehe die irgendwie nicht :gruebel: lg |
Re: CSV Export eines ADOQueries beschleunigen
Wenn die Query mit datensensitiven Steuerelementen verbunden ist (TDBEdit, TDBGrid o.ä.) bringt das Einschließen in einen 'DisableControls/Enablecontrols' block sehr viel Performance, da die Daten bei jedem 'Next' nicht neu gezeichnet werden müssen.
Delphi-Quellcode:
Eigentlich sollte man die aktuelle Position des Datensatzzeigers mitspeichern, damit die durch die Schleife vorgenommene Verschiebung Desselben rückgängig gemacht wird.
MyQuery.DisableControls;
Try MyQuery.First; While not MyQuery.Eof do Begin ... MyQuery.Next; End; Finally MyQuery.EnableControls; End;
Delphi-Quellcode:
Var
BookMark : TBookmark; Begin MyQuery.DisableControls; BookMark := MyQuery.GetBookmark(); // Heißt das so? Try MyQuery.First; While not MyQuery.Eof do Begin ... MyQuery.Next; End; Finally MyQuery.GotoBookmark(Bookmark); MyQuery.FreeBookmark(Bookmark); MyQuery.EnableControls; End End |
Re: CSV Export eines ADOQueries beschleunigen
Hi!
Zitat:
lg Sebastian |
Re: CSV Export eines ADOQueries beschleunigen
Hallo,
hm vergiss Read-Only. Das ist eine AdoQuery wohl von Haus aus, zum Ändern gibt es ja TAdoDataSet. Du könntest höchstens versuchen, eine eigene Transaktion zu nehmen und versuchen, das Read-Only in den Properties einzustellen, das st aber Server-Abhängig, musst also bei MS-SQL suchen, ob es sowas gibt. Zu DisableControls. Ich habe das noch nie gebraucht, weil ich für Anzeige eh ein normales StringGrid (oder was anderes benutze) und Lesen und Schreiben über getrennte Komponenten oder läuft. Heiko |
Re: CSV Export eines ADOQueries beschleunigen
Am besten noch einen Fordward-Only Curser verwenden um bei großen Ergebnismengen kein Speicherproblem zu bekommen.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:49 Uhr. |
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 by Thomas Breitkreuz