Einzelnen Beitrag anzeigen

jawo3

Registriert seit: 15. Sep 2009
Ort: Niedersachsen
41 Beiträge
 
#10

Re: Einfaches Abspeichern in externer Datei

  Alt 28. Sep 2009, 20:39
Sorry, dass ich mich nicht gemeldet habe.

Also ich habe mal versucht eure Vorschläge mit einzuarbeiten. Wenn ich jetzt allerdings auf das Feld "Datenbank Laden" klicke erhalte ich eine Fehlermeldung in neuem Fenster: "Project raised exception class EInOutError with message 'Read beyond end of file'. Process stopped. Use step or run to continue"

So sieht mein Quelltext jetzt aus:

Delphi-Quellcode:
unit zeugnis;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls;

type
  TForm1 = class(TForm)
    ButtonSpeichern: TButton;
    ButtonAuslesen: TButton;
    ButtonBeenden: TButton;
    EditSNr: TEdit;
    EditName: TEdit;
    EditVorname: TEdit;
    EditGebDat: TEdit;
    EditGebOrt: TEdit;
    EditOrt: TEdit;
    EditKlasse: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    Label6: TLabel;
    Label7: TLabel;
    Label8: TLabel;
    Label9: TLabel;
    ButtonClear: TButton;
    EditDatensatzNr: TEdit;
    Label10: TLabel;
    ButtonSchuelerDaten: TButton;
    Label11: TLabel;
    ButtonEintragSpeichern: TButton;
    procedure ButtonBeendenClick(Sender: TObject);
    procedure ButtonSpeichernClick(Sender: TObject);
    procedure ButtonAuslesenClick(Sender: TObject);
    procedure ButtonClearClick(Sender: TObject);
    procedure ButtonSchuelerDatenClick(Sender: TObject);
    procedure ButtonEintragSpeichernClick(Sender: TObject);
  end;

  tSNr = string[5];
  tName = string[20];
  tVorname = string[15];
  tGebDat = string[10];
  tGebOrt = string[15];
  tOrt = string[15];
  tKlasse = string[4];

  tSchueler = record
        Nr :tSNr; //Schuelernummer bzw. Datensatznummer
        Name :tName; //Schuelername
        Vorname :tVorname; //Schuelervorname
        Geburtsort :tGebOrt; //Geburtsort
        GebDat :tGebDat; //Geburtsdatum
        Ort :tOrt; //Wohnort
        Klasse :tKlasse; //Klasse
  end;
  const Datenpfad='Schueler.dta';

var
  Form1: TForm1;
  Datensatz: array[1..10] of tSchueler; //Array für Schuelerdatensätze
  f: file of tSchueler;

implementation

{$R *.dfm}

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);
          result := true;
        end;
     3: showmessage ('Ungueltiger Dateiname/Pfad');
     5: showmessage ('Dateizugriff verweigert.');
    21: showmessage ('Laufwerk nicht bereit!');
  end;
end;

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 10 do write (f, Datensatz[i]);
    closefile (f);
  end;
end;

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;

procedure TForm1.ButtonEintragSpeichernClick(Sender: TObject); //Schüler-Eintrag speichern
var fehler: boolean; //Wird true gesetzt, wenn ein Eingabefeld leer ist
         i:integer;
begin
fehler:=false;
i:=1;
if length(EditSNr.Text)=0 then fehler:=true
else
begin
  i:=StrToInt(EditSNr.Text);
  if length(EditSNr.Text)<>0 then Datensatz[i].Nr:= EditSNr.Text else fehler:=true;
  if length(EditName.Text)<>0 then Datensatz[i].Name:= EditName.Text else fehler:=true;
  if length(EditVorname.Text)<>0 then Datensatz[i].Vorname:= EditVorname.Text else fehler:=true;
  if length(EditGebOrt.Text)<>0 then Datensatz[i].Geburtsort:= EditGebOrt.Text else fehler:=true;
  if length(EditGebDat.Text)<>0 then Datensatz[i].GebDat:= EditGebDat.Text else fehler:=true;
  if length(EditOrt.Text)<>0 then Datensatz[i].Ort:= EditOrt.Text else fehler:=true;
  if length(EditKlasse.Text)<>0 then Datensatz[i].Klasse:= EditKlasse.Text else fehler:=true;
end;
if fehler=true then showmessage('Bitte füllen Sie alle Felder aus!')
else
  begin
    showmessage('Eintrag erfolgreich gespeichert');
  end;
end;

procedure TForm1.ButtonClearClick(Sender: TObject); //Felder leeren
begin
EditSNr.Text:='';
EditName.Text:='';
EditVorname.Text:='';
EditGebOrt.Text:='';
EditGebDat.Text:='';
EditOrt.Text:='';
EditKlasse.Text:='';
end;

procedure TForm1.ButtonSchuelerDatenClick(Sender: TObject); //Daten zu einem Schüler anzeigen
var i: integer; //Datensatznummer
begin
i:=StrToInt(EditDatensatzNr.Text);
if (length(EditDatensatzNr.Text)<>0) and (length(EditDatensatzNr.Text)<=5) then
begin
  EditSNr.Text:=Datensatz[i].Nr;
  EditName.Text:=Datensatz[i].Name;
  EditVorname.Text:=Datensatz[i].Vorname;
  EditGebOrt.Text:=Datensatz[i].GeburtsOrt;
  EditGebDat.Text:=Datensatz[i].GebDat;
  EditOrt.Text:=Datensatz[i].Ort;
  EditKlasse.Text:=Datensatz[i].Klasse;
end
else showmessage('Bitte eine gültige Datensatz-Nummer eintragen');
end;

procedure TForm1.ButtonBeendenClick(Sender: TObject); //Programm beenden
begin
close;
end;
end.
Ich habe noch nicht ganz verstanden, wie ihr das mit den dynamische Arrays meint. Ich habe jetzt erstaml aus Testzwecken die Schülerzahl auf 10 gesenkt.


Vielen Dank im Voraus
Jan
Jan
  Mit Zitat antworten Zitat