Entwickler-Ecke
Sonstiges (Delphi) - TList Fehler?
DelphiBoon - Mo 07.03.05 12:37
Titel: TList Fehler?
Hallo,
ich habe eine TList erstellt und füge in diese Datenobjekte ein vom Typ CBook.
Delphi-Quelltext
1: 2:
| buecher := TList.Create(); buecher.Add(buch); |
Nun will ich ein Buch über seine ID löschen.
Klappt aber nicht. Kommt immer die Meldung das n Zugriffsfehler kommt.
Die ID ist ein Index aus einem StringGrid. Habe ich gerad n Brett vorm Kopf oder gibt es da wirklich nen Fehler meinerseits?
Moderiert von
UGrohne: Delphi-Tags hinzugefügt.
Lossy eX - Mo 07.03.05 12:55
n = ein? Denke ich doch mal. ;-)
Also normal sollte das so gehen. Was kommt denn bitte genau für ein Fehler? Eine Zugriffsverletzung deutet normal darauf hin, dass du auf etwas zugreifst was nicht mehr existiert. Zum Beispiel das evtl. nicht mehr existierende Objekt in der Liste. Das Löschen alleine ist ungefährlich, da nicht auf das Objekt zugegriffen wird sondern nur seine Adresse gelöscht wird. Wenn aber auf das objekt zugegriffen werden würde, dann knallt es. Evtl kann es ja auch sein, dass du deine Liste vorher schon freigegen hast und somit auf eine ungültige Liste zugreifst. Zur Not würde uns auch ein wenig mehr Code helfen.
DelphiBoon - Mo 07.03.05 13:03
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:
| constructor CBuchliste.Create(ptitel : String; pautor : String; pverlag : String; pinhalt : String; ppreis : Real;pstatus : Boolean; pisbn : String; pregkey : String; pid : Integer); var buch : Cbuch; begin buecher := TList.Create(); buch := CBuch.Create(ptitel,pautor,pverlag,pinhalt,ppreis,pstatus,pisbn,pregkey,pid); buecher.Add(buch); end;
function CBuchliste.getBookList() : TList; begin result := buecher; end;
procedure CBuchliste.addBook(buch : CBuch); begin buecher.Add(buch); end;
procedure CBuchliste.deleteBook(id : Integer);
begin buecher.Delete(id-1); end; |
Das ist meine Unit für die Bücherliste.
Eskommt immer "Der Index der Liste überschreitet das Maximum(1)." Wenn ich jetzt das erste Element aus der Liste löschen will und nur ein Element drinsteht.
Moderiert von
Tino: Delphi-Tags hinzugefügt.
wdbee - Mo 07.03.05 13:32
Die Fehlermeldung besagt, dass du einen Index angibst, den es in der Liste nicht (oder nicht mehr gibt).
Prüf doch mal nach, ob deine Zählung stimmt. Also erster Eintrag in der Liste ist Index 0.
Der TList.Add-Aufruf gibt übrigens den Index zurück, und nur der ist richtig.
Analog wird es bei dem Stringrid sein. Erster Eintrag hat Index 0. Löscht du dann evt. den Eintrag -1 oder so etwas in der Art?
Und dann noch: Durch ein Delete ändern sich die Index-Werte aller verbleibenden Einträge nach dem gelöschten! Deshalb fällst du mit Delete wahrscheinlich auf den Bauch, weil dein Stringrid nicht mehr zur Liste passt. Schau dir deshalb statt Delete(Index: Integer) mal Remove(Item: Pointer) an.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!