![]() |
Kontrollierter Programmabruch
Hallöchen,
ich möchte mein Programm gezielt anhalten sobald Fehler auftreten. Da manche Methoden aber sehr komplex sind, stellt sich für mich die Frage wie man dies richtig anstellt. Ein Beispiel : 1.Daten aus DB holen 2.Berechnungen machen 3.Daten in DB schreiben 4.Andere Daten holen aus DB 5.mit berechnungen zusammen fassen 6.Daten wieder DB schreiben 7.Ausdruck erstellen (Report) 8.Ausdrucken 9. Daten in DB schreiben Wenn nun irgendwo ein Fehler auftritt soll am besten die procedure abbrechen und wenn möglich vorangegange wieder rückgängig gemacht werden. Wie macht ihr das? |
Re: Kontrollierter Programmabruch
wie wäre es mit
![]() |
Re: Kontrollierter Programmabruch
scheint genau das zu sein was ich suche
gibts da Anwendungsbeispiele für ADO, ausser die in der OH? soweit müsste das ja so gehen transaktionsid erzeugen transaktion starten SQL.text ausführen ergebnis abfragen??? wenn fehler - reagieren?! transaktion stoppen ist das richtig? |
Re: Kontrollierter Programmabruch
fast:
wenn das vernünftig laufe soll, brauchst du eine ordentliche datenbank :-) . aber das ist der ansatz. |
Re: Kontrollierter Programmabruch
Du musst genau diese Struktur einhalten:
Delphi-Quellcode:
ADOConnection.BeginTrans;
try // hier dein ganzer Code ..... ADOConnection.CommitTrans; except ADOConnection.RollbackTrans; raise; end; |
Re: Kontrollierter Programmabruch
Zitat:
welche Daten betrifft das rollback? zwischen begin und commit, also auch mehrere dazwischen? Vielen Dank für eure Tipps! |
Re: Kontrollierter Programmabruch
Commit und Rollback betreffen alle Daten der laufenden Transaktion.
|
Re: Kontrollierter Programmabruch
mit access geht es nur eingeschränkt, denn z.b. wenn der recher ausfällt, kann die db nicht mehr auf den verbindungsabbruch reagieren, und so weiter. deswegen, eingeschränkt.
aber prinzipiell läuft das so ab, (beginntransaction), setzt den startpunkt, nun können alle möglichen datenmodifikationen vorgenommen werden. wenn alles i.o. dann werden die daten mit commit in die datenbank geschrieben, sind irgndwelche fehler aufgetreten (z. b. programm ist abgebrochen, etc. pp.) so wird die transaction bis zum zeitpunkt begintransaction zurückgesetzt. das ist wichtig, damit die daten konsistent bleiben. diese drei befehle gehören seit anbeginn der zeit zum sprachumfang von SQL und jede datenbank welche sql implementiert sollte das eigentlich können. aber wie gesagt, es gibt auch natürliche einschränkungen... und mit 'ner localen DB wirst du nie die sicherheit erreichen wie mit einer eigenen serverinstance, welche auch noch redundant ausgelegt ist. ist aber immer noch besser als darauf zu verzichten oder versuchen es selbst programmieren zu wollen (z. b. mit file of ... und strukturierten typen ;-) ) |
Re: Kontrollierter Programmabruch
Danke für eure Ausführungen.
Wenn nun die nächste sqlanweisung die vorangegangene bedingt ,also erfolgreich sein muss, wie steuert man dies? alle anweisungen in den selben try-Block? und erst wenn alle transaktionen erfolgreich waren ist die gesamte Methode abgeschlossen... |
Re: Kontrollierter Programmabruch
nach dem starttransaction, kannst du einfach in die DB buttern, so wie du lustig bist, erst am schluss entscheidest du, ob die transaction es wert ist in die datenbank geschrieben zu werden (commit) oder nicht (rollback). dabei könnt es auch schon mal vorkommen, dass beim commit mehrere MB zurückgeschrieben oder zurückgesetzt werden, je nach anwendungsfall.
dein try block für die DB ist
Delphi-Quellcode:
db.starttransaction
do_something... db.commit except: db.rollback end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:21 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz