SQLdb Query option sqoAutoCommit Verhalten

Für Themen zu Datenbanken und Zugriff auf diese. Auch für Datenbankkomponenten.
Antworten
Benutzeravatar
af0815
Lazarusforum e. V.
Beiträge: 6198
Registriert: So 7. Jan 2007, 10:20
OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
CPU-Target: 32Bit (64Bit)
Wohnort: Burgenland
Kontaktdaten:

SQLdb Query option sqoAutoCommit Verhalten

Beitrag von af0815 »

Die Info ist vielleicht interessant für wen, der sich mit Stored Procedures oder Function auf einem DB-Server interessiert.

Wenn ich mit Open ein Execute-Statement ausführe, weil in der Stored Procedure Daten geändert werden und ein Recordset zurückkommt, so gibt es Besonderheiten zu beachten (länge Diskussion mit MvC zu dem Thema).

Setzt man die Option sdoAutoCommit, so fuktioniert die NICHT wie gewünscht. sdoAutoCommit funktioniert nur mit Datssets die mit Post, Delete oder Insert in der Query behandelt wurden. Beim Open mit EXECUTE im SQL bleibt eine 'hängende' Transaction bestehen und eure Daten sind nur scheinbar geändert. Schliesse ich die Verbindung jetzt, so wird ein implizites Rollback durchgeführt und die Änderungen sind am Ar...h. Ein reines Close der Query reicht nicht aus, weil dieses nicht die erzeugte globale Transaktion abschliesst.

Ich bin scheinbar nicht der einzige der darüber gestolpert ist, nur habe ich das Verhalten mal untersucht und bin zuerst am falschen Pferd gesessen. Ich dachte ein ApplyUpdates macht es gut. Das stimmt nur teilweise, weil das ApplyUpdates macht ein implizites Commit. Und nur diese Commit hat gefehlt.

Konklusio: Wenn man mit Stored Procedures (oder Functionen, bzw. alles was kein Post auslöst) arbeiten, so MUSS MAN die Transaktionen selbst in die Hand nehmen.

Wie gesagt auch mir mich als Erinnerung hier im Forum.
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).

Antworten