AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Problem mit dem Speichern von Records

Ein Thema von Damaster · begonnen am 26. Nov 2007 · letzter Beitrag vom 26. Nov 2007
Antwort Antwort
Damaster

Registriert seit: 26. Nov 2007
14 Beiträge
 
#1

Problem mit dem Speichern von Records

  Alt 26. Nov 2007, 20:23
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:
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;
Was mach ich da falsch?
mfg
Damaster
  Mit Zitat antworten Zitat
jbg

Registriert seit: 12. Jun 2002
3.483 Beiträge
 
Delphi 10.1 Berlin Professional
 
#2

Re: Problem mit dem Speichern von Records

  Alt 26. Nov 2007, 20:32
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.
  Mit Zitat antworten Zitat
Damaster

Registriert seit: 26. Nov 2007
14 Beiträge
 
#3

Re: Problem mit dem Speichern von Records

  Alt 26. Nov 2007, 20:39
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?
  Mit Zitat antworten Zitat
26. Nov 2007, 20:39
Dieses Thema wurde von "Matze" von "Programmieren allgemein" nach "Sonstige Fragen zu Delphi" verschoben.
Delphi-Frage
jbg

Registriert seit: 12. Jun 2002
3.483 Beiträge
 
Delphi 10.1 Berlin Professional
 
#5

Re: Problem mit dem Speichern von Records

  Alt 26. Nov 2007, 21:21
Zitat von Damaster:
Oder geht das einfacher?
Length(Typ)
  Mit Zitat antworten Zitat
dominikkv

Registriert seit: 30. Sep 2006
Ort: Gundelfingen
1.109 Beiträge
 
Delphi 2007 Professional
 
#6

Re: Problem mit dem Speichern von Records

  Alt 26. Nov 2007, 21:31
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;
Dominik
Wer anderen eine Grube gräbt, hat ein Gruben-Grab-Gerät!
  Mit Zitat antworten Zitat
Damaster

Registriert seit: 26. Nov 2007
14 Beiträge
 
#7

Re: Problem mit dem Speichern von Records

  Alt 26. Nov 2007, 21:47
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
  Mit Zitat antworten Zitat
dominikkv

Registriert seit: 30. Sep 2006
Ort: Gundelfingen
1.109 Beiträge
 
Delphi 2007 Professional
 
#8

Re: Problem mit dem Speichern von Records

  Alt 26. Nov 2007, 21:59
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
Dominik
Wer anderen eine Grube gräbt, hat ein Gruben-Grab-Gerät!
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:10 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