Einzelnen Beitrag anzeigen

Klaus01
Online

Registriert seit: 30. Nov 2005
Ort: München
5.767 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: Einfaches Abspeichern in externer Datei // Schülerverwal

  Alt 22. Sep 2009, 22:21
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
Klaus
  Mit Zitat antworten Zitat