| Autor |
Beitrag |
luckyluc
      
Beiträge: 103
|
Verfasst: Sa 03.10.09 11:37
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!
Einloggen, um Attachments anzusehen!
|
|
jaenicke
      
Beiträge: 19341
Erhaltene Danke: 1752
W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Sa 03.10.09 11:48
Hast du eigentlich einmal überlegt was du da tust? Nur einen Moment?  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
      
Beiträge: 1054
Erhaltene Danke: 78
Win 7, Ubuntu 9.10
Delphi 2007 Pro, C++, Qt
|
Verfasst: 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.
_________________ Wissenschaft schafft Wissenschaft, denn Wissenschaft ist Wissenschaft, die mit Wissen und Schaffen Wissen schafft. (myself)
|
|
luckyluc 
      
Beiträge: 103
|
Verfasst: 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
      
Beiträge: 1054
Erhaltene Danke: 78
Win 7, Ubuntu 9.10
Delphi 2007 Pro, C++, Qt
|
Verfasst: 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.
_________________ Wissenschaft schafft Wissenschaft, denn Wissenschaft ist Wissenschaft, die mit Wissen und Schaffen Wissen schafft. (myself)
|
|
luckyluc 
      
Beiträge: 103
|
Verfasst: Sa 03.10.09 13:34
|
|
|