Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Kontaktprogramm, Probleme beim Dateiladen (https://www.delphipraxis.net/106287-kontaktprogramm-probleme-beim-dateiladen.html)

Damaster 8. Jan 2008 15:40


Kontaktprogramm, Probleme beim Dateiladen
 
Hallo Leute!

Ich habe mal wieder Probleme mit einem Projekt für die schule. Kann mir vll jemand helfen?

Delphi-Quellcode:
implementation

{$R *.dfm}

type TMensch= record name,vname,tel,handy,email,ort,strasse,post,icq:string[100];
              end;
var typ:array of TMensch;
     i:integer;
     pr:boolean;

procedure TForm1.FormCreate(Sender: TObject);
var f:file of tmensch;
l:integer;
begin
pr:=true;
i:=1;
end;


procedure TForm1.Button1Click(Sender: TObject);
var
d,a:integer;
begin
pr:=false;
a:=0;
setlength(typ,i);
   with typ[i-1] do begin
      name:=Edit2.text;
      vname:=Edit1.text;
      Ort:=Edit4.text;
      Handy:=Edit9.text;
      Tel:=Edit8.text;
      icq:=Edit7.text;
      Strasse:=Edit5.text;
      Post:=Edit3.text;
      email:=Edit6.text;
      end;
   inc(i);
   Form1.Leeren;
   Edit1.SetFocus;
end;


procedure TForm1.Button2Click(Sender: TObject);
var s:integer;
begin
Listbox1.clear;
   for s:=1 to i-1 do begin
      with typ[s-1] do begin
         with listbox1.Items do begin
            add('Vorname: '+vname);
            add('Name: '+name);
            add('Adresse: ');
            add('Postleitzahl: '+post);
            add('Ort: '+ort);
            add('Straße: '+strasse);
            add('Kontaktinformationen: ');
            add('E-Mail: '+email);
            add('ICQ: '+icq);
            add('Telefon: '+tel);
            add('Handy: '+handy);
            add('------------------------------------------------------');
         end;
      end;
   end;
end;


procedure TForm1.Leeren;
var a:integer;
begin
   for a := 1 to 9 do begin
      with TEdit(findcomponent('Edit'+inttostr(a))) do
         text := '';
   end;
end;


procedure TForm1.Restart1Click(Sender: TObject);
begin
   Listbox1.clear;
   Form1.Leeren;
   Edit1.SetFocus;
   i:=1;
end;


procedure TForm1.Ende1Click(Sender: TObject);
begin
if pr=true then close else showmessage('Es wurde nicht gespeichert');
end;



procedure TForm1.Button3Click(Sender: TObject);
var a:integer;
begin
Listbox1.clear;
if radiobutton1.Checked then for a:=low(typ) to high(typ) do
if typ[a].name=Edit10.Text then
begin
 with typ[a] do begin
         with listbox1.Items do begin
            add('Vorname: '+vname);
            add('Name: '+name);
            add('Adresse: ');
            add('Postleitzahl: '+post);
            add('Ort: '+ort);
            add('Straße: '+strasse);
            add('Kontaktinformationen: ');
            add('E-Mail: '+email);
            add('ICQ: '+icq);
            add('Telefon: '+tel);
            add('Handy: '+handy);
            add('------------------------------------------------------');
         end;
      end;
end;
if radiobutton2.Checked then for a:=low(typ) to high(typ) do
if typ[a].vname=Edit10.Text then
begin
 with typ[a] do begin
         with listbox1.Items do begin
            add('Vorname: '+vname);
            add('Name: '+name);
            add('Adresse: ');
            add('Postleitzahl: '+post);
            add('Ort: '+ort);
            add('Straße: '+strasse);
            add('Kontaktinformationen: ');
            add('E-Mail: '+email);
            add('ICQ: '+icq);
            add('Telefon: '+tel);
            add('Handy: '+handy);
            add('------------------------------------------------------');
         end;
      end;
end;
if radiobutton3.Checked then for a:=low(typ) to high(typ) do
if typ[a].post=Edit10.Text then
begin
 with typ[a] do begin
         with listbox1.Items do begin
            add('Vorname: '+vname);
            add('Name: '+name);
            add('Adresse: ');
            add('Postleitzahl: '+post);
            add('Ort: '+ort);
            add('Straße: '+strasse);
            add('Kontaktinformationen: ');
            add('E-Mail: '+email);
            add('ICQ: '+icq);
            add('Telefon: '+tel);
            add('Handy: '+handy);
            add('------------------------------------------------------');
         end;
      end;
end;
end;

procedure TForm1.Speichern1Click(Sender: TObject);
 var t:file of Tmensch;
 g:integer;
begin
if savedialog1.Execute then
                       begin
                        assignfile(t,savedialog1.FileName+copy(savedialog1.Filter,12,4));
                        if fileexists(savedialog1.FileName) then begin
                                                                 deletefile(savedialog1.FileName);
                                                                 rewrite(t);
                                                                 for g:=0 to high(typ) do
                                                                 write(t,typ[g]);
                                                                 closefile(t);
                                                                 pr:=true;
                                                                 end
                         else begin
                               rewrite(t);
                               for g:=0 to high(typ) do
                               write(t,typ[g]);
                               closefile(t);
                               pr:=true;
                              end;
end;
end;

procedure TForm1.Laden1Click(Sender: TObject);
var t:file of Tmensch;
var x: tmensch;
g:integer;
begin
if pr= false then showmessage('Bitte zuerst speichern');
if opendialog1.Execute then begin
if fileexists(opendialog1.filename) then begin
pr:=false;
assignfile(t,opendialog1.filename);
reset(t);
seek(t,0);
g:=0;
while not(eof(t)) do begin
read(t,x);
typ[g]:=x;
inc(g);
end;
closefile(t);
end else exit;
end;
end;

end.
Also mein Problem liegt darin, dass ich ne Fehlermeldung bekomme, wenn ich versuche die datei zu laden. Das speichern klappt ja. Ne datei mit 10 zahlen ,also file of integer, kann ich auch so laden. Nur hier habe ich Probleme.
Kann mir bitte jemand sagen, woran das liegt?
Ich weis der letzte Teil ist noch nicht richtig formatiert und es sind noch globale variabeln drin, aber nur, weil mein infolehrer meinte es würde daran liegen. allerdings quatsch, wie wir bei einem anderen projekt in der schule gemerkt hatten.

Wäre dankbar für eure Hilfe.
MfG
Damaster

DeddyH 8. Jan 2008 15:46

Re: Kontaktprogramm, Probleme beim Dateiladen
 
Du musst die Größe des zu füllenden Arrays zunächst festlegen, bevor Du es befüllst.

mashutu 8. Jan 2008 15:56

Re: Kontaktprogramm, Probleme beim Dateiladen
 
Poste mal die Fehlermeldung. Das mit dem Array ist Quatsch oder habe ich beidem unuebersichtlichen code was uwebersehen?

DeddyH 8. Jan 2008 15:57

Re: Kontaktprogramm, Probleme beim Dateiladen
 
So, Quatsch? Was geschieht denn hier?
Zitat:

Delphi-Quellcode:
g:=0;
while not(eof(t)) do begin
read(t,x);
typ[g]:=x;
inc(g);
end;

[edit] Versuch es mal so:
Delphi-Quellcode:
procedure TForm1.Laden1Click(Sender: TObject);
var t:file of Tmensch;
    x: tmensch;
    g:integer;
begin
  if not pr then begin
    Showmessage('Bitte zuerst speichern');
    exit;
  end;
  if opendialog1.Execute then begin
    if fileexists(opendialog1.filename) then begin
      pr:=false;
      assignfile(t,opendialog1.filename);
      reset(t);
      SetLength(typ,FileSize(t)); //Größe des Arrays an Anzahl der Records anpassen
      seek(t,0);
      g:=0;
      while not(eof(t)) do begin
        read(t,x);
        typ[g]:=x;
        inc(g);
      end;
      closefile(t);
    end;
  end;
end;
[/edit]

Damaster 8. Jan 2008 17:16

Re: Kontaktprogramm, Probleme beim Dateiladen
 
Danke dein Vorschlag hat funktioniert.
Eigentlich hätte es mir auffallen müssen. :gruebel: seis drum, manchmal sieht man den wald vor lauter bäumen nicht :wiejetzt:
Ich musste zwar noch den Rest bei der Ausgabe umschreiben aber jetzt funktioniert alles wie es soll! :thumb:
Ich weis, der code ist och unübersichtlich, das Programm aber auch noch nicht fertig.
Nochmals vielen Dank!
mfg
Damaster


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:16 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz