Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Ressourcenschutz wird übergangen (https://www.delphipraxis.net/19277-ressourcenschutz-wird-uebergangen.html)

barnti 31. Mär 2004 13:09


Ressourcenschutz wird übergangen
 
Hi,

habe die folgenden Zeilen:
Delphi-Quellcode:
...
if found then
  try
    // Markieren des akt. Datensatzes
    Bookmark:= Grid.DataSource.DataSet.GetBookmark;
   
    // Filtereigenschaft zurücksetzen
    Grid.DataSource.DataSet.Filter:= FormerFilter;

    // Auf den markierten Datensatz springen
    Grid.DataSource.DataSet.GotoBookmark(Bookmark);   // Hier gibt es die Schutzverletzung
   
    // Bookmark entfernen
    Grid.DataSource.DataSet.FreeBookmark(Bookmark);
  except
    Grid.DataSource.DataSet.Filter:= FormerFilter;
  end;
end;
An der beschriebenen Stelle bricht das Programm mit einer Schutzverletzung ab, ohne in den Resourcenschutzblock
zu springen.

Was mache ich falsch? Warum wird der Except-Teil nicht ausgeführt?
Danke!

shmia 31. Mär 2004 13:23

Re: Ressourcenschutz wird übergangen
 
Zitat:

Zitat von barnti
An der beschriebenen Stelle bricht das Programm mit einer Schutzverletzung ab, ohne in den Resourcenschutzblock zu springen.

Das ist kein Resourcenschutzblock. :!:
Ein Resourceschutzblock hat eine folgende Struktur:
Delphi-Quellcode:
// Resource anfordern (GetBookmark)
try
   // mit Resource arbeiten (GotoBookmark)
finally
   // Resource freigeben (FreeBookmark)
end
Ich würde mal kräftig von Assert Gebrauch machen.

Delphi-Quellcode:
// erst mal prüfen
Assert(Assigned(Grid));
Assert(Assigned(Grid.DataSource));
Assert(Assigned(Grid.DataSource.DataSet));
// jetzt ist alles wasserdicht, der eigentliche Code kann beginnen
siehe auch Delphi Fehlersuche

barnti 31. Mär 2004 13:31

Re: Ressourcenschutz wird übergangen
 
Hi,

hast Recht!
Wie auch immer. Assert liefert mir auch nicht mehr als ich schon weiß! Oder?

Wo die Zugriffsverletzung geschieht weiß ich. Nur warum wird in diesem Fall nicht der der Except-Teil angesprungen?

shmia 31. Mär 2004 13:50

Re: Ressourcenschutz wird übergangen
 
Zitat:

Zitat von barnti
Assert liefert mir auch nicht mehr als ich schon weiß! Oder?

Es beweisst, dass alle Objekte <> nil sind. Andernfalls würde hier
eine Exception erzeugt.
Und zwar bevor das Programm auf eine Zugriffsverletzung läuft.
Natürlich nur, wenn in den Compileroptionen -> Debuggen -> Assertion,
Schalter {$C} gesetzt ist( was zur Fehlersuche zu empfehlen ist :thuimb:)

Zitat:

Zitat von barnti
Wo die Zugriffsverletzung geschieht weiß ich. Nur warum wird in diesem Fall nicht der der Except-Teil angesprungen?

Bevor der Except-Teil betreten wird, wird die Exception zuerst in der IDE angezeigt.
Lässt man das Programm weiterlaufen, kommt man durch den Except-Abschnitt.

MathiasSimmack 31. Mär 2004 13:53

Re: Ressourcenschutz wird übergangen
 
Zitat:

Zitat von barnti
Was mache ich falsch? Warum wird der Except-Teil nicht ausgeführt?

Startest du dein Programm zufälliger Weise aus Delphi heraus (sprich: F9). In dem Fall würde ich mir keinen Kopf machen. Es ist eine Standardeinstellung von Delphi, bei Sprach-Exceptions zu stoppen. Das kann man natürlich auch abschalten.

barnti 31. Mär 2004 14:06

Re: Ressourcenschutz wird übergangen
 
Hi Leute,

die Sprachexceptions sind ausgeschaltet!

Und 'Ja' die betreffenden Objekte sind nicht Nil!

Nachdem die Schutzverletzung ausgelöst wurde, kann ich die Anwendung nicht weiterlaufen lassen. Es wird mir der 'Hex-Viewer' angezeigt. Beim Wiederanstoßen der IDE, wird der Fehler erneut ausgelöst.

SirThornberry 31. Mär 2004 14:11

Re: Ressourcenschutz wird übergangen
 
So wies aussieht wird vermutlich doch der exceptblock ausgeführt. Die erste exception kommt vom Debugger, die zweite vom Programm ansich und dann sollte es normal im except-block weitergehen. Kann natürlich sein das bei accessviolations da nicht reingegangen wird weil es ja eine systemfehlermeldung ist und nicht von ner komponente ausgelöst wird...

barnti 31. Mär 2004 14:16

Re: Ressourcenschutz wird übergangen
 
Hi,
Zitat:

Zitat von SirThornberry
So wies aussieht wird vermutlich doch der exceptblock ausgeführt. Die erste exception kommt vom Debugger, die zweite vom Programm ansich und dann sollte es normal im except-block weitergehen. Kann natürlich sein das bei accessviolations da nicht reingegangen wird weil es ja eine systemfehlermeldung ist und nicht von ner komponente ausgelöst wird...

Da ich im Exception-Block einen Breakpoint gesetzt habe, ist zu sagen: hier kommt die Ausführung nie an...

Wahrscheinlich hast Du Recht. Es ist keine 'normale' Zugriffsverletzung.

SirThornberry 31. Mär 2004 14:18

Re: Ressourcenschutz wird übergangen
 
Du könntest noch probieren ob Application.OnException funktioniert

barnti 31. Mär 2004 14:34

Re: Ressourcenschutz wird übergangen
 
Hi,
Zitat:

Zitat von SirThornberry
Du könntest noch probieren ob Application.OnException funktioniert

werde ich machen aber nicht mehr heute. Werde morgen wieder hier sein...

Danke erstmal!


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:42 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