Hi Leute ich habe ein Problem beim speichern eines records in eine datei. Soweit ich das hier im Forum verstanden habe wird empfolen dies in eine typisierte Datei zu speichern und ich habe mir auch das Tut auf DSDT angeschaut bin aber nur teilweise schlau drauf geworden.
In Form1 wird das record definiert und die verbindung zur datei hergestellt. In Form2 soll in die datei gespeichert werden. Aus mir noch unerklärlichen Gründen muss ich in Form2 nochmals zur Datei verbinden. Wenn ich nun die Funktion speichern ausführe und die Datei noch leer ist schreibt das Programm richtig in die Datei. Wenn nun aber schon ein Eintrag in der Datei vorhanden ist, kommt es zu einem Fehler und es wird ein leerer eintrag in die datei gespeichert.
Ich hoffe ihr könnt mir bei meinem Problem helfen! Schonmal vielen vielen Dank im Vorraus!!!
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: 61: 62: 63:
| type TCD = packed record Titel : string[30]; Autor : string[30]; Datum : string[10]; Version : string[30]; Anzahl : string[30]; Inhalt : string[255]; end;
var Form1: TForm1; datei : file of TCD; dateiname : string;
implementation
uses Unit2;
{$R *.dfm}
procedure ausgabe(); var datensatz : TCD; begin seek(datei,0); Form1.ListBox1.Clear; while not eof(datei) do begin read(datei,Datensatz); Form1.ListBox1.Items.Add(Datensatz.titel); end; end;
procedure TForm1.NeuerEintrag1Click(Sender: TObject); begin Form2.showmodal; end;
procedure TForm1.FormCreate(Sender: TObject); begin dateiname := ''; AssignFile(datei,'tcd.dat'); if FileExists('tcd.dat') then ReSet(datei) else ReWrite(datei); end;
procedure TForm1.FormCloseQuery(Sender: TObject; var CanClose: Boolean); begin CanClose := MessageDlg('Formular schließen?', mtConfirmation,[mbOk, mbCancel], 0) = mrOk; end;
procedure TForm1.Beeende1Click(Sender: TObject);
begin if MessageDlg('Formular schließen?', mtConfirmation,[mbOk, mbCancel], 0) = mrOk then halt; end;
procedure TForm1.Aktualisieren1Click(Sender: TObject); begin ausgabe(); end; |
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:
| implementation
uses Unit1;
{$R *.dfm}
function speichern(titel,autor,datum,version,anzahl,inhalt,Dateiname : string): boolean; var Buffer : array of TCD; i : integer; begin setLength(Buffer,FileSize(datei)+1); seek(datei,0); i := 0; while not eof(datei) do begin read(datei,Buffer[i]); inc(i); end;
Buffer[(i+1)].titel := titel; Buffer[(i+1)].autor := autor; Buffer[(i+1)].datum := datum; Buffer[(i+1)].version := version; Buffer[(i+1)].anzahl := anzahl; Buffer[(i+1)].inhalt := inhalt; i := 0; while not eof(datei) do begin application.messagebox('Der Eintrag wurde erfolgreich gespeichert!','Speichern',mb_ok); write(datei,Buffer[i]); inc(i); end; write(datei,Buffer[(i+1)]); speichern := TRUE; end;
procedure TForm2.BabortClick(Sender: TObject); begin Form2.Close; end;
procedure TForm2.FormCreate(Sender: TObject); begin Edatum.Text := FormatDateTime('dd.mm.yyyy', now); label7.Caption := dateiname; if dateiname = '' then dateiname := 'tcd.dat'; AssignFile(datei,dateiname); if FileExists(dateiname) then ReSet(datei) else ReWrite(datei); end; |