![]() |
Datenbank: FB • Version: 2.0 • Zugriff über: IBDAC
IBDAC AutoCommit klappt nicht
Hallo #,
ich setze Connection.Autocommit auf True Query.Open; Query.Close; Connection.InTransaction ist True ??? Wozu gibt es dann das AutoCommit ? Hier etwa auch so beschreiben ![]() Kann das jemand bestätigen ? Gibt es einen WorkAround ? Heiko |
AW: IBDAC AutoCommit klappt nicht
Ja, der Thread im IBDAC Forum stammt von mir. :-D
Verwende normal IBObjects, aber für ein Projekt verwendeten wir IBDAC. Von IBO kommend, ist die Ganze AutoCommit Sache in IBDAC für mich etwas "seltsam", da es AutoCommit Properties an unterschiedlichen Stellen gibt (Connection, Query ...) IBDAC ist jetzt schon wieder etwas her bei mir, aber ich nehme mal an, dass Connection.InTransaction ja global der Connection ist, d.h. wenn andere Transaktionen/Queries, die an dieser Connection hängen, eine Transaktion gestartet haben, dann wird Connection.InTransaction wohl True sein. Wir hatten auch in früheren Version angemerkt, dass es etwas unlogisch ist, dass zwar bei einer Connection bzw. Query ein AutoCommit Property verfügbar ist, allerdings nicht auf TIBCTransaction Ebene. Hat sich aber vielleicht mittlerweile geändert. Edit: Sonst wirf einfach mal ein Tracing/Monitoring an, dann siehst du, was genau passiert. |
AW: IBDAC AutoCommit klappt nicht
Hallo Thomas,
ja der Thread ist von dir ;) der Breakpoint steht genau hinter dem Query.Close Da ich keine andere Query benutze, ist der Fehler also immer noch da (Version 3.10). Es ist ein Fehler, das Gefasel (*böse bin*) von dem IBDAC von wegen Abwärtskompatibel ist Unsinn. Wenn sie es so nicht ändern wollen, sollen Sie halt ein StrictAutoCommit einführen (ähnlich wie TStringList.StrictDelimiter). #Update:'# Das mit dem AutoCommit für beide setzen hatte ich überlesen, mal ausprobieren. Klaptp aber trotzdem nicht. Query und DataBase haben das AutoCommit auf True, dann sollte noch dem Query.Close die Transaction commited sein, ist sie aber nicht. Heiko |
AW: IBDAC AutoCommit klappt nicht
Vermutlich wird im Hintergrund CommitRetaining aufgerufen, was bedeutet, dass die Transaktion eigentlich noch/wieder aktiv ist. Darum auch mein Hinweis mal ein Monitoring/Tracing anzuwerfen, damit man sieht, was im Hintergrund passiert. IBDAC hat hierfür den DBMonitor oder wenn du Firebird 2.5 einsetzt, die neue Trace API mit *Werbetrommel* unserem FB TraceManager (
![]() Edit: Was passiert wennst ein Query.Unprepare machst? |
AW: IBDAC AutoCommit klappt nicht
Hallo #,
Werbung ist angekommen ;) Will schon lange wieder ne neue IBExpert + das schicke Tracing haben *zum Chef wink* Das Unprepare hilft nicht. Es liegt wohl am CommitRetaining. Das Monitoring muss ich in der App erst mal einbauen (ich weiss, wie ich das mache). Heiko |
AW: IBDAC AutoCommit klappt nicht
Oder es wird automtisch eine neue Transaktion gestartet
|
AW: IBDAC AutoCommit klappt nicht
Hallo,
oder so, eher wahrscheinlich ist das CommitRetaining Bringt mir aber nix ;) ;( Heiko |
AW: IBDAC AutoCommit klappt nicht
Was passiert, wennst die Transation der Query explizit committest?
AutoCommit heisst ja nur, dass automatisch ein Commit durchgeführt wird und im Falle von InterBase/Firebird realisieren das die Komponentenhersteller in der Regel so, dass eben ein CommitRetaining ausgeführt wird, was wiederum auf Dauer schlecht für die Transaktionsstatistiken ist (gstat -h). Ausgenommen es handelt sich um eine Read-Only Transaktion im ReadCommitted Isolation-Level. Das hat bei langlaufenden Transaktionen keine negativen Auswirkungen auf die Transaktionsstatistiken. |
AW: IBDAC AutoCommit klappt nicht
Hallo,
Transaktion commiten genau das will ich ja verhindern, Stichwort AutoCommit-BDE. Heiko |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:02 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 by Thomas Breitkreuz