Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi DBGrid speichert nicht die Daten ab (https://www.delphipraxis.net/137266-dbgrid-speichert-nicht-die-daten-ab.html)

kumar89 17. Jul 2009 10:45

Datenbank: Paradox • Zugriff über: Datasource

DBGrid speichert nicht die Daten ab
 
Sers Delphi-Programmierer,

folgendes Problem:

nämlich programmier ich ein Passwort Manager mit einem dbgrid, datasource, ttbale und den dazugehörigen dbedits. Dabei möchte ich die DBGrid Tabelle als .txt Datei und .csv abspeichern. Was auch bisher klappt, blos in der Datei selbst werden folgende Dinge reingeschrieben:

TPF0TColumnsWrapperColumns DropDownRowsExpanded FieldNameBenutzerReadOnly WidthïVisible  DropDownRowsExpanded FieldNamePasswortReadOnly WidthöVisible

aber die Daten die in den einzelnen Zeilen und Spalten werden nicht in die .txt bzw. .csv reingeschrieben.

Quellcode zum abspeichern als .csv:

Delphi-Quellcode:
procedure TForm1.BitBtnprintexcelClick(Sender: TObject);    //Als Excel Datei speichern
var
  saveDialog: TSaveDialog;
begin
  saveDialog := TSaveDialog.Create(self);
  saveDialog.FileName := 'passwort';
  saveDialog.Filter := 'CSV-Dateien|*.csv';  //Datei-Filter
  saveDialog.DefaultExt := 'csv';
  saveDialog.Options := [ofOverwritePrompt];
  if saveDialog.Execute then
  begin
     DBGridPW.Columns.SaveToFile('passwort.csv');
  end;
end;

Wie bekomm ich die einzelnen Daten aus der DBGrid raus?



Mit freundlichen Grüßen

kumar89

shmia 18. Jul 2009 11:10

Re: DBGrid speichert nicht die Daten ab
 
Zitat:

Zitat von kumar89
Dabei möchte ich die DBGrid Tabelle als .txt Datei und .csv abspeichern. Was auch bisher klappt...

So wie du das bisher probiert hast, bist du völlig auf dem Holzweg. :zwinker: :zwinker:
Folgende Zeile speichert NICHT den Inhalt des DBGrid
Delphi-Quellcode:
DBGridPW.Columns.SaveToFile('passwort.csv');
sondern nur die Einstellungen der Spalten (=Columns).
So wird nur die Reihenfolge und die Breite jede Spalte gespeichert.

Um deine Daten zu Speichern musst du dich völlig vom DBGrid lösen und nur mit TDataset arbeiten.
TDataset ist der Vater von TTable.

Hier mal eine Quick & Dirty Variante, wie man die Daten als CSV speichern kann:
Delphi-Quellcode:
procedure SaveDatasetAsCSV(ds:TDataset; const fn:string);
var
  list : TStringList;
  s : string;
  i : integer;
begin
   list := TStringList.Create;
   ds.First;
   while not ds.Eof do  // über alle Datensätze
   begin
     s := '';
     for i := 0 to ds.Fields.Count-1 do  // über alle Datenfelder
     begin
       s := s + ds.Fields[i].AsString+ ',';
     end;
     list.Add(s);

     ds.Next;
   end;
   list.Save(fn);
   list.Free;
end;
Der Code ist ungetestet, sollte aber das Grundprinzip zeigen.
Das Einlesen einer CSV-Datei ist übrigens etwas schwieriger als das Speichern.

kumar89 22. Jul 2009 10:38

Re: DBGrid speichert nicht die Daten ab
 
klappt net so wirklich :S gibts keine andere Möglichkeit?

hoika 22. Jul 2009 10:45

Re: DBGrid speichert nicht die Daten ab
 
Hallo,

Zitat:

klappt net so wirklich
was klappt nicht ?

Zitat:

gibts keine andere Möglichkeit?
nein, ist zumindestens die einfachste


Heiko

shmia 22. Jul 2009 12:38

Re: DBGrid speichert nicht die Daten ab
 
Zitat:

Zitat von kumar89
gibts keine andere Möglichkeit?

Es gibt natürlich auch fertige Komponenten...
http://www.torry.net/pages.php?id=555
Du brauchst nur die Komponenten anschauen, die mit grünem FWS markiert sind.
Ein Startpunkt wäre Pg CSV v.1.31 - hab ich selber schon verwendet.
Auch wenn manche Komponenten nur bis Delphi 5 angegeben sind, sind sie in aller Regel auch unter höheren Delphi
Versionen funktionsfähig. (aber nicht D2009)

kumar89 23. Jul 2009 10:34

Re: DBGrid speichert nicht die Daten ab
 
Komponenten möchte ich nicht verwenden, würde es gern lieber programmieren.

Könntest mir vielleicht bissel erklären wie ich vorgehen sollte. :-D


Danke

shmia 23. Jul 2009 11:03

Re: DBGrid speichert nicht die Daten ab
 
Was klappt denn nicht?
Beachte, dass folgender Sourcecode gegenüber Beitrag oben leicht verbessert wurde.
Delphi-Quellcode:
procedure SaveDatasetAsCSV(ds:TDataset; const filename:string);
var
  list : TStringList;
  s : string;
  i : integer;
  f : TField;
begin
   list := TStringList.Create;
   ds.First;
   while not ds.Eof do  // über alle Datensätze
   begin
     // erstelle kommagetrennten String über alle Felder
     s := '';
     for i := 0 to ds.Fields.Count-1 do  // über alle Datenfelder
     begin
       f := ds.Fields[i];
       if f.DataType in ftNonTextTypes then
          // diese Datentypen können nicht exportiert werden
       else
          s := s + f.AsString+ ',';
     end;
     list.Add(s);

     ds.Next;
   end;
   list.SaveToFile(filename);
   list.Free;
end;

kumar89 29. Jul 2009 12:19

Re: DBGrid speichert nicht die Daten ab
 
der klappt blos wie ruf ich den auf? :D

DeddyH 29. Jul 2009 12:23

Re: DBGrid speichert nicht die Daten ab
 
Wie wäre es denn mit
Delphi-Quellcode:
SaveDatasetAsCSV(DeinDBGrid.Datasource.Dataset, Dateiname);
:?:

kumar89 29. Jul 2009 12:31

Re: DBGrid speichert nicht die Daten ab
 
leider erscheint nix :-( kommt auch keine fehlermeldung


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:59 Uhr.
Seite 1 von 3  1 23      

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