Einzelnen Beitrag anzeigen

DAVKO

Registriert seit: 7. Dez 2011
14 Beiträge
 
#28

AW: Schule Adressbuch

  Alt 8. Dez 2011, 21:23
so mal die geaenderte version als anhang.

hab folgendes problem.

auch wenn er keine fehler anteigt, geht das programm nicht richtig. er speichert nix sondern zeigt nur eine ehlermeldung an. habt ihr da eine erklärung?
kann wer helfen?

Delphi-Quellcode:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Edit4: TEdit;
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Button4: TButton;
    Button5: TButton;
    Button6: TButton;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Edit5: TEdit;
    Label5: TLabel;
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure Button6Click(Sender: TObject);
    procedure Button5Click(Sender: TObject);
    procedure positionieren(datensatz: integer);
    procedure Button7Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

type
  Adresse = record
    Vorname: string[50];
    Nachname: string[50];
    Wohnort: string[100];
    Alter: integer;
    Geburtstag: string[50];
  end;

var datei: file of Adresse;



implementation

{$R *.dfm}

 procedure TForm1.FormCreate(Sender: TObject);
var path: String;
begin
  path := ExtractFilePath(ParamStr(0));
  AssignFile(datei, path+'adressen.dat');
  if FileExists(path+'adressen.dat') then ReSet(datei)
  else ReWrite(datei);
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  CloseFile(datei);
end;

procedure TForm1.positionieren(datensatz: integer);
var aktdatensatz: Adresse;
begin
  if (datensatz<0) or (datensatz>=FileSize(datei)) then
    exit
  else
  begin
    seek(datei, datensatz);
    read(datei, aktdatensatz);
    edit1.text:=aktdatensatz.Vorname;
    edit2.text:=aktdatensatz.Wohnort;
    edit3.text:=IntToStr(aktdatensatz.Alter);
    edit4.text:=aktdatensatz.Geburtstag;
    edit5.text:=aktdatensatz.Nachname;
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  positionieren(0);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  positionieren(FilePos(datei)-2);
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
  positionieren(FilePos(datei));
end;

procedure TForm1.Button4Click(Sender: TObject);
begin
  positionieren(FileSize(datei)-1);
end;

procedure TForm1.Button5Click(Sender: TObject);
const
  BufferSize = 32;
var
  Buffer: array[0..BufferSize - 1] of Adresse;
  i, p: integer;
begin
  Seek(datei,0);
  p:=0;
  while not eof(datei) do
  begin
    Read(datei, Buffer[p]);
    inc(p);
  end;
  CloseFile(datei);
  Buffer[p+1].Vorname:='';
  Buffer[p+1].Wohnort:='';
  Buffer[p+1].Alter:=0;
  Buffer[p+1].Geburtstag:='';
  Buffer[p+1].Nachname:='';
  ReWrite(datei);
  for i:=0 to p do
  begin
    write(datei, Buffer[i]);
  end;
  positionieren(FileSize(datei)-1);
end;


procedure TForm1.Button7Click(Sender: TObject);
var datensatz: Adresse;
    nr: integer;
begin
  Seek(Datei,FilePos(Datei)-1);
  nr:=FilePos(datei);
  datensatz.Vorname:=Edit1.Text;
  datensatz.Wohnort:=Edit2.Text;
  datensatz.Alter:=StrToIntDef(Edit3.Text, -1);
  datensatz.Geburtstag:=Edit4.Text;
  datensatz.Nachname:=Edit5.Text;
  write(datei,datensatz);
  positionieren(nr);
end;

procedure TForm1.Button6Click(Sender: TObject);
const
  BufferSize = 32;
var
  Buffer: array[0..BufferSize - 1] of Adresse;
  i, p: Integer;
  StartRecord, EndRecord: Integer;
  Max: Integer;
begin
  Seek(Datei, FilePos(Datei)-1);
  StartRecord := FilePos(Datei) + 1;
  EndRecord := FileSize(Datei);

  while StartRecord < EndRecord do
  begin
    Max := BufferSize;
    if Max > EndRecord - StartRecord then
      Max := EndRecord - StartRecord;
    Seek(Datei, StartRecord);
    for i := 0 to Max - 1 do
    begin
      Read(Datei, Buffer[i]);
    end;
    Seek(Datei, StartRecord - 1);
    for i := 0 to Max - 1 do
    begin
      Write(Datei, Buffer[i]);
    end;
    inc(StartRecord);
  end;
  Truncate(Datei);
  Positionieren(StartRecord-1);
end;

end.
Angehängte Dateien
Dateityp: rar Adressbuch V1.rar (326,2 KB, 2x aufgerufen)

Geändert von DAVKO ( 8. Dez 2011 um 21:37 Uhr)
  Mit Zitat antworten Zitat