Einzelnen Beitrag anzeigen

Benutzerbild von hitzi
hitzi

Registriert seit: 2. Jan 2003
Ort: Eibau
768 Beiträge
 
Delphi 2010 Professional
 
#1

Dataset schnell! in eine Datei speichern?

  Alt 24. Feb 2005, 09:53
Datenbank: Informix • Zugriff über: ADO
Hallo,

ich muss eine Abfrage in eine Datei speichern. Zur Zeit gehe ich wie folgt vor:

Delphi-Quellcode:
 [...]
      if dbDataSet.Active then dbDataSet.Close;
      dbDataSet.CommandText := GetSQLFile(SQL);
      Screen.Cursor := crSQLWait;
      try
        dbDataSet.Open;
      finally
        Screen.Cursor := crDefault;
      end;

      Table.Clear; //TStringlist
      GetFieldConfig(dbDataSet.FieldCount, ExtractFileName(SQL));

      Output('Daten des SQL "' + ExtractFileName(SQL) + '" werden gespeichert.');
      Screen.Cursor := crHourGlass;
      try
        while not dbDataSet.Eof do begin
          Row.Clear; //TStringlist
          for i := 0 to dbDataSet.FieldCount - 1 do begin
            s := trim(dbDataSet.Fields[i].AsString);
            if Option(cOptionGetWeekByDate, i) then s := GetWeek(dbDataSet.Fields[GetWantedField(cOptionGetWeekByDate + '(', ')', i)].AsDateTime);

            if fFieldLength[i] > -1 then begin
              if fFieldLength[i] < Length(s) then s := copy(s, 1, fFieldLength[i]);
              if fFieldLength[i] > Length(s) then begin
                if Option(cOptionFillLengthLeft, i) then
                  s := FillString(s, fFieldLength[i], false)
                else if Option(cOptionFillLengthRight, i) then
                  s := FillString(s, fFieldLength[i], true);
              end;
            end;
            Row.Add(s);
          end;
          Row.Delimiter := ';'; //damit's eine csv kompatible Datei wird
          Table.Add(Row.DelimitedText);
          dbDataSet.Next;
        end;

        Table.SaveToFile(OutputFile); //TStringlist speichern - dadurch wird eine csv kompatible Datei erstellt
      finally
        Screen.Cursor := crDefault;
      end;
[...]
Bei 12.000 Datensätzen dauert das speichern der Daten so etwa 5-8 Sekunden. Bei einer Abfrage mit einer Ergebnismenge von rund 500.000 Datensätzen dauert es aber rund 75 Minuten. Hochgerechnet von der Zeit der 12.000 Datensätze sollte, dass doch eigentlich nur 5-6 Minuten dauern.

Wie kann ich diese Routine beschleunigen?

Gruss
Thomas
Besucht doch mal http://www.hitziger.net
  Mit Zitat antworten Zitat