Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi DBGrid in txt speichern (https://www.delphipraxis.net/5577-dbgrid-txt-speichern.html)

Albi 11. Jun 2003 18:57


DBGrid in txt speichern
 
Und wieder einmal ein kleines Problem.

Ich will die sich in einer DBGrid (gefiltert) befindlichen Zeilen in eine *.txt abspeichern, so das ich im Anschluß daran, aus diesen gefilterten Zeilen einen Serienbrief erstellen kann.

Ich habe es es bis jetzt nur hinbekommen, das er mir einen Datensatz 14x (=Anzahl der Spalten) hintereinander abspeichert. Ich habe aber schon gesehen das es auch so aussehen kann:

Delphi-Quellcode:
Nr  name   Vorname
1    Test1   Test2
... ...    ...
Ich habe auch schon gegoogelt bis zum schwarz werden aber gefunden habe ich nichts was mir weiterhilft.

Versucht habe ich es mit dem folgendem Quelltext

Code:
ar
x,y :integer;
list : TStringlist;
begin
list := TStringlist.Create;
for x:=0 to DBGrid1.Columns.Count-1 do
begin
   for y:= 0 to DBGrid1.SelectedRows.Count-1 do
   begin
   list.Add(Form1.Query1.Fields.Fields[x]);
   end;
end;
list.SaveToFile('Strings.txt');
list.Free;
end;

Phoenix 11. Jun 2003 19:03

Schonmal
Code:
DBGrid1.Columns.SaveToFile('Strings.txt');
probiert?

Albi 11. Jun 2003 19:14

Ja, das habe ich schon aber da kommt nichts weiter dabei raus, als da ich die Spaltenname speichere.

Das sieht so aus.

Delphi-Quellcode:
DB_Vorname Title.Caption VornameVisible      Expanded    FieldName DB_Name Title.Caption NameVisible      Expanded    FieldName    DB_Zusatz Title.Caption ZusatzVisible      Expanded    FieldName
Das hatte ich auch, nur sollten darunter dann auch noch die Einträge stehen.

JoelH 12. Jun 2003 05:13

hmm,
 
warum machst du dass mit einem DBGrid ? Lad dir den Kram doch in ein Array und speicher dieses als typisierte Datei oder so ab. Du musst auch bedenken dass nicht alle Daten im DBGrid stehen sondern nur die die auch auf dem Bildschirm angezeigt werden, also eventuell unvollständig ist !

Albi 12. Jun 2003 05:41

Genau das ist ja meine Absicht, ich will nur die Daten die im Grid stehen in die txt gespeichert haben. Wie ich oben geschrieben habe, sind die Daten gefiltert.

Des weiteren kenne ich mich mit Delphi noch nicht so gut aus, somit scheint das mir die einfachste Lösung zu sein, da ich mit der typisierte Datei absolut nicht auskenne.

grayfox 13. Jun 2003 16:56

hallo albi!
lass das DBGrid. es dient ja nur zum anzeigen der datensätze
wie wärs zb mit

Delphi-Quellcode:
while not table.eof do begin
  eintrag:= table.fieldbyname('feldname').asString;
   usw....
  table.next
end;
statt 'table' kannst auch 'query' einsetzen...
und schon hast zugriff auf alle gefilterten datensätze deine tabelle(n)

mfg, stefan

Albi 13. Jun 2003 18:37

Und wie speichere ich das dann in der Txt? Einfach über Tabel/Query SaveToFile?

Ich versteh nur noch Bahnhof. :?:

r_kerber 13. Jun 2003 18:46

Nur mal so auf die Schnelle (ungetestet) als Anregung:

Delphi-Quellcode:
var
  F: TextFile;
begin
  AssignFile (F, 'Dateiname');
  Rewrite (F);
  Table1.Open;
  Table1.First;
  repeat
    WriteLn (F, Table1.Fields[1].AsString,',',Table1.Fields[2],',',...)
    Table1.Next;
  until (Table1.EOF);
  Table1.Close;
  CloseFile(F);
end
;

Albi 13. Jun 2003 18:55

Super es klappt, das einzigste was da jetzt noch fehlt, ist das er mir die Spaltentitel mit in die txt Speichert.

Ansonsten erstmal vielen Dank für die schnelle Hilfe. :hello:

Albi 13. Jun 2003 19:22

Hab es hinbekommen.

Code:
var
  F: TextFile;
begin
  AssignFile (F, 'Dateiname');
  Rewrite (F);
  Table1.Open;
  Table1.First;
  Writeln(F, 'Test1,Test2,Test3,Test4,Test5');
  repeat
    WriteLn (F, Table1.Fields[1].AsString,',',Table1.Fields[2],',',...)
    Table1.Next;
  until (Table1.EOF);
  Table1.Close;
  CloseFile(F);
end
So sieht der Code aus und es funktioniert wunderbar, so wie ich es mir vorgestellt habe.

Danke

Mfg

Micha

r_kerber 13. Jun 2003 20:16

Zitat:

Zitat von Albi
Code:
  Writeln(F, 'Test1,Test2,Test3,Test4,Test5');

Das kannst Du auch noch variabel gestalten:
Delphi-Quellcode:
    WriteLn (F, Table1.Fields[1].FieldName,',',Table1.Fields[2].FieldName,',',...);

Albi 13. Jun 2003 21:52

Super, vielen Dank. :D

Jetzt geht es so, wie ich es haben will.

Eine Frage habe ich da aber noch, woher kommt das Wissen, saugt Ihr euch das den Fingern oder habt ihr solch gute Fachliteratur?

Erstaunlich, von Tag zu Tag lernt man mehr. Einfach super dieses Forum.

Albi 14. Jun 2003 06:57

Ich habe jetzt eine besser Lösung gefunden, wo man das viele schreiben bei einer großen Table spart, für alle die es interessiert.

Code:
ar i: integer;
    F: TextFile;
begin
assignFile (f,'test1.txt');
rewrite (f);
Form1.Query1.First;
while not Form1.Query1.EOF do
begin
  for i:=0 to Form1.Query1.FieldCount-1 do
  Write(F, Form1.Query1.Fields[i].asstring+';');
    if Form1.Query1.FieldCount-1 = Form1.Query1.FieldCount-1 Then
      Writeln(F, '');
  Form1.Query1.Next;
end;
Anstatt von Query kann da auc Table stehen. Das Ergebnis in der TextFile sieht dann so aus

Zitat:

92;;Edit1;Edit2;0;0;0;;13.06.2003 19:05:12;
91;;Edit1;Edit2;0;0;0;;13.06.2003 19:05:04;
90;;Edit1;Edit2;0;0;0;;08.06.2003 07:11:09;
85;;Edit1;Edit2;0;0;0;;05.06.2003 07:08:54;
86;;Edit1;Edit2;0;0;0;;06.06.2003 06:49:05;
87;;Micha;Michael;1;1;1;;07.06.2003 07:21:15;
82;;Michael;Rückert;0;0;;;;
81;;Rückert;Michael;1;;;;;
83;;Zausel;Zerna;1;0;0;1;;
88;;ad;Edit2asda;0;0;0;;08.

Sharky 14. Jun 2003 07:11

Hai Albi,

wozu hast Du denn diese Zeile im Code?

Zitat:

Zitat von Albi
Code:
 ....
  if Form1.Query1.FieldCount-1 = Form1.Query1.FieldCount-1 Then
      Writeln(F, '');
 ....

Du prüfst dort immer ob eine Varialbe mit sich selber übereinstimmt. Da dies logischerweise der Fall sein muss kannst Du die Zeile auch weg lassen.

r_kerber 14. Jun 2003 08:12

Zitat:

Zitat von Albi
Eine Frage habe ich da aber noch, woher kommt das Wissen, saugt Ihr euch das den Fingern oder habt ihr solch gute Fachliteratur?

OH + Trial and Error. :lol:


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