![]() |
Delphi Tabelle als txt speichern
Hallo
Delphi Tabelle als txt speichern. Weis jemand wie ich eine Delphi Paradox Tabelle als txt speichern kann. :?: |
dazu schreibst Du einfach alle Felder der Tabelle Feld für Feld in eine Zeile der Textdatei.
|
Hallo Bedrock,
als zusätzlichen Hinweis zu der Antort von Hansa: Wenn du den Fields-Array benutzt, kannst du den Inhalt aller Felder eines Datensatzes in einer Schleife speichern:
Delphi-Quellcode:
Außerdem gibt es die Methode GetCurrentRecord, die einen kompletten Datensatz in eiunem Puffer zurückliefert.
myTable.First;
while not myTable.EOF do begin for i:=0 to myTable.FieldCount-1 do zeile := myTable.Fields[i].AsString+';'; Writeln(myFile, zeile); end; Dann kannst du dir noch BatchMove anschauen, damit kannst du ebenfalls den Inhalt einer Paradoxdatei in eine Textdatei schieben. |
Hallo
Danke schon mal für die rasche Antwort. Aber wie schreib ich die Tabelle Zeile für Zeile in ein Textfile?? |
In etwa so:
Delphi-Quellcode:
Tabelle.First;
Repeat WriteLn (Datei, TabelleFeld1.AsString, TabelleFeld2.AsString, ...); Tabelle.Next; Until Tabelle.Eof; |
Hallo Bedrock,
Zitat:
|
Zitat:
|
oh man
ich glaub ich bin zu blöd. Also bei mir sieht das ganze jetzt so aus:
Delphi-Quellcode:
Hab nun das Problem mit der tabllenfeld eingabe??
procedure TForm1.CreateBtnClick(Sender: TObject);
begin Table1.First; Repeat WriteLn ('d:\SMS Alarmierung\SAT_Datenbank.dbf', table1.text.AsString, tabele1Alarm.AsString, ...); Table1.Next; Until Table1.Eof;; end; Meine Spalten lauten: Text und Alarm. Weiters wie bekomm ich das dann in eine Memo oder so?? |
Hallo r_kerber,
naja, dein Code ist ja eine Alternative, weil er den Fields Record nicht benutzt. Und es ist immer gut Alternativen zu verstehen. :roll: |
Warum schreibst Du es nicht gleich in ein Memo mit
Delphi-Quellcode:
Ansonsten gibt es für TMemo.Lines die Funktionen LoadFromFile und SaveToFile.
Memo.Lines.Add (Feld1.AsString + Feld2.AsString);
|
Das mit loadfromfile und savetofile ist mir klar.
Aber wie geb ich das korrekte Fel1, Feld2 .. an? Ich meine irrgentwo muss ich ja sagen aus welcher tabelle er das nehmen soll. Oder nicht? |
na gut, noch ein Beitrag von mir zu diesem "Blindenthread". 8) :lol:
Ihr habt nämlich das assign vergessen, bitte in Hilfe nachlesen:
Code:
so sollte es gehen. Der Variablen d wird mit Assign ein physikalischer Platte-Dateiname zugeordnet.
procedure TForm1.CreateBtnClick(Sender: TObject);
var d : text; begin Table1.First; AssignFile (d,'d:\SMS Alarmierung\SAT_Datenbank.dbf'); rewrite (d); Repeat WriteLn (d, table1.text.AsString, tabele1Alarm.AsString, ...); Table1.Next; Until Table1.Eof;; close (d); |
Danke schon mal
aber bei var d : text; [Fehler] SAT_Datenbank.pas(55): Konstante oder Typenbezeichner erwartet ?? |
textfile
|
Alles klar.
Kann mir aber jemnd noch vollgende Zeile erkären? WriteLn (Datei, TabelleFeld1.AsString, TabelleFeld2.AsString, ...); |
Zitat:
TabelleFeld1 ... Das sind Bezeichner für die einzelnen Tabellenspalten und enthalten jeweils den Wert des aktuellen Datensatzes! Wenn Du auf ein TTable doppelt klickst, dann öffnet sich der Felder-Editor. Anschließend rechte Maustaste und alle Felder hinzfügen und schon hats Du die entsprechenden Variablen. AsString ... Liefert als Ergebnis den aktuellen Wert des Feldes als Zeichenkette. WriteLn ... schreibt die Zeile irgenwohin (hier in eine Datei) mit abschließendem Zeilenumburch! |
OK habs gescheckt. Mercy
Habe vollgende Lösung
Delphi-Quellcode:
procedure TForm1.CreateBtnClick(Sender: TObject);
begin Screen.Cursor:= crHourGlass; Table1.First; memo.Clear; CreateBtn.Enabled:= false; repeat Memo.Lines.Add (table1.Fields[0].AsString + table1.Fields[1].AsString + table1.Fields[2].AsString + table1.Fields[3].AsString + table1.Fields[4].AsString + table1.Fields[5].AsString + table1.Fields[6].AsString + table1.Fields[7].AsString + table1.Fields[8].AsString + table1.Fields[9].AsString + table1.Fields[10].AsString); Table1.Next; Until Table1.Eof;; begin Memo.Lines.SaveToFile('d:\Sms Alarmierung\SAT.txt'); Screen.Cursor:= crDefault; CreateBtn.Enabled:= true; end; end; Kann mir noch jemand sagen wie ich die Spaltenbezeichnung einfügen kann. Danke für die Hilfe Gruß Bedrock |
Zitat:
|
Hat sich auch schon erledigt danke.
Hab aber noch ein anderes Anliegen. Wie kann ich aus der Datenbank Zeilen vergleichen?? Bsp.: eine Datenbank Zeile sieht bei mir so aus SMS Text Alarm Gruppe1 Gruppe2 Gruppe3 Gruppe4 M1 Synpol Störung 0 1 0 0 0 Der SMS Text ist ja klar. der Text der als SMS versendet wird. Alarm, Gruppe1, ... ist dazu da das die Meldung an verschidene Nummern versendet wird. Das heist bei Gruppe1 = 1 Meldung wird an Grupp1 versendet Gruppe2=1 Gruppe3=1 Meldung an Gruppe2+3 eine 0 bedeutet das die Meldung an die Gruppe nicht weitergeleitet wird. Nun möcht ich gerne eine Kontrolle durchführen das wenn überall eine Null drinn steht. ich ein Hinweis in eine Memo bekomme. |
Hallo Bedrock,
in meinem Code Schnipsel, den du bisher ja vollkommen ignoriert hast :mrgreen: , sind die Datenfelder durch Semikolons getrennt, das hätte die Suche vereinfacht. Die Schleife hätte dir auch Schreibarbeit gespart. Vielleicht noch folgender Hinweis: eine repeat - until Schleife sollte man nur benutzen, wenn die Schleife midestens einmal durchlaufen werden soll. Wenn die Tabelle leer ist, funktioniert dein Code nicht, deshalb solltest du unbedingt eine While-Schleife benutzen. So, nun zu deiner neuen Frage: Als erstes musst du die Stelle finden, ab der die Ziffern losgehen. Wenn ich deine Ausfführungen korrekt verstanden habe, steht vor den Gruppen immer das Wort "Alarm". Falls das stimmt, funktioniert der folgende Code (aber auch nur, wenn das Wort Alarm nicht in der SMS vorkommt [ansonsten musst du das Wort "Alarm" sooft suchen, bis du das letzte Vorkommen gefunden hast, da du das Leerzeichen als Trennungszeichen benutzt hast])
Delphi-Quellcode:
{ In Zeile steht die zuletzt gelesene Zeile }
posi := Pos('Alarm', zeile); { Jetzt kannst du über Copy(zeile, posi+6, 1) z.B. auf die erste Ziffer zugreifen } try grp1 := StrToInt(Copy(zeile, posi+6, 1)); grp2 := StrToInt(Copy(zeile, posi+8, 1)); ... except on exception do { Fehlermeldung ausgeben } end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:44 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 by Thomas Breitkreuz