Guten Abend,
ich würde die Prozedure Kontrolle zu einer Funktion umbauen:
Delphi-Quellcode:
function Kontrolle:Boolean; //Prozedur zum Test, ob einige der bekannten IO-Fehler gefunden werden
begin
result := false;
case IOResult of
0: result := true;
2: begin showmessage ('Datei nicht vorhanden.' +#13+ 'Datei wird angelegt');
rewrite(f);
// closeFile(f); // wenn Du die Datei erstellt hast nicht gleich wieder schließen Du willst ja noch etwas abspeichern
result := true;
end;
3: showmessage ('Ungueltiger Dateiname/Pfad');
5: showmessage ('Dateizugriff verweigert.');
21: showmessage ('Laufwerk nicht bereit!');
end;
end;
und sie dann so einsetzen:
Delphi-Quellcode:
procedure TForm1.ButtonSpeichernClick(Sender: TObject); //Datenbank abspeichern
var i:integer;
begin
Assignfile (f,Datenpfad);
{$I-} reset (f); {$I+}
if Kontrolle then
begin
for i:=1 to 99999 do write (f, Datensatz[i]);
closefile (f);
end;
end;
denn in Deinem Konstrukt wird IOResult immer 0 sein.
Denn wenn IOResult einmal abgefragt wurde wird IOError gelöscht:
Aus der Hilfe:
Zitat:
IOResult returns the result of the last Delphi I/O routine when I/O-checking is off (that is, when using the {$I-} compiler option). If IOResult returns 0, the last I/O operation succeeded. Otherwise, IOResult returns an error code.
If an I/O error occurs and I/O-checking is off, all subsequent I/O operations are ignored until the internal error flag is cleared. Calling IOResult clears the internal error flag.
Ob das Dein Problem behebt habe ich nicht überprüft.
[edit]
const Datenpfad='Schueler.dta';
hier vielleicht einen absoluten Pfad zur Datei angeben.
[edit2]
Delphi-Quellcode:
procedure TForm1.ButtonAuslesenClick(Sender: TObject); //Datenbank laden
var i:integer;
begin
i:=1;
Assignfile (f,Datenpfad);
{$I-} reset(f) {$I+}
if Kontrolle then
begin
while not eof(f) do
begin
read(f, Datensatz[i]);
inc(i);
end;
end;
closefile (f);
end;
end;
Grüße
Klaus