AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi finally wird nach exit nicht abgearbeitet
Thema durchsuchen
Ansicht
Themen-Optionen

finally wird nach exit nicht abgearbeitet

Ein Thema von messie · begonnen am 10. Dez 2012 · letzter Beitrag vom 11. Dez 2012
Antwort Antwort
Seite 1 von 2  1 2      
messie

Registriert seit: 2. Mär 2005
Ort: Göttingen
1.592 Beiträge
 
Delphi 2009 Professional
 
#1

finally wird nach exit nicht abgearbeitet

  Alt 10. Dez 2012, 09:50
Moin,

was habe ich da denn falsch gemacht?

Wenn ich mit Exit den Block verlassen möchte, wird die finally-Anweisung übersprungen
Ein LoadFromDB liefert false. Danach möchte ich abbrechen und die Transaction abschließen.
Das passiert aber nicht. In einem "normalen" Beispiel geht es. Eine Exception habe ich nicht.
Gibt es irgendwelche Compilerdirektiven, die das beeinflussen?

Grüße, Messie

Code:
var
  idx : integer;
  s : string;
begin
  Result := False;
  try
    try
      while not DM.IBCQuery1.Eof do
      begin
         //irgendwelche DB-Queries
         // 
       
        if not (LoadAFromDB(idx) and
               LoadBFromDB(idx)) then
        begin
          result := False; // hier komme ich raus
          exit;
        end;
        DM.IBCQuery1.Next;
      end;
      DM.IBCTransaction1.Commit;
      Result := True;
    except
      Result := False;
    end;
  finally
    DM.IBCTransaction1.Active := False;
  end;
end;

Geändert von messie (10. Dez 2012 um 09:51 Uhr) Grund: Semikolon ergänzt
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#2

AW: finally wird nach exit nicht abgearbeitet

  Alt 10. Dez 2012, 10:03
Komische Sache. Nur sone Idee, aber probier die Geschichte doch testweise bitte mal ohne den inneren try .. except Block.
Projekte:
- GitHub (Profil, zyantific)
- zYan Disassembler Engine ( Zydis Online, Zydis GitHub)
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.537 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: finally wird nach exit nicht abgearbeitet

  Alt 10. Dez 2012, 10:09
Und wenn Du vor dem exit ein Rollback machst? Und hast Du einmal einen Haltepunkt in den finally-Block gesetzt? Der sollte nämlich auch bei einem exit immer ausgeführt werden.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.332 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: finally wird nach exit nicht abgearbeitet

  Alt 10. Dez 2012, 10:16
Hast du mal mit OutputDebugMessage oder ShowMessage geprüft, wo du lang kommst? Sprich, ob du vor dem Exit ankommst, in dem Finally, ...
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
messie

Registriert seit: 2. Mär 2005
Ort: Göttingen
1.592 Beiträge
 
Delphi 2009 Professional
 
#5

AW: finally wird nach exit nicht abgearbeitet

  Alt 10. Dez 2012, 10:19
Und hast Du einmal einen Haltepunkt in den finally-Block gesetzt? Der sollte nämlich auch bei einem exit immer ausgeführt werden.
Eben darum ging es. Jetzt habe ich mehr Quelltext in den finally-block gesetzt und es geht. Merkwürdig. Ist ein D6-Projekt von 2005, das verhält sich manchmal komisch.

Danke, Messie
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.332 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: finally wird nach exit nicht abgearbeitet

  Alt 10. Dez 2012, 12:29
Dann war die Unit vermutlich nicht neu kompiliert worden. Das sieht man normalerweise aber an den blauen Punkten links ganz gut.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#7

AW: finally wird nach exit nicht abgearbeitet

  Alt 11. Dez 2012, 14:05
Also mir scheint der ganze Code etwas strukturlos zu sein.
Im Prinzip muss eine Transaktion so ablaufen:
Delphi-Quellcode:
Connection.BeginTrans; // Schreibweise hängt von den Zugriffskomponenten ab
try
  DoWork;
  Connection.CommitTrans;
except
  Connection.RollbackTrans;
end;
Dabei ist es sehr sinnvoll für DoWork tatsächlich eine Prozedure zu verwenden.
Man trennt so die eigentliche Arbeit von der Transaktionssteuerung.
Das heisst also entweder wird in DoWork eine Exception geworfen => dann erfolgt ein Rollback.
Oder es wird keine Exception geworfen => dann erfolgt kein Rollback sondern ein Commit.
Möchte man innerhalb der Procedure abbrechen, dann kann man z.B. einfach Abort aufrufen.
Andreas
  Mit Zitat antworten Zitat
jsheyer

Registriert seit: 9. Jun 2005
Ort: Jüchen
79 Beiträge
 
Delphi 10.4 Sydney
 
#8

AW: finally wird nach exit nicht abgearbeitet

  Alt 11. Dez 2012, 14:28
Hallo,

vielleicht bin ich ja gerade im falschen Film, aber wird mit exit, nicht direkt die ganze procedure verlassen und daher greift das nicht??
Ich hätte an der Stelle ja auch ein break; benutzt um nur die while Schleife zu beenden.
Ansonsten stimme ich natürlich messie zu

LG
Jörg
Jörg Heyer
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.332 Beiträge
 
Delphi 11 Alexandria
 
#9

AW: finally wird nach exit nicht abgearbeitet

  Alt 11. Dez 2012, 14:32
vielleicht bin ich ja gerade im falschen Film, aber wird mit exit, nicht direkt die ganze procedure verlassen und daher greift das nicht??
Ja, bist du.
Finally-Blöcke werden trotz Exit oder einer Exception abgearbeitet, genau dafür sind sie da: Um immer abgearbeitet zu werden um aufzuräumen, egal was passiert ist.
Sebastian Jänicke
Alle eigenen Projekte sind eingestellt, ebenso meine Homepage, Downloadlinks usw. im Forum bleiben aktiv!
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.116 Beiträge
 
Delphi 12 Athens
 
#10

AW: finally wird nach exit nicht abgearbeitet

  Alt 11. Dez 2012, 14:41
Ein "Exit" zwischen Try-Finally/Except löst eine Stille Exception aus, ähnlich dem Abort.
Damit rauscht der Exit-Aufruf durch alle Finally-Blöcke durch, bis hin zum END der Prozedur/Funktion, wo diese Exit-Exception in einem impliziten Try-Finally dann abgefangen und die Prozedur verlassen wird.

Also ja, Exit führt auch die Finallies us.


- ohne Try-Except/Finally ist es ein JUMP zum Prozedur-Ende
- mit Try-Except/Finally ist es eine "Exception"
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (11. Dez 2012 um 14:44 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:10 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