Einzelnen Beitrag anzeigen

GoTo0815

Registriert seit: 18. Mai 2004
148 Beiträge
 
Delphi XE2 Professional
 
#1

Export eines Suchergebnisses nach Excel zu langsam

  Alt 16. Nov 2006, 14:05
Datenbank: Paradox • Version: 7 • Zugriff über: Query
Hallo @ all,


ich habe auf meinem Formular eine Query, ein DBGrid, ein StringGrid & ein Button.

Nun lasse ich mir über das DBGrid das Suchergebnis der Query anzeigen.

Beispiel SQL: Select * from retouren WHERE ....

Die Datenbank liegt im Netzwerk auf einem Server.

Das Suchergebnis der Quersy erscheint sehr schnell, daher gehe ich davon aus, dass bis dahin alles in Ordnung ist.

Nun soll per Knopfdruck ein Export der Daten nach Excel stattfinden. Das funktioniert auch. Aber der Kopiervorgang ist sowas von langsam, dass ich nicht nur ne Kanne Kaffe kochen, sondern auch noch austrinken kann.
Kann man das DBGrid nicht mit einem Schlag in ein StrinGrid kopieren? Muss man da immer über die einzelnen Datensätze der Query gehen? Das DBGrid muss doch auch so ein Art Array bzw. StringList haben, oder?


Delphi-Quellcode:
procedure TForm1.BitBtn7Click(Sender: TObject);
var RowC, ColC,rowCount,k,i :integer;
    Str: string;
    StrList: TStringList;
begin
    rowCount := 1; StringGrid2.ColCount := 11;
    StringGrid2.RowCount := rowcount;
    //Übernehmen der Daten aus der DBGrid in ein StringGrid
    StringGrid2.Cells[0,0]:= 'Auftragsnr.';
    StringGrid2.Cells[1,0]:= 'Artikelnr.';
    StringGrid2.Cells[2,0]:= 'Artikel';
    StringGrid2.Cells[3,0]:= 'Seriennummer';
    StringGrid2.Cells[4,0]:= 'Kunde';
    StringGrid2.Cells[5,0]:= 'RMA-Nr.';
    StringGrid2.Cells[6,0]:= 'Fehler';
    StringGrid2.Cells[7,0]:= 'Getauscht';
    StringGrid2.Cells[8,0]:= 'Status';
    StringGrid2.Cells[9,0]:= 'Datum';
    StringGrid2.Cells[10,0]:= 'Lieferdatum';


    Query_Suchen.First;
    for i:= 1 to Query_Suchen.RecordCount do
    begin
      for k := 0 to DBGrid11.Columns.Count - 1 do
      begin
        StringGrid2.Cells[k, rowCount] := DBGrid11.Fields[k].AsString;
      end;
      Query_Suchen.Next;
      rowCount := rowCount + 1;
      StringGrid2.RowCount := rowCount;
    end;

  //zunächst wird hier eine csv-Datei erstellt:

  StrList := TStringList.Create();
  for RowC := 0 to StringGrid2.RowCount - 1 do
  begin
    Str := '';
    for ColC := 0 to StringGrid2.ColCount - 1 do
      Str := Str + StringGrid2.Cells[ColC, RowC] + ';';
    Delete(Str, length(Str), 1); // löscht den überfluessigen String
    StrList.Add(Str);
  end;

  StrList.SaveToFile('tmpExcel.csv');

  //dann wird die Datei mit Excel geöffnet:
  ShellExecute(Application.Handle, 'OPEN', pchar(ExtractFilePath
     (Application.ExeName) + 'tmpExcel.csv'), NIL, NIL, SW_NORMAL);

  // und schließlich die csv-Datei wieder gelöscht
  DeleteFile(ExtractFilePath(Application.ExeName) + 'tmpExcel.csv');



end;
Falls ich mal ein "DANKE" vergesse, hier schon mal eins im Voraus: Danke für Eure Zeit!
  Mit Zitat antworten Zitat