AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Spaltenname mit in einer CSV-Datei speichern
Thema durchsuchen
Ansicht
Themen-Optionen

Spaltenname mit in einer CSV-Datei speichern

Ein Thema von Ati · begonnen am 17. Jul 2006 · letzter Beitrag vom 18. Jul 2006
Antwort Antwort
Ati

Registriert seit: 16. Okt 2003
Ort: Gelsenkirchen
406 Beiträge
 
Delphi 3 Professional
 
#1

Spaltenname mit in einer CSV-Datei speichern

  Alt 17. Jul 2006, 12:20
Datenbank: Firebird • Version: 1.5 • Zugriff über: Zeos
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:
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;
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?

Danke
Ati
Ich weiß das ich nichts weiß

Sokrates
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#2

Re: Spaltenname mit in einer CSV-Datei speichern

  Alt 17. Jul 2006, 12:51
Hallo Ati,

ich würde es so machen:

Delphi-Quellcode:
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;
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.

Grüße vom marabu
  Mit Zitat antworten Zitat
Ati

Registriert seit: 16. Okt 2003
Ort: Gelsenkirchen
406 Beiträge
 
Delphi 3 Professional
 
#3

Re: Spaltenname mit in einer CSV-Datei speichern

  Alt 17. Jul 2006, 13:15
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:
qrmain.DisableControls;
      bm := qrmain.GetBookmark;
      qrmain.GotoBookmark(bm);
      qrmain.FreeBookmark(bm);
      qrmain.EnableControls;
Nur so als Lerneffekt. Dank schonmal im voraus
Ich weiß das ich nichts weiß

Sokrates
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#4

Re: Spaltenname mit in einer CSV-Datei speichern

  Alt 17. Jul 2006, 15:05
Nimm als Beispiel ein StringField, in welchem sich ein Zitat findet:

Code:
Aus der Reihe "Letzte Worte" heute der Briefträger mit "Braves Hundchen"
Dein Code schreibt diesen Text so in eine CSV-Datei:

Code:
"Aus der Reihe "Letzte Worte" heute der Briefträger mit "Braves Hundchen""
Richtig wäre die Verdoppelung der enthaltenen Quotes:

Code:
"Aus der Reihe ""Letzte Worte"" heute der Briefträger mit ""Braves Hundchen"""
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.

marabu
  Mit Zitat antworten Zitat
Ati

Registriert seit: 16. Okt 2003
Ort: Gelsenkirchen
406 Beiträge
 
Delphi 3 Professional
 
#5

Re: Spaltenname mit in einer CSV-Datei speichern

  Alt 18. Jul 2006, 06:55
Danke. Das habe jetzt selbst ich verstanden
Ich weiß das ich nichts weiß

Sokrates
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:38 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