Entwickler-Ecke

Sonstiges (Delphi) - wo liegt der fehler?


luckyluc - Mi 21.10.09 20:28
Titel: wo liegt der fehler?
hallo
ich bräuchte mal wieder eure Hilfe. Im Anhang findet ihr den entsprechenden Quelltext.
Beim Löschen-Button fkt. das Löschen immer nur in der ersten zeile nicht in den darauffolgenden. warum?
und beim button zum hinzufügen eines datensatzes passiert nichts.
danke im voraus


elundril - Mi 21.10.09 21:54

hier nochmal für jene die nicht extra ne datei runterladen wollen. ;)


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:
procedure TForm1.btn_loeschenClick(Sender: TObject);
var
i: integer;
pos: integer;
begin
  i:= 1;
  pos := FilePos(datei);
  while not eof(datei) do begin
    read(datei,person);
    seek(datei,FilePos(datei)-2);
    write(datei,person);
    read(datei,person);
  end;
  seek(datei,FilePos(datei)-1);
  Truncate(datei);
  seek(datei,pos);
   repeat
    begin
     StringGrid1.Cells [1,i] := Person.Vorname;
     StringGrid1.Cells [2,i] := Person.Nachname;
     inc(i);
   end;
  until eof (datei);
end;



Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
procedure TForm1.btn_hinzufuegenClick(Sender: TObject);
var
i: integer;
begin
 i:= 1;
  repeat
   Person.Vorname:= StringGrid1.Cells [1,i] ;
   Person.Nachname:= StringGrid1.Cells [2,i] ;
   WRITE(datei, person);
   inc (i);
  until eof (datei);
  seek(datei,FileSize(datei));
  write(datei,person);
end;


luckyluc - Do 22.10.09 11:54

liegt das beim löschen vielleicht an der repeat-schleife? denn wenn ich z.b. until i=100 (oder so) setze, dann löscht er alles
beim hinzufügen: das write muss aus der schleife raus oder?


jaenicke - Fr 23.10.09 08:15

Erstens solltest du die Dateivariable lokal deklarieren und nicht global. Dann kannst du die Datei auch an der Stelle öffnen und schließen. So wie du es jetzt hast, benutzt du beim Schreiben einfach die im Moment gesetzte Dateiposition.

Und dann schreibst du bis das Ende der Datei erreicht ist. Warum? Willst du nicht eher solange schreiben wie Datensätze vorhanden sind und das vom Start der Datei aus?

Zudem schreibst du person am Ende doppelt, denn nach der letzten Zuweisung in der Schleife wird dort bereits geschrieben und dann schreibst du danach noch einmal denselben Datensatz.


Narses - Fr 23.10.09 15:28

Moin!

Bitte ändere den Titel des Topics, da er wenig über das eigentlich Thema verrät. Hier der entsprechende Absatz aus den Richtlinien [http://www.entwickler-ecke.de/richtlinien.html]:
1.2 Beiträge:
Bitte formuliere den Betreff Deiner Beiträge so, dass andere Mitglieder anhand dieser bereits das eigentliche Thema festmachen können. Beiträge wie etwa "Eine Anfängerfrage" oder "Weiß jemand, wie das geht?" lassen den Leser im Unklaren darüber, was das Thema der Diskussion ist.[...]

Einfach oben bei Deinem ersten Beitrag auf user defined image oder user defined image klicken und den Titel ändern. Danke Dir!

cu
Narses


Dude566 - Fr 23.10.09 16:07

Bei dem Threadtitel dachte ich schon ich wäre auf der Seite von 9Live gelandet. :D