AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Kontrollierter Programmabruch

Ein Thema von Privateer3000 · begonnen am 26. Sep 2008 · letzter Beitrag vom 26. Sep 2008
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Privateer3000
Privateer3000

Registriert seit: 10. Jun 2002
Ort: Jena
1.128 Beiträge
 
Delphi 10.4 Sydney
 
#1

Kontrollierter Programmabruch

  Alt 26. Sep 2008, 08:37
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?
Peter
+++Versuch es nicht mit Gewalt + Nimm einen größeren Hammer! +++
  Mit Zitat antworten Zitat
grenzgaenger
(Gast)

n/a Beiträge
 
#2

Re: Kontrollierter Programmabruch

  Alt 26. Sep 2008, 09:14
wie wäre es mit Delphi-Referenz durchsuchenTransaktionen ?
  Mit Zitat antworten Zitat
Benutzerbild von Privateer3000
Privateer3000

Registriert seit: 10. Jun 2002
Ort: Jena
1.128 Beiträge
 
Delphi 10.4 Sydney
 
#3

Re: Kontrollierter Programmabruch

  Alt 26. Sep 2008, 09:50
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?
Peter
+++Versuch es nicht mit Gewalt + Nimm einen größeren Hammer! +++
  Mit Zitat antworten Zitat
grenzgaenger
(Gast)

n/a Beiträge
 
#4

Re: Kontrollierter Programmabruch

  Alt 26. Sep 2008, 09:56
fast:
  • eine DB instance erzeugen
  • StartTransaction
  • do whatever you like
  • when OK, .ComitWork
  • wenn fehler .rollback

wenn das vernünftig laufe soll, brauchst du eine ordentliche datenbank . aber das ist der ansatz.
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 16. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#5

Re: Kontrollierter Programmabruch

  Alt 26. Sep 2008, 09:59
Du musst genau diese Struktur einhalten:
Delphi-Quellcode:
ADOConnection.BeginTrans;
try
  // hier dein ganzer Code
  .....
  ADOConnection.CommitTrans;
except
  ADOConnection.RollbackTrans;
  raise;
end;
  Mit Zitat antworten Zitat
Benutzerbild von Privateer3000
Privateer3000

Registriert seit: 10. Jun 2002
Ort: Jena
1.128 Beiträge
 
Delphi 10.4 Sydney
 
#6

Re: Kontrollierter Programmabruch

  Alt 26. Sep 2008, 11:28
Zitat von grenzgaenger:
fast:


wenn das vernünftig laufe soll, brauchst du eine ordentliche datenbank . aber das ist der ansatz.
ich nutze ADO/mdb sollte das gehen?
welche Daten betrifft das rollback?
zwischen begin und commit, also auch mehrere dazwischen?

Vielen Dank für eure Tipps!
Peter
+++Versuch es nicht mit Gewalt + Nimm einen größeren Hammer! +++
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.619 Beiträge
 
Delphi 12 Athens
 
#7

Re: Kontrollierter Programmabruch

  Alt 26. Sep 2008, 11:32
Commit und Rollback betreffen alle Daten der laufenden Transaktion.
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
grenzgaenger
(Gast)

n/a Beiträge
 
#8

Re: Kontrollierter Programmabruch

  Alt 26. Sep 2008, 11:39
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 )
  Mit Zitat antworten Zitat
Benutzerbild von Privateer3000
Privateer3000

Registriert seit: 10. Jun 2002
Ort: Jena
1.128 Beiträge
 
Delphi 10.4 Sydney
 
#9

Re: Kontrollierter Programmabruch

  Alt 26. Sep 2008, 12:24
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...
Peter
+++Versuch es nicht mit Gewalt + Nimm einen größeren Hammer! +++
  Mit Zitat antworten Zitat
grenzgaenger
(Gast)

n/a Beiträge
 
#10

Re: Kontrollierter Programmabruch

  Alt 26. Sep 2008, 12:34
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;
  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 11: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