Autor Beitrag
padawan
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 35
Erhaltene Danke: 1



BeitragVerfasst: Fr 12.11.10 17:55 
Hallo Delphi-Freunde!

Ich Nix mehr verstehn..:

Per ListView(9 Spalten) liste ich versch. Daten, klappt alles bestens.

Nach dem Löschen eines Eintrags
Der gelöschte Datensatz(Record) wird in der Datei nicht gelöscht,
sondern das 8. Bit von BitMaske(Word-Variable im Record) gesetzt- Add(BitMaske, 255)

Das Neu-Listen der ListView soll nur bei NICHT-gesetztem 8.Bit erfolgen,
so werden die gelöschten Einträge nicht angezeigt- so denke ich.
Quittung = Name von Record

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
if (Quittung.BitMaske < 255then
   with Listview1.Items.Add do
        begin
        Caption := DateToStr(Quittung.Datum0);
        SubItems.Add(s[0]);
        //... usw
        end;


Auch die Abfrage:
ausblenden Delphi-Quelltext
1:
if (Quittung.BitMaske And 255) = 0 then					

erzeugt einen Absturz.

Mit dieser if-Abfrage stürzt das Prog ab mit der Meldung-
habe Foto darüber im Dateianhang.

Habe versuchsweise eine 2. ListView platziert, um nur
die gelöschten Daten zu listen. Da klappt es:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
if (Quittung.BitMaske >= 255then
   with Listview2.Items.Add do
        begin
        Caption := DateToStr(Quittung.Datum0);
        SubItems.Add(s[0]);
        //...
        end;


Weiß nicht mehr weiter.?:
Wenn ich da einen Tip bekommen könnte, wäre toll!!!

Gruß Uli
Einloggen, um Attachments anzusehen!
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19315
Erhaltene Danke: 1747

W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Fr 12.11.10 18:41 
user profile iconpadawan hat folgendes geschrieben Zum zitierten Posting springen:
Mit dieser if-Abfrage stürzt das Prog ab mit der Meldung-
habe Foto darüber im Dateianhang.
Du kannst in der Meldung auch einfach Strg + C drücken um diese als Text zu kopieren. ;-)

Eine Zugriffsverletzung an einer solchen Stelle ist jedenfalls in der Regel eine Folge davon, dass ein Objekt nicht initialisiert wurde. Quittung wird vermutlich nil sein.

Setze doch einfach einen Haltepunkt auf die Zeile und schau nach was los ist. ;-)
padawan Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 35
Erhaltene Danke: 1



BeitragVerfasst: Fr 12.11.10 20:03 
Naja, wie ich schon geschrieben habe, geht die gleiche Geschichte wunderbar,
wenn es nur nicht um die ListView1 geht, bei ListView2 klappt es fehlerfrei.

Nun, ich versuche es mal weiter.
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 07:20 
user profile iconpadawan hat folgendes geschrieben Zum zitierten Posting springen:
Der gelöschte Datensatz(Record) wird in der Datei nicht gelöscht,
sondern das 8. Bit von BitMaske(Word-Variable im Record) gesetzt- Add(BitMaske, 255)

Wenn Du das erste Bit als Bit 0 bezeichnest, dann hat das 8. Bit den Wert 256, ansonsten den Wert 128, wenn das 1. Bit als Bit 1 bezeichnet wird. Aber niemals den Wert 255.
Setzen von Bit 8:
ausblenden Delphi-Quelltext
1:
BitMaske or 256					

Auslesen mit:
ausblenden Delphi-Quelltext
1:
BitMaske and 256					
padawan Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 35
Erhaltene Danke: 1



BeitragVerfasst: Mi 17.11.10 16:18 
Ja richtig!
Bei 255 sind alle Bits gesetzt.
War mein Denkfehler.

Vielen Dank!!!