Entwickler-Ecke
Sonstiges (Delphi) - datenverwaltung; daten werden nicht alle gespeichert
luckyluc - Sa 03.10.09 11:37
Titel: datenverwaltung; daten werden nicht alle gespeichert
hey!
in dem beiliegendem quelltext, geht es darum, dass man daten einliest und diese nach schließen und erneutem öffnen wieder auslesen können soll. doch dies funktioniert noch nicht so wie es soll. wenn ich die .dat öffne sieht man, das bereits beim einlesen etwas nicht richtig funktioniert, denn es werden nicht alle daten gespeichert, nur eine zeile mehr nicht, dementsprechend kann auch nicht alles "ausgelesen" werden.
vlt. könnt ihr mir helfen, danke schon mal im voraus!
jaenicke - Sa 03.10.09 11:48
Hast du eigentlich einmal überlegt was du da tust? Nur einen Moment? :gruebel:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| procedure TForm1.btn_speichernClick(Sender: TObject); var i: integer; begin i:= 1; ReSet (datei); repeat WRITE(datei, person); Person.Vorname:= StringGrid1.Cells [1,i] ; Person.Nachname:= StringGrid1.Cells [2,i] ; inc (i); until eof (datei); CloseFile (datei); end; |
Erst öffnest du die Datei zum Lesen (Reset), dann versuchst du in die zum Lesen geöffnete Datei zu schreiben. Und zwar den Inhalt von person. Den du aber leider erst nach dem ersten Schreiben setzt.
Ja, und die Schleife wiederholst du so lange bis das Ende der Datei erreicht ist?!?
Was du doch eigentlich machen musst ist die Datei zum Schreiben öffnen / neu erstellen, dann alle Datensätze durchgehen und in die Datei schreiben...
platzwart - Sa 03.10.09 11:50
Erstens:
Gewöhn dir an, Dateien nur so lange offen zu halten wie nötig... Soll heißen: lass das AssignFile und Reset/Rewrite im OnCreate der Form weg!! Anstatt dessen in jeder Prozedur ein AssignFile/Reset/Rewrite/CloseFile. Und das ganze bitte mit Try...Finally Blöcken, damit tust du dir selbst einen riesen Gefallen.
luckyluc - Sa 03.10.09 12:18
an jaenicke: ja, ich habe darüber nachgedacht, auch wenn es für dich nicht so aussieht: ich bin eben nur anfänger.
ich habe mir gedacht: die schleife soll so oft durchlaufen, bis eben die erste spalte bzw. zweite fertig durchlaufen sind, damit man nicht hundert mal Person.Vorname:= StringGrid1.Cells [1,1] ; etc. schreiben muss.
platzwart - Sa 03.10.09 12:39
Dein Ansatz ist ja auch gut, hat bloß ein paar Fehler. Wie bereits erwähnt, steht da ein WRITE, es sollte daher drüber nicht Reset sondern Rwerite heißen. In der Schleife musst du das WRITE unterhalb von Person.Vorname:= / Person.Nachname:= schreiben. Ansonsten ist "person" ja noch nicht definiert. "until eof (datei)" kann hier nicht funktionieren, da du in die Datei hineinschreibst und nicht ausliest, daher weiß die Datei ja nicht, wieviele Datensätze sie enthalten wird.
luckyluc - Sa 03.10.09 13:34
vielen dank, platzwart!
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!