AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi CSV Export eines ADOQueries beschleunigen
Thema durchsuchen
Ansicht
Themen-Optionen

CSV Export eines ADOQueries beschleunigen

Ein Thema von slemke76 · begonnen am 25. Nov 2009 · letzter Beitrag vom 26. Nov 2009
Antwort Antwort
slemke76

Registriert seit: 29. Mär 2005
Ort: Quakenbrück
146 Beiträge
 
#1

CSV Export eines ADOQueries beschleunigen

  Alt 25. Nov 2009, 12:53
Datenbank: MSSQL • Version: egal • Zugriff über: ADO
Hallo zusammen,

ich speichere im Moment das Ergebniss eines Queries wie folgt in einer CSV Datei:

Delphi-Quellcode:
  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;
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.

Hat jemand eine Optimierungsidee ?

lg
Sebastian
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.275 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: CSV Export eines ADOQueries beschleunigen

  Alt 25. Nov 2009, 13:29
Hallo,

ist der cursor client oder serverseitig.

Setze mal vor dem First noch ein Last (bei client cursor).

Hier noch ein interssanter Link

1
Gerade das, wass von Andreas Kosch kommt.


Heiko
Heiko
  Mit Zitat antworten Zitat
slemke76

Registriert seit: 29. Mär 2005
Ort: Quakenbrück
146 Beiträge
 
#3

Re: CSV Export eines ADOQueries beschleunigen

  Alt 25. Nov 2009, 14:31
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
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.275 Beiträge
 
Delphi 10.4 Sydney
 
#4

Re: CSV Export eines ADOQueries beschleunigen

  Alt 25. Nov 2009, 15:14
Hallo,

tja, wir sind ja von der schnellen Sorte.

Das Read-Only setzen könntest du auch noch ausprobieren.


Heiko
Heiko
  Mit Zitat antworten Zitat
slemke76

Registriert seit: 29. Mär 2005
Ort: Quakenbrück
146 Beiträge
 
#5

Re: CSV Export eines ADOQueries beschleunigen

  Alt 25. Nov 2009, 16:03
Hi!

ist das eine TAdoquery Eigenschaft ? Ich sehe die irgendwie nicht

lg
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#6

Re: CSV Export eines ADOQueries beschleunigen

  Alt 25. Nov 2009, 16:46
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:
MyQuery.DisableControls;
Try
  MyQuery.First;
  While not MyQuery.Eof do Begin
  ...
    MyQuery.Next;
  End;
Finally
  MyQuery.EnableControls;
End;
Eigentlich sollte man die aktuelle Position des Datensatzzeigers mitspeichern, damit die durch die Schleife vorgenommene Verschiebung Desselben rückgängig gemacht wird.
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
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
slemke76

Registriert seit: 29. Mär 2005
Ort: Quakenbrück
146 Beiträge
 
#7

Re: CSV Export eines ADOQueries beschleunigen

  Alt 25. Nov 2009, 16:55
Hi!

Zitat von alzaimar:
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.
Ok, gut zu wissen, ist aber in diesem Fall nicht gegeben - es handelt sich um ein kleines Hilfs-Tools, das nur den CSV Export macht und nicht mit Steuerelementen verknüpft ist.

lg
Sebastian
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.275 Beiträge
 
Delphi 10.4 Sydney
 
#8

Re: CSV Export eines ADOQueries beschleunigen

  Alt 26. Nov 2009, 09:17
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
Heiko
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.195 Beiträge
 
Delphi 10.4 Sydney
 
#9

Re: CSV Export eines ADOQueries beschleunigen

  Alt 26. Nov 2009, 09:20
Am besten noch einen Fordward-Only Curser verwenden um bei großen Ergebnismengen kein Speicherproblem zu bekommen.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Antwort Antwort


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 23:54 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