Entwickler-Ecke
Dateizugriff - Bei erstellter Funktion nur ein Datensatz gespeichert
itfreak - Di 02.03.10 09:50
Titel: Bei erstellter Funktion nur ein Datensatz gespeichert
Hallo Community,
Ich hoffe mal, ich bin im richitgen Board. Habe eine Funktion erstellt und weiß nicht, warum Delphi nur einen Datensatz ausgibt oder speichert. Hier Teile des Quelltextes:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60:
| type TBuecher = record Nummer: integer; Name, Autor, Stichwort: String[35]; Verfuegbar: integer; end;
procedure TForm1.BitBtn4Click(Sender: TObject); var Buch : TBuecher; Datei : File of TBuecher ; i : Integer ; a : Integer ;
begin a:=StrToInt(Edit_Anzahl_eingeben.Text); AssignFile(Datei,'Buchliste.dat'); Reset(Datei); for i:=a to a do begin StringGrid1.Cells[1,i]:=Edit_Name.Text; StringGrid1.Cells[2,i]:=Edit_Autor.Text; StringGrid1.Cells[3,i]:=Edit_Buchanzahl.Text; StringGrid1.Cells[4,i]:=Edit_Stichwort.Text; with Buch do begin Nummer:=i; Name:=(StringGrid1.Cells[1,i]); Autor:=(StringGrid1.Cells[2,i]); Verfuegbar:=StrToInt(StringGrid1.Cells[3,i]); Stichwort:=(StringGrid1.Cells[4,i]); Write(Datei,Buch); CloseFile(Datei); end; end;
end;
procedure TForm1.BitBtn5Click(Sender: TObject); var Buch : TBuecher; Datei : File of TBuecher; i : Integer;
begin AssignFile (Datei,'Buchliste.dat'); Reset(Datei); i:=0; repeat Inc(i); Read (Datei,Buch); with Buch do begin Nummer:=i; StringGrid1.Cells[1,i]:=(Name); StringGrid1.Cells[2,i]:=(Autor); StringGrid1.Cells[3,i]:=FloatToStr(Verfuegbar); end; until EOF(Datei); CloseFile(Datei); end; |
So, irgendwo in einer der beiden Prozeduren muss der Fehler sein, bloß ich bin zu blöd ihn zu finden. Ich hatte erst die Vermutung, dass ich nicht alle Datensätze einzeln speichern kann und hab erst alle Datensätze eingelesen und dann gespeichert. Trotzdem wurde nur ein Datensatz ausgegeben. Ich vermute, dass mein Fehler beim speichern liegt. Wahrscheinlich sehe ich nur den Wad vor Bäumen nicht.
Edit: Die Speicherfunktion dürfte doch jetzt keine Datensätze überschreiben, oder liegt hier das Problem?
Moderiert von
Narses: Delphi-Tags hinzugefügtModeriert von
Narses: Topic aus Algorithmen, Optimierung und Assembler verschoben am Di 02.03.2010 um 11:56
JoelH - Di 02.03.10 11:40
itfreak hat folgendes geschrieben : |
Hallo Community,
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17:
| for i:=a to a do begin StringGrid1.Cells[1,i]:=Edit_Name.Text; StringGrid1.Cells[2,i]:=Edit_Autor.Text; StringGrid1.Cells[3,i]:=Edit_Buchanzahl.Text; StringGrid1.Cells[4,i]:=Edit_Stichwort.Text; with Buch do begin Nummer:=i; Name:=(StringGrid1.Cells[1,i]); Autor:=(StringGrid1.Cells[2,i]); Verfuegbar:=StrToInt(StringGrid1.Cells[3,i]); Stichwort:=(StringGrid1.Cells[4,i]); Write(Datei,Buch); CloseFile(Datei); end; end; | |
Du solltest das File erst zumachen nachdem du alle Datensätze reingeschrieben hast. Mach also mal das CloseFile(Datei); aus der Schleife raus und setz es hinter das Schleifenende.
Des Weiteren sollte es wohl
for i:=0 to a-1 do sein und nicht
for i:=a to a do.
elundril - Di 02.03.10 11:54
Hallo und :welcome: im Delphi-Forum!
hier im Forum kannst du für die bessere Lesbarkeit deines Quelltextes die [delphi][/delphi]-Tags verwenden.
lg elundril
jaenicke - Mi 03.03.10 08:19
Zum Anhängen von Daten ist es am Sinnvollsten gleich
APPEND statt
RESET zu nehmen. Denn damit steht der Dateizeiger gleich am Ende der Datei zum Anhängen.
jaenicke - Mi 03.03.10 10:13
Horst_H hat folgendes geschrieben : |
| ich dachte append funktioniert nur mit Textdateien? |
Ja, tut mir leid, mein Fehler. Ich selbst arbeite natürlich nicht mit typisierten Dateien, das wusste ich gar nicht (und hab leider nicht nachgeschaut). Ich frage mich allerdings warum das nicht geht, aber dann muss man wirklich Seek selbst benutzen wie du es geschrieben hattest.
itfreak - Fr 05.03.10 16:36
Jo, danke für die vielen Antworten. Werde mal alle Ratschläge durchprobieren, hatte bis jetzt noch keine Zeit.
itfreak - Di 09.03.10 08:52
Danke vielmals, es funktioniert. Zumindestens das, was ich hier gepostet habe. Ich hoffe, den Rest kireg ich auch so hin
BenBE - So 21.03.10 18:30
Markierst Du den Thread ggf. noch als erledigt? TIA.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 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!