Autor Beitrag
Chrizzle
Hält's aus hier
Beiträge: 1



BeitragVerfasst: Mi 26.10.11 17:10 
Hi,
wir haben von unserem Lehrer eine "einfache" Aufgabe bekommen, wo der Vor- und Nachname in einer Datei gespeichert werden soll.
Soweit so gut, hab das genau nach der Anleitung von ihm alles geschrieben. Bekomme aber beim compilieren die Fehlermeldung "Typ TAdresse benötigt Finalization". Hab auch schon die Suche benutzt, wo ich fündig gewurden bin, dass das Array nicht so gut mit String Werten arbeiten kann, da die länge undefiniert ist?!
Kann ich nicht einfach Nachname und Vorname im Record als single deklarieren? Müsste dann ja nur in der Methode "einlesen" die single-werte in string umwandeln. Klappt aber alles nicht...

Vielen Dank auf jedenfall schonmal für die Hilfe!


ausblenden volle Höhe Delphi-Quelltext
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:
64:
  TAdresse = record
    Nachname:string;
    Vorname:string;
  end;

  TDatenbank = class
    Einzeladresse: TAdresse;
    Adressen: array of TAdresse;
    Adressdatei:string;

    procedure einlesen(VAR EditNachEin, EditVorEin:TEdit);
    procedure speichern;
  end;

var
  Form1: TForm1;
  DB:TDatenbank;

implementation
{--------------------------METHODEN-------------------------------------------}
  procedure TDatenbank.einlesen(VAR EditNachEin, EditVorEin:TEdit);
  begin
    Einzeladresse.Nachname := EditNachEin.Text;
    Einzeladresse.Vorname := EditVorEin.Text;
  end;

  procedure TDatenbank.speichern;
  VAR
    datei:file of TAdresse;
  begin
    assignfile(datei, Adressdatei);
    if FileExists(Adressdatei) then
    begin
      reset(datei);
      seek(datei, filesize(datei));
    end
    else
    begin
      rewrite(datei);
    end;
    write(datei, Adressdatei);
    closefile(datei);
  end;

{$R *.dfm}

{--------------------------EREIGNIS-------------------------------------------}
procedure TForm1.FormShow(Sender: TObject);
begin
  DB := TDatenbank.Create;
end;


procedure TForm1.ButtonAufnehmenClick(Sender: TObject);
begin
  DB.einlesen(EditNachname, EditVorname);
  if DB.Adressdatei = '' then
  begin
    SaveDialog.Execute;
    DB.Adressdatei:=SaveDialog.Filename;
  end;
  DB.speichern;
end;
end.
jasocul
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 6395
Erhaltene Danke: 149

Windows 7 + Windows 10
Sydney Prof + CE
BeitragVerfasst: Mi 26.10.11 18:24 
Wenn du den Typ auf Single änderst, kannst du nur Zahlen darin speichern. Macht nicht besonders viel Sinn. :wink:
Gib den Strings eine feste Größe. Statt String musst du dann String[50] schreiben, wenn dort maximal 50 Zeichen enthalten sein sollen.
HenryHux
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 542
Erhaltene Danke: 33

Windows 7 Premium
Delphi XE, Eclipse
BeitragVerfasst: Mi 26.10.11 18:24 
Mal ins Blaue geraten:
ausblenden Delphi-Quelltext
1:
Adressen: array of TAdresse;					


Versuch mal mit SetLength dem Array eine Länge zu geben, kann mir nicht vorstellen, dass er eine Datei mit einem Array einer undefinierten Länge schreiben kann.

lg