comunicout: ACCESS + VB +ORACLE + TRANSACTION

guten tag,
ich sitze mittlerweile schon fast die ganze woche an einem für mich mittlerweile aussichtslos wirkendem problem. tausende an faq's und forenbeiträge konnten mir hierbei nicht weiterhelfen. daher hoffe ich hier vielleicht eine hilfe zu bekommen:

ich habe ein projekt mit ms access realisiert. die daten beziehe ich aus einer oracle datenbank via odbc. nun gibt es ein formular, welches sich auf insgesamt 6 tabellen und einem view bezieht. ich möchte, dass der user die möglichkeit hat, seine seit anfang der session geänderten daten rückgängig zu machen. und bei oracle gibt es ja dieses schöne 'transaction' dafür. also starte ich beim aufruf des formulars eine transaktion:

___codeschnipsel___start
Private Sub Form_Load()
    Set wrkODBC = CreateWorkspace("ODBCWorkspace", "cdb", _
        "usr", dbUseODBC)
    Workspaces.Append wrkODBC
    DefaultType = dbUseJet
    wrkODBC.BeginTrans
End Sub
___codeschnipsel___end

und beim betätigen des "undo"-buttons geschieht ein rollback

___codeschnipsel___start
Private Sub cmdUndo_Click()
  Set wrkODBC = CreateWorkspace("ODBCWorkspace", "cdb", _
      "usr", dbUseODBC)
  Workspaces.Append wrkODBC
  DefaultType = dbUseJet
  wrkODBC.Rollback
End Sub
___codeschnipsel___end

doch leider geschieht bei dem rollback nichts. aber wirklich gar nichts. syntaktisch ist alles korrekt, zumindest gibt es keine fehlermeldungen und kompilieren kann ich es auch.
---------------------
hat irgendwer sich vielleicht schonmal damit beschäftigt ? wenn ja, dann wäre ich ihm/ihr sehr dankbar, wenn er/sie mich an dem wissen teilhaben lassen würde...

thx a lot

mfg
christopher

  1. Hallo,

    ___codeschnipsel___start
    Private Sub Form_Load()
        Set wrkODBC = CreateWorkspace("ODBCWorkspace", "cdb", _
            "usr", dbUseODBC)
        Workspaces.Append wrkODBC
        DefaultType = dbUseJet
        wrkODBC.BeginTrans
    End Sub
    ___codeschnipsel___end

    und beim betätigen des "undo"-buttons geschieht ein rollback

    ___codeschnipsel___start
    Private Sub cmdUndo_Click()
      Set wrkODBC = CreateWorkspace("ODBCWorkspace", "cdb", _
          "usr", dbUseODBC)
      Workspaces.Append wrkODBC
      DefaultType = dbUseJet
      wrkODBC.Rollback
    End Sub
    ___codeschnipsel___end

    Hm, nicht, dass ich sowas schon mal gemacht hätte, aber sollte nicht bei Undo_Click der Wokspace wrkODBC noch existieren, den Du bei Form_Load erstellt hast, und sollte nicht _dieser_ zurückgerollt werden, statt eines völlig neuen, den Du bei Undo_Click erst erzeugst?

    Private Sub cmdUndo_Click()
       wrkODBC.Rollback
    End Sub

    viele Grüße

    Axel

    1. hi,
      danke erstmal für deine Antwort.
      das klingt korrekt. habe ich auch schon ausprobiert, allerdings
      meckert er dann, dass ich die transaktion nicht beenden kann, da
      ich zuvor erst eine starten muss... Und die wurde ja eigentlich
      schon beim laden der form gestartet, aber irgendwie peilt access
      das wohl nicht. dann habe ich mir gerade die von ms mitgelieferte
      datenbank "nordwind" mal angeschaut.. Aus der hilfe den quelltext
      für ein rollback (speziell für nordwind, copy/paste) geholt, ihn in
      die form gepackt und ausprobiert... Aber selbst bei der unktioniert
      es nicht. ist noch nicht mal odbc.. also eigentlich der einfachste
      fall. deprimierend ganz einfach...
      Aber deine idee ist denk ich mal schon richtig, but...

      thx
      mfg
      christopher

      1. Hallo,

        Aber deine idee ist denk ich mal schon richtig, but...

        Naja, ich denke mal, das Workspace-Objekt muss erhalten bleiben, also irgendwie global definiert werden. Allerdings gibt es da ja offensichtlich eine Auflistung, zu der Du es hinzufügts. Probiers doch mal so:

        Private Sub Form_Load()
            Set wrkODBC = CreateWorkspace("ODBCWorkspace", "cdb", _
                "usr", dbUseODBC)
            Workspaces.Append wrkODBC
            DefaultType = dbUseJet
            wrkODBC.BeginTrans
        End Sub

        Hier wurde der Auflistung Workspaces der Workspace mit dem Namen "ODBCWorkspace" hinzugefügt. Dieser hat eine Transaktion begonnen.

        Private Sub cmdUndo_Click()
            Set wrkODBC = Workspaces("ODBCWorkspace")
            wrkODBC.Rollback
        End Sub

        Hier wird der Workspace wieder aus der Auflistung gelesen. Das sollte dann ja noch der selbe sein.

        viele Grüße

        Axel

        1. Ne, leider auch nicht !?
          Aber nochmals besten dank

          mfg
          christopher

  2. Hi,

    ___codeschnipsel___start
    Private Sub Form_Load()
        Set wrkODBC = CreateWorkspace("ODBCWorkspace", "cdb", _
            "usr", dbUseODBC)
        Workspaces.Append wrkODBC
        DefaultType = dbUseJet
        wrkODBC.BeginTrans
    End Sub
    ___codeschnipsel___end

    und beim betätigen des "undo"-buttons geschieht ein rollback

    ___codeschnipsel___start
    Private Sub cmdUndo_Click()
      Set wrkODBC = CreateWorkspace("ODBCWorkspace", "cdb", _
          "usr", dbUseODBC)
      Workspaces.Append wrkODBC
      DefaultType = dbUseJet
      wrkODBC.Rollback
    End Sub
    ___codeschnipsel___end

    warum nimmst Du keinen "form-globalen" Workspace (doppeltes "Create" bringt kein Glueck.)? btw - Nimm doch einfach den Standard-Workspace und ein "form-globales" Connection-Objekt.

    Eventuell musst Du auch sicherstellen, dass die tran in ein und derselben Verbindung begonnen und committed wird.

    Gruss,
    Lude