![]() |
Datenbank: Firebird • Version: 1.5 • Zugriff über: Zeos
Spaltenname mit in einer CSV-Datei speichern
Hallo zusammen,
wie in einem vorherigen Thread schonmal verkündet arbeite ich bei meinem aktuellen Programm mit Lazarus. Das ist aber halb so wild, da ich bisher fast alles von Delphi so übernehmen konnte. Jetzt gibt es aber nicht die Möglichkeit Daten direkt nach Excel zu exportieren. Also gehe ich den Weg über eine CSV-Datei. Zu diesem Zweck habe ich folgenden Code gefunden:
Delphi-Quellcode:
Das passt so gut, das wenn ich die Datei mit Excel öffne alles ganz normal aussieht. Jetzt möchte ich gerne noch die Spaltenüberschrift mit dabei haben...geht das und wenn ja wie?
procedure TForm1.Button2Click(Sender: TObject);
begin application.Terminate; end; procedure TForm1.Button3Click(Sender: TObject); var ndx : Integer; sl : TStringList; tString : String; begin sl := TStringList.Create; try with qrmain do begin First; while not (Eof) do begin tString := ''; for ndx := 0 to Fields.Count -1 do begin tString := tString + '"' + Fields.Fields[ndx].AsString + '",'; end; sl.Add(tString); Next; end; end; sl.SaveToFile('c:\We_Anforderungen.csv'); finally FreeAndNil (sl); end; Showmessage('Daten wurden gespeichert!!') end; Danke Ati |
Re: Spaltenname mit in einer CSV-Datei speichern
Hallo Ati,
ich würde es so machen:
Delphi-Quellcode:
Dieser Ansatz berücksichtigt das Vorkommen von Quote in den Daten selbst und verdoppelt solche Quotes. Keine Ahnung, ob du das mit Lazarus übersetzen kannst, aber vielleicht hilft es dir ja trotzdem.
procedure AddNames(csv: TStrings; fields: TFields);
var i: Integer; begin with TStringList.Create do begin for i := 0 to Pred(fields.Count) do Add(fields[i].FieldName); csv.Add(CommaText); Free; end; end; procedure AddValues(csv: TStrings; fields: TFields); var i: Integer; begin with TStringList.Create do begin for i := 0 to Pred(fields.Count) do Add(fields[i].AsString); csv.Add(CommaText); Free; end; end; procedure SaveToCsv(ds: TDataSet; fn: TFileName); var csv: TStringList; bm: TBookmark; begin csv := TStringList.Create; ds.DisableControls; bm := ds.GetBookmark; try AddNames(csv, ds.Fields); ds.First; while not ds.Eof do begin AddValues(csv, ds.Fields); ds.Next; end; csv.SaveToFile(fn); finally csv.Free; ds.GotoBookmark(bm); ds.FreeBookmark(bm); ds.EnableControls; end; end; Grüße vom marabu |
Re: Spaltenname mit in einer CSV-Datei speichern
Also marabu Dein Code funktioniert einwandfrei....vielen Dank. Was Du aber danach geschrieben hast, verwirrt mich, da ich nicht weiß was Du damit meinst. Des weiteren sind da Codezeilen, die ich mir auch noch nicht ganz erklären kann. Vielleicht kannst/möchtest Du die mal kurz erklären.
Delphi-Quellcode:
Nur so als Lerneffekt. Dank schonmal im voraus
qrmain.DisableControls;
bm := qrmain.GetBookmark; qrmain.GotoBookmark(bm); qrmain.FreeBookmark(bm); qrmain.EnableControls; |
Re: Spaltenname mit in einer CSV-Datei speichern
Nimm als Beispiel ein StringField, in welchem sich ein Zitat findet:
Code:
Dein Code schreibt diesen Text so in eine CSV-Datei:
Aus der Reihe "Letzte Worte" heute der Briefträger mit "Braves Hundchen"
Code:
Richtig wäre die Verdoppelung der enthaltenen Quotes:
"Aus der Reihe "Letzte Worte" heute der Briefträger mit "Braves Hundchen""
Code:
Was die Bookmark-Methoden betrifft, so fand ich es einfach ordentlicher, wenn das Programm den Satzzeiger nach Ausführung meines Codes wieder an der gleichen Stelle vorfindet wie vorher. DisableControls sorgt lediglich dafür, dass die Echtzeit-Aktualisierung von verknüpften visuellen Komponenten unterbleibt, während ich den Satzzeiger steuere - mit EnableControls stelle ich den alten Zustand wieder her.
"Aus der Reihe ""Letzte Worte"" heute der Briefträger mit ""Braves Hundchen"""
marabu |
Re: Spaltenname mit in einer CSV-Datei speichern
Danke. Das habe jetzt selbst ich verstanden :-D
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:01 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz