Problem mit dem Speichern von Records
Hallo Leute!
Ich sitze schon fast den ganzen Mittag an meinem Programm zur Verwaltung von Kontakten. Hedoch komm ich mit dem Speichern und VORALLEM mit dem auslesen nicht klar. Wenn ich auslese und versuche den ausgelesenen Inhalt anzuzeigen passiert nichts. Hier mal der code:
Delphi-Quellcode:
Was mach ich da falsch?
type TMensch= record name,vname,tel,handy,email,ort,strasse,post,icq:string[100];
end; var typ:array of TMensch; i:integer; procedure LoadFromFile(Source: string); var f: file of TMensch; m: Cardinal; begin m := 0; try assignFile(f, Source); reset(f); SetLength(typ, FileSize(f)); while not eof(f) do begin read(f, Typ[m]); Inc(m); end; finally closeFile(f); i:=m; end; end; procedure SaveToFile(Dest: string); var f: file of TMensch; m: Cardinal; begin try assignFile(f, Dest); reWrite(f); //oder reset(f) for m := low(typ) to high(typ) do write(f, typ[m]); finally closeFile(f); end; end; procedure TForm1.FormCreate(Sender: TObject); begin Loadfromfile('Kontakte.dat'); end; procedure TForm1.Button1Click(Sender: TObject); var d,a:integer; begin a:=0; if i=0 then i:=1; 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); var t:file of TMensch; k:file; g:integer; begin Listbox1.clear; Form1.Leeren; Edit1.SetFocus; i:=1; assignfile(t,'Kontakte.dat'); rewrite(t); try for g:=low(typ) to high(typ) do write(t,typ[g]); finally Closefile(t); end; assignfile(k,'Anzahl.dat'); rewrite(k,inttostr(i)); closefile(k); end; procedure TForm1.Ende1Click(Sender: TObject); var t:file of Tmensch; g:integer; begin savetofile('Kontakte.dat'); close; 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 ... 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 ... 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 ... end; end; end; end; mfg Damaster |
Re: Problem mit dem Speichern von Records
So auf den ersten Blick würde ich sagen, dass deine globale Variable i (schlechter Stil) den Wert 0 hat und somit die "for s:=1 to i-1 do"-Schleife nichts macht.
|
Re: Problem mit dem Speichern von Records
Werde ich mal überprüfen.
Wundert mich nur, da es ja in der Lade procedure nicht vorkommt. :?: Was meinst du mit schlechtem Stil? Wegen der globalen Deklaration? Die vermeide ich meistens auch, aber hier wäre es eigentlich angenehmer. Sonst müsste man ja immer eine Variable übergeben. Oder geht das einfacher? |
DP-Maintenance
Dieses Thema wurde von "Matze" von "Programmieren allgemein" nach "Sonstige Fragen zu Delphi" verschoben.
Delphi-Frage |
Re: Problem mit dem Speichern von Records
Zitat:
|
Re: Problem mit dem Speichern von Records
Hi
Du solltest dir mal angewöhnen deinen code zu formatieren (zB einrücken), dann fällt einem das debuggen viel einfacher. Ich hab mal ein bisschen in deinem Code rumgeschrieben...
Delphi-Quellcode:
type
TMensch = record name, vname, tel, handy, email, ort, strasse, post, icq: string[100]; end; var typ: array of TMensch; // ... procedure LoadFromFile(Source: string); var f: file of TMensch; m: Cardinal; begin m := 0; try assignFile(f, Source); reset(f); SetLength(typ, FileSize(f)); while not eof(f) do begin read(f, Typ[m]); Inc(m); end; finally closeFile(f); end; end; procedure SaveToFile(Dest: string); var f: file of TMensch; m: Cardinal; begin try assignFile(f, Dest); reWrite(f); //oder reset(f) for m := 0 to high(typ) do write(f, typ[m]); finally closeFile(f); end; end; procedure TForm1.Button1Click(Sender: TObject); begin setlength(typ, Succ(Length(typ))); with typ[high(typ)] 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; Form1.Leeren; Edit1.SetFocus; end; procedure TForm1.Button2Click(Sender: TObject); var s: integer; begin Listbox1.clear; for s := 0 to high(typ) do with typ[s] and 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; procedure TForm1.FormCreate(Sender: TObject); begin Loadfromfile('Kontakte.dat'); end; procedure TForm1.Leeren; var a: integer; begin for a := 1 to 9 do (FindComponent('Edit'+IntToStr(a)) as TEdit).text := ''; end; procedure TForm1.Restart1Click(Sender: TObject); // Sinn ?!? var t: file of TMensch; g: integer; begin Listbox1.clear; Form1.Leeren; Edit1.SetFocus; try assignfile(t, 'Kontakte.dat'); rewrite(t); for g := 0 to high(typ) do write(t, typ[g]); finally Closefile(t); end; end; procedure TForm1.Ende1Click(Sender: TObject); begin savetofile('Kontakte.dat'); close; end; procedure TForm1.Button3Click(Sender: TObject); var a: Integer; begin Listbox1.clear; if radiobutton1.Checked then for a := 0 to high(typ) do if typ[a].name = Edit10.Text then with typ[a] and listbox1.Items do begin // ... end; if radiobutton2.Checked then for a := 0 to high(typ) do if typ[a].vname = Edit10.Text then with typ[a] and listbox1.Items do begin // ... end; if radiobutton3.Checked then for a := 0 to high(typ) do if typ[a].post = Edit10.Text then with typ[a] and listbox1.Items do begin // ... end; end; |
Re: Problem mit dem Speichern von Records
Mit der length Funktion hatte ich es anfangs auch probiert, nur bekam ich dann eine Fehlermeldung.
Length gibt doch die tatsächliche Länge an, fängt also an bei 1 zu zählen oder? Aber wenn ich den Quellcode so lese, dann denk ich eher dass der Pc bei 0 anfängt. Dann hat unser Lehrer sich wohl verschrieben, dann weis ich auch, was mein Problem war. Vielen Dank! Es geht! mfg Damaster |
Re: Problem mit dem Speichern von Records
stell dir ein array wie ein schrank vor:
length liefert die anzahl der schubladen, high die nummer der letzten schublade. da bei (dynamischen) arrays mit 0 angefangen wird zu zählen ist length = high+1 also: length = anzahl elemente high = nummer des letzten elements |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:59 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz