Thema: Delphi IB-Transaktionen

Einzelnen Beitrag anzeigen

Albi

Registriert seit: 4. Mai 2003
Ort: Berlin
458 Beiträge
 
Delphi 7 Professional
 
#21

Re: IB-Transaktionen

  Alt 27. Feb 2005, 16:29
Es spielt keine Rolle ob du 1 oder 2 Transaktionen für lesen und schreiben verwendest. Wenn Du aber die Sperrmechanismen der IB nutzt wirst Du merken, da du diese mit per Hand/Code verwalten must.

Bsp. Nehmen wir an du hast 5 User und du benutzt den IdleTimer und hast den Trans-Editor auf "write consistency" gesetzt. Dann must du dich darum kümmern, den IdleTimer wieder zurückzusetzen, da ansonsten nach einer bestimmten Zeit die Daten gespeichert o. verloren gehen. Vergiesst Du den Schreibschutz rauszunehmen stehen die anderen User auf dem Schlauch, da sie an die Daten nicht rankommen, da Du ja noch einen X-Lock auf der DB hast.

Aus diesem Grunde habe ich 2 Transactionen, eine zum lesen und eine zum schreiben, einfach nur um die Fehler gleich im Vorfeld auzuschließen. Ich gehe damit sogar noch weiter, ich fülle in meinem Prog CBoxen mit Werten aus der DB und sogar dafür habe ich meine eigene Transaction.

Es geht hier also nicht um sinnvoll oder nicht sinnvoll, sondern vorrangig - in meinem Fall - Fehler in der Programmierung zu vermeiden. Wenn es dir besser gefällt Quake, dann kannst Du weiterhin nur eine Transaction für jedes Form nehmen.

Das ist in meinen Augen auch kein Problem, wie schon gesagt, muss das jeder für sich entscheiden ob er es braucht oder nicht.

Ich habe mir diese nur aus einem Buch abgeschaut und komme so gut damit zu recht.

Zitat von Jelly:

Zitat von Quake:
-Transaktion 1 wird gestartet
-Daten wedern gelesen
-Transaktion 1 wird beendet
-Daten werden bearbeitet
-Transaktion 2 wird gestartet
-Daten werden geschrieben
-Transaktion wird beendet
Das ist so falsch. Nach Beenden von Transaktion 1 können keine Daten bearbeitet werden, und dann erst die Transaktion 2 gestartet werden. Änderungen an Daten passieren im Falle von Interbase IMMER innerhalb einer Transaktion.
Da versteh ich jetzt nicht. Wieso soll das nicht gehen, du hohlst den DS aus der DB schreibst sie in Edits und kannst die Transaction schließen. Dann änderst Du die Daten speicherst sie. Schlecht sieht es nur aus, wenn die Datenmenge mehr als ein DS zurück gibt, dann sollte man die Tansaction schon offen lassen.

Zitat von Quake:
Dann nehme ich eine IBQuary, IBTable oder IBSQL und weise ihnen die Database incl. Transaktion zu. Was ist jetzt aber unübersichtlich?
Wenn Du eine große Anwendung hast, wie Kiar schon geschrieben hast, weißt Du irgendwann nicht mehr welchen Zustand deine Transaction hat. Das kannst Du zwar mit einem SoftCommit umgehen aber das Müllt Dir nur die DB zu, irgendwann wird sie so langsam sein, dass sich fast nichts mehr bewegt. Also ab und zu richtig Hard-Commiten und die DB zu reinigen.
Gruß

Albi
  Mit Zitat antworten Zitat