Autor Beitrag
Arkathor
Hält's aus hier
Beiträge: 5



BeitragVerfasst: Sa 13.11.10 20:49 
Hallo
Ich habe einen Problem,ich soll bis Dienstag einen kleinen DatenBank machen, der 6 eidits (name, vorname, geburts datum itp.), 5 buttons (Eintragen, speichern, Laden, löschen) und einen StringGrid hat. Eintragen soll die Daten von Edits in Array speichern, sie dabei alphabetisch sortieren und dabei soll er diese Daten i den StringGrid einfügen, speichern soll eine Datei erzeugen und die Daten dort speichern, laden soll sie laden und anzeigen und löschen soll einen konkreten datensatz aus dem array löschen und alle nach vorne verschieben. Naja ich bin beim Eintragen stehen gebieleben, da ich eine solche fehlermeldung kriege [url=img577.imageshack.us/i/fehlermeldung.png/]user defined image[/URL] ich habe das Programm schritt für schritt ablaufen lassen und die Fehler Meldung bekomme ich ganz am Ende von Procedure EintragenButtonKlick. Kann mir jemand erklären, was bedeutet dieses Felher und wie man ihn beheben könnte?
Unterhalb mein bisheriger queltext.

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:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
124:
125:
126:
127:
128:
129:
130:
131:
132:
133:
134:
135:
136:
137:
138:
139:
140:
141:
142:
143:
144:
145:
146:
147:
148:
149:
150:
151:
152:
153:
154:
155:
156:
157:
158:
159:
160:
161:
162:
163:
164:
165:
166:
167:
168:
169:
170:
171:
172:
173:
174:
175:
176:
177:
178:
179:
180:
181:
182:
183:
184:
185:
186:
187:
188:
189:
190:
191:
192:
193:
194:
195:
type
  TPerson  = Record
            FName:String[50];
            Vorname:String[50];
            Alter:Byte;
            Geburtsdatum:String[10];
            StrNr:String[50];
            Plz:Integer;
            Ort:String[50];
            Geschlecht:String[1];
    end;

  TGruppe = Array of TPerson;
    TForm1 = class(TForm)
    FNameEd: TEdit;
    StrNrEd: TEdit;
    VornameEd: TEdit;
    NameLb: TLabel;
    VornameLb: TLabel;
    StrNrLb: TLabel;
    OrtEd: TEdit;
    OrtLb: TLabel;
    GeburtsdatumEd: TEdit;
    GebDatLb: TLabel;
    GeschlechtEd: TEdit;
    GeschlechtLb: TLabel;
    PLZLb: TLabel;
    PLZEd: TEdit;
    AlterEd: TEdit;
    AlterLb: TLabel;
    EintragenBt: TButton;
    SpeichernBt: TButton;
    LadenBt: TButton;
    AnzeigeStrGr: TStringGrid;
    EndeBt: TButton;
    procedure FormCreate(Sender: TObject);
    procedure SpeichernBtClick(Sender: TObject);
    procedure LadenBtClick(Sender: TObject);
    procedure EintragenBtClick(Sender: TObject);
    procedure EndeBtClick(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;
  Gruppe:TGruppe;
  Person:TPerson;
  Datei:File of TPerson;
  i:integer;

implementation

{$R *.DFM}

procedure StringGrindIni;
begin
         with Form1.AnzeigeStrGr do
         begin
         cells[0,0]:='Name';
         cells[1,0]:='Vorname';
         cells[2,0]:='Alter';
         cells[3,0]:='Str./Nr.';
         cells[4,0]:='Ort';
         cells[5,0]:='Geschlecht';
         cells[6,0]:='Geburtsdatum';
         cells[7,0]:='PLZ';
         cells[8,0]:='Nr';
         end;

end;
procedure leeren;
begin
    Form1.FNameEd.text:='';
    Form1.VornameEd.text:='';
    Form1.AlterEd.text:='';
    Form1.GeburtsdatumEd.text:='';
    Form1.GeschlechtEd.text:='';
    Form1.OrtEd.text:='';
    Form1.StrNrEd.text:='';
    Form1.PlzEd.text:='';
end;

procedure initial;
var x:integer;
begin
    For x:=1 to Length(Gruppe) do
    with Gruppe[x] do
         begin
         FName:='';
         Vorname:='';
         Alter:=0;
         Geburtsdatum:='';
         StrNr:='';
         Ort:='';
         Geschlecht:='';
         end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
i:=0;
StringGrindIni;
initial;
leeren;
end;


procedure Fuellen;
var x:integer;
begin
For x:=i to i do
begin
with Form1.AnzeigeStrGr do
    begin
    Form1.AnzeigeStrGr.cells[0,x]:=gruppe[x].FName;
    Form1.AnzeigeStrGr.cells[1,x]:=gruppe[x].Vorname;
    Form1.AnzeigeStrGr.cells[2,x]:=inttostr (gruppe[x].Alter);
    Form1.AnzeigeStrGr.cells[3,x]:=gruppe[x].StrNr;
    Form1.AnzeigeStrGr.cells[4,x]:=gruppe[x].Ort;
    Form1.AnzeigeStrGr.cells[5,x]:=gruppe[x].Geschlecht;
    Form1.AnzeigeStrGr.cells[6,x]:=gruppe[x].Geburtsdatum;
    Form1.AnzeigeStrGr.cells[7,x]:=inttostr (gruppe[x].PLZ);
    end;
    Form1.AnzeigeStrGr.RowCount:=i;
    end;
end;




procedure TForm1.SpeichernBtClick(Sender: TObject);
begin
assignfile(Datei,'Daten.dat');
{$I-}
seek(datei,Filesize(Datei));
{$I+}
   If IOResult <>0 then
   rewrite(Datei);
   For i:=1 to i do
   begin
   write(Datei,Gruppe[i]);
   end;
closefile(Datei);
end;

procedure TForm1.LadenBtClick(Sender: TObject);

var j:integer;
begin
assignfile(Datei,'Daten.dat');
{$I-}
  reset(Datei);
{$I+}
   j:=1;
   if IOResult<>0 then
   showmessage('Datei liegt auffinfbar');
   While not EOF(Datei) do
begin
     read(Datei,Person);
     Gruppe[j]:=Person;
     j:=j+1;
end;
i:=Filepos(Datei);
closefile(Datei);
end;

procedure TForm1.EintragenBtClick(Sender: TObject);
begin
     i:=i+1;
     SetLength(Gruppe,i);
     FNameEd.SetFocus;
     with gruppe[i] do
     begin
          FName:=FNameEd.text;
          Vorname:=VornameEd.text;
          Alter:=strtoint (AlterEd.text);
          StrNr:=StrNrEd.text;
          Ort:=OrtEd.text;
          Geschlecht:=GeschlechtEd.text;
          Geburtsdatum:=GeburtsdatumEd.text;
          Plz:=strtoint (PlzEd.text);
     end;
     Fuellen;
     leeren;
end;

procedure TForm1.EndeBtClick(Sender: TObject);
begin
close;
end;

end.
elundril
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3747
Erhaltene Danke: 123

Windows Vista, Ubuntu
Delphi 7 PE "Codename: Aurora", Eclipse Ganymede
BeitragVerfasst: Sa 13.11.10 21:14 
ich weiß nicht ob das mit deinem Problem zusammenhängt, aber bei der procedure fuellen:
ausblenden Delphi-Quelltext
1:
for x := i to i					


ist das dein ernst? wie oft glaubst du läuft die durch. (das problem könnte sein, weil du von 0 bis i-1 laufen musst in der schleife. sonst greifst du auf eine Arrayitem zu das gar nicht existiert.)

lg elundril

Tante Edith sagt:

da hier gleich der nächste Codeausschnitt der weh tut!
ausblenden Delphi-Quelltext
1:
2:
3:
4:
   For i:=1 to i do
   begin
   write(Datei,Gruppe[i]);
   end;

_________________
This Signature-Space is intentionally left blank.
Bei Beschwerden, bitte den Beschwerdebutton (gekennzeichnet mit PN) verwenden.
Gerd Kayser
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 632
Erhaltene Danke: 121

Win 7 32-bit
Delphi 2006/XE
BeitragVerfasst: Sa 13.11.10 21:31 
user profile iconelundril hat folgendes geschrieben Zum zitierten Posting springen:
da hier gleich der nächste Codeausschnitt der weh tut!
Da fallen noch andere Stolpersteine auf, u. a.:
PLZ sollte als string[10] definiert sein, weil sonst führende Nullen wegfallen und Postleitzahlen bis zu 10 Zeichen lang sein können. Siehe: de.wikipedia.org/wiki/Postleitzahl
Außerdem sollte man packed records verwenden.