![]() |
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:
Ich habe auch schon gegoogelt bis zum schwarz werden aber gefunden habe ich nichts was mir weiterhilft.
Nr name Vorname
1 Test1 Test2 ... ... ... 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; |
Schonmal
Code:
probiert?
DBGrid1.Columns.SaveToFile('Strings.txt');
|
Ja, das habe ich schon aber da kommt nichts weiter dabei raus, als da ich die Spaltenname speichere.
Das sieht so aus.
Delphi-Quellcode:
Das hatte ich auch, nur sollten darunter dann auch noch die Einträge stehen.
DB_Vorname Title.Caption VornameVisible Expanded FieldName DB_Name Title.Caption NameVisible Expanded FieldName DB_Zusatz Title.Caption ZusatzVisible Expanded FieldName
|
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 !
|
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. |
hallo albi!
lass das DBGrid. es dient ja nur zum anzeigen der datensätze wie wärs zb mit
Delphi-Quellcode:
statt 'table' kannst auch 'query' einsetzen...
while not table.eof do begin
eintrag:= table.fieldbyname('feldname').asString; usw.... table.next end; und schon hast zugriff auf alle gefilterten datensätze deine tabelle(n) mfg, stefan |
Und wie speichere ich das dann in der Txt? Einfach über Tabel/Query SaveToFile?
Ich versteh nur noch Bahnhof. :?: |
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 |
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: |
Hab es hinbekommen.
Code:
So sieht der Code aus und es funktioniert wunderbar, so wie ich es mir vorgestellt habe.
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 Danke Mfg Micha |
Zitat:
Delphi-Quellcode:
WriteLn (F, Table1.Fields[1].FieldName,',',Table1.Fields[2].FieldName,',',...);
|
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. |
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:
Anstatt von Query kann da auc Table stehen. Das Ergebnis in der TextFile sieht dann so aus
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; Zitat:
|
Hai Albi,
wozu hast Du denn diese Zeile im Code? Zitat:
|
Zitat:
|
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