Moin,
um wieviel Datensätze geht es denn hier.
ich habe mal folgendes getestet...
500000 Datensätze ergaben eine
CSV-Datei von 26MB und das dauerte 1 Min 10 Sec. (das hängt natürlich von der Rechnergeschwindigkeit ab)
Aber, wenn das so viele Datensätze sind dauert das naturlich auch eine gewisse Zeit.
Mit mehreren Abfragen würde ich das nicht so gut finden, weil dann in der Zwischenzeit Änderungen stattfinden könnten (Mehrbenutzerfähigkeit).
Mach doch einen Prozentbalken, dann sieht der Nutzer das noch was geschieht.
Beispiel mit DBExpress...
Delphi-Quellcode:
procedure TForm.SQLtoCSV(
SQL, Dateiname:
string; ProgressBar:TProgressBar; SQLConnection:TCRSQLConnection);
var SDS:TSimpleDataSet;
i:integer;
Datei:Textfile;
begin
assignfile(Datei, Dateiname);
try
rewrite(Datei);
SDS:=TSimpleDataSet.Create(Self);
try
SDS.Connection:=SQLConnection;
SDS.DataSet.CommandText:=
SQL;
SDS.Open;
ProgressBar.Min:=1;
ProgressBar.Max:=SDS.RecordCount;
ProgressBar.Step:=1;
for i:=1
to SDS.FieldCount
do begin
write(Datei, SDS.Fields[i-1].FieldName);
if i < SDS.FieldCount
then
write(Datei, '
;');
end;
writeln(Datei);
while not SDS.Eof
do begin
ProgressBar.StepIt;
for i:=1
to SDS.FieldCount
do begin
write(Datei, SDS.Fields[i-1].AsString);
if i < SDS.FieldCount
then
write(Datei, '
;');
end;
writeln(Datei);
SDS.Next;
end;
SDS.Close;
finally
SDS.Free;
end;
finally
closefile(Datei);
end;
end;
MfG
Thorsten