Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   DBGRID export nach csv mit Titel (https://www.delphipraxis.net/181605-dbgrid-export-nach-csv-mit-titel.html)

Luckner 28. Aug 2014 13:18

Datenbank: Firebird • Version: 2.5 • Zugriff über: Dataset

DBGRID export nach csv mit Titel
 
Hallo,
habe hier eine Routine gefunden, mit der ich die Datensätze aus einem DBGrid in csv-Datei exportieren kann. Das klappt ohne Titel auch gut. Wie kann ich die Titel übernehmen? Hier die Procedure:

Delphi-Quellcode:
procedure TFrameArtikel.ButtonCsvExportClick(Sender: TObject);
  const
  Delim = ';';
var
  S: String;
  I: Integer;
  Stream: TFileStream;
begin
  Stream := TFileStream.Create('c:\temp\Artikel.csv', fmCreate);
  DatamoduleArtikel.DataModule1.IBDataSetArtikelCSV.Open;
  DatamoduleArtikel.DataModule1.IBDataSetArtikelCSV.Last;
  DatamoduleArtikel.DataModule1.IBDataSetArtikelCSV.First;

  while not DatamoduleArtikel.DataModule1.IBDataSetArtikelCSV.Eof do
  begin
    S := '';

    for I := 0 to JvDBGridArtikelCSV.Columns.Count - 1 do
      S := S + TColumn(JvDBGridArtikelCSV.Columns[I]).Field.AsString + Delim;

    S := S + CHR(13);
    Stream.Write(PChar(S)^, Length(S));
    DatamoduleArtikel.DataModule1.IBDataSetArtikelCSV.Next();
  end;

  Stream.Free();
  DatamoduleArtikel.DataModule1.IBDataSetArtikelCSV.Close;
end;
Danke.

DeddyH 28. Aug 2014 13:36

AW: DBGRID export nach csv mit Titel
 
Hol Dir doch Anregungen bei Uwe Raabe: http://www.uweraabe.de/Blog/2013/11/...ns-csv-export/

himitsu 28. Aug 2014 13:50

AW: DBGRID export nach csv mit Titel
 
TStringList?

Eine für die Datei und eine für die (aktuelle) Zeile

Columns durchgehen und per Add die Spaltennamen in ZeilenListe
danach CommaText der ZeilenListe per Add in die CSVListe. (oder DelimitedText mit eigenem Delimiter und StrictDelimiter=True)
Nur je Zeile das Selber nochmal für die Feldinhalte
und am Ende noch ein SaveToFile.



CHR(13) ... meintest du nicht eher CHR(10) aka #10, oder wenigstens sLineBreak?
Einige Programme kommen mit #13 nicht klar.
OK, das alte Nodepad kommt mit der #10 nicht klar, aber fast alle Windowsprogramme kennen #13#10. :angel:


PS: Schau mal ob dein DataSet nicht sogar ein SaveToFile besitzt.



[edit]
Hat mir Uwe etwa zur Hälfte abgeguckt? :lol:

DeddyH 28. Aug 2014 13:56

AW: DBGRID export nach csv mit Titel
 
Oder den verlinkten Code nehmen, das Dataset und den Dateinamen übergeben und glücklich sein. Immer diese Ignoranz *grmpf*

Sir Rufo 28. Aug 2014 14:02

AW: DBGRID export nach csv mit Titel
 
Zitat:

Zitat von DeddyH (Beitrag 1270148)
Oder den verlinkten Code nehmen, das Dataset und den Dateinamen übergeben und glücklich sein. Immer diese Ignoranz *grmpf*

Öhm und dann wird das so wie im DBGrid in die CSV geschrieben? Halte ich für ein Gerücht ;)

Jasocul 28. Aug 2014 14:06

AW: DBGRID export nach csv mit Titel
 
Schaut euch mal den Source an.
Die Spalten werden über das Grid iteriert und nicht über das DataSet.
Das DataSet wird nur zum Durchlaufen aller Datensätze verwendet.

Aber auch ein JvDBGrid sollte eine Property für die Überschriften haben.
Ich vermute mal, dass JvDBGrid.Columns[i].Title.Caption die gewünschten Überschriften liefert.

Neumann 28. Aug 2014 14:23

AW: DBGRID export nach csv mit Titel
 
Wenn es was kosten darf kann man auch das dbadvgrid von TMS nehmen; damit bekommt man CSV-Export und auch etliche andere Exportformate (XML, Excel usw.) sehr einfach hin.

Ralf

himitsu 28. Aug 2014 15:18

AW: DBGRID export nach csv mit Titel
 
Auch die DevExpress-Grids bieten fertige Exportfunktionen (CSV, XLS, PDF, ...) und andere Komponentensamlungen bestimmt ebenfalls.
Und es gibt natürlich spezielle Exportgeneratoren.

Luckner 28. Aug 2014 15:36

AW: DBGRID export nach csv mit Titel
 
Das JvDBGrid hat eine Property für die Überschriften. Genau, wie bei Jasocul beschrieben. Aber wie in dieser Procedure benutzen? Irgendwie in der schon vorh. Schleife oder schon davor?

Luckner

DeddyH 28. Aug 2014 15:38

AW: DBGRID export nach csv mit Titel
 
Davor, oder willst Du bei jedem Datensatz noch einmal die Überschriften ermitteln? Kann man zwar machen, bringt aber nichts, es sei denn, das Programm läuft einem zu schnell :lol:

Dejan Vu 28. Aug 2014 15:49

AW: DBGRID export nach csv mit Titel
 
Aber was ist, wenn sich die Überschriften während des Exports ändern, wenn es sich der Anwender also anders überlegt hat? :stupid: Fragen, die die Welt bewegen.

Luckner 28. Aug 2014 15:56

AW: DBGRID export nach csv mit Titel
 
Ok, werde ich probieren.
Danke

DeddyH 28. Aug 2014 15:58

AW: DBGRID export nach csv mit Titel
 
Zitat:

Zitat von Dejan Vu (Beitrag 1270183)
Aber was ist, wenn sich die Überschriften während des Exports ändern, wenn es sich der Anwender also anders überlegt hat? :stupid: Fragen, die die Welt bewegen.

Dann einfach die Überschriften nach den Daten ermitteln und als erste Zeile in die Stringliste einfügen ;)

waldforest 28. Aug 2014 17:27

AW: DBGRID export nach csv mit Titel
 
Hallo,
hier bietet die Jedi TJvDBGridCSVExport ne gute und einfache Möglichkeit Daten zu exportieren.

himitsu 28. Aug 2014 21:49

AW: DBGRID export nach csv mit Titel
 
Zitat:

Zitat von Dejan Vu (Beitrag 1270183)
Aber was ist, wenn sich die Überschriften während des Exports ändern, wenn es sich der Anwender also anders überlegt hat? :stupid:

Ein nicht abgesichter Multithreadzugriff?

Wenn das passiert, dann hat man andere Probleme.

Dejan Vu 29. Aug 2014 06:45

AW: DBGRID export nach csv mit Titel
 
Zitat:

Zitat von himitsu (Beitrag 1270208)
Ein nicht abgesichter Multithreadzugriff?

Hä? Erstens, welcher Thread? Zweitens, ob vor oder in der Schleife wär dem Thread auch wurscht. Und drittens: Muss man eine :stupid: Bemerkung wirklich kommentieren?

himitsu 29. Aug 2014 08:50

AW: DBGRID export nach csv mit Titel
 
Ja? :stupid:

Wenn sich währenddessen der Inhalt ändert, dann wurde er ja irgendwo geändert
und da das innerhalb der Ausleseschleife nicht passieren konnte, muß es also ein anderer Thread sein.

Dejan Vu 29. Aug 2014 09:11

AW: DBGRID export nach csv mit Titel
 
Zitat:

Zitat von himitsu (Beitrag 1270221)
Ja? :stupid: .. muss es also ein anderer Thread sein.

Anderer Thread. DBGrid. VCL. Ne, is klar. ;-)
Ich habs: Wir bauen noch einen "Application.ProcessMessages" Aufruf in der Schleife ein. Dann gehts.


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:51 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