Microsoft Access中的事务,错误3034

时间:2014-05-15 07:20:45

标签: vba transactions ms-access-2010

我遇到了Access 2010的问题。

我使用事务将我的修改封装在一个表单中。此事务在Form_Load()子目录中启动。

Private Sub Form_Load()
  Debug.Print "Right here"
  DAO.DBEngine.Workspaces(0).BeginTrans
  Debug.Print "Here too"
...
End Sub

所以事务是在第一行开始的(之前没有其他任何东西运行,Debug.Print就在这里向你显示通过该行运行的代码)。 当我点击“保存”或“回滚”按钮时,我运行了这样的代码:

Private Sub BtnSauvegarder_Click()
    DAO.DBEngine.Workspaces(0).CommitTrans dbForceOSFlush
    DoCmd.OpenForm "F_ListeDemande", acNormal, , , acFormEdit, acWindowNormal
    DoCmd.Close acForm, Me.name
End Sub

就在这里我得到了错误3034,包括保存或回滚代码(类似)

但是,最奇怪的事情就在这里:当我进入表格时,我的列表框很烦人,里面什么都没有。如果我进入设计视图,什么都不做,然后进入普通视图,一切运行正确:列表框有他们应该有的Recordset,交易正常。

这不是我第一次使用交易,我在其他表格上使用相同的方法没有任何问题。

那么我做错了什么?

编辑:
我使用此代码输出DAO.DBEngine的当前状态,以防它有用。

Public Sub DebugDBEngine()
    Dim ws As Workspace
    Dim db As Database
    Dim p As Property

    For Each ws In DAO.DBEngine.Workspaces
        Debug.Print "Workspace : " & ws.name

        For Each p In ws.Properties
            On Error Resume Next
            Debug.Print "|  " & p.name & " = " & p.value
        Next

        For Each db In ws.Databases
            Debug.Print "|  Database : " & db.name

            For Each p In db.Properties
                On Error Resume Next
                Debug.Print "|  |  " & p.name & " = " & p.value
            Next
        Next
    Next
End Sub

所以我在事务开始后使用它,输出是这样的:

Workspace : #Default Workspace#
|  Name = #Default Workspace#
|  UserName = admin
|  IsolateODBCTrans = 0
|  Type = 2
|  Database : H:\Projet\05\15\10h28 - Suivi commande et fournisseur.accdb
|  |  Name = H:\Projet\05\15\10h28 - Suivi commande et fournisseur.accdb
|  |  Connect = 
|  |  Transactions = True
|  |  Updatable = True
|  |  CollatingOrder = 1036
|  |  QueryTimeout = 60
|  |  Version = 14.0
|  |  RecordsAffected = 0
|  |  ReplicaID = 
|  |  DesignMasterID = 
|  |  ANSI Query Mode = 0
|  |  Themed Form Controls = 1
|  |  AccessVersion = 09.50
|  |  NavPane Category = 0
|  |  UseMDIMode = 0
|  |  ShowDocumentTabs = True
|  |  Build = 24
|  |  HasOfflineLists = 70
|  |  Picture Property Storage Format = 0
|  |  CheckTruncatedNumFields = 1
|  |  ProjVer = 119
|  |  NavPane Closed = 0
|  |  NavPane Width = 226
|  |  NavPane View By = 0
|  |  NavPane Sort By = 1
|  |  Show Navigation Pane Search Bar = 0
|  |  WebDesignMode = 0
|  |  Theme Resource Name = Thème Office
|  |  Property Sheet Label Width = 2820
|  |  StartUpShowDBWindow = True
|  |  StartUpShowStatusBar = True
|  |  AllowShortcutMenus = True
|  |  AllowFullMenus = True
|  |  AllowBuiltInToolbars = True
|  |  AllowToolbarChanges = True
|  |  AllowSpecialKeys = True
|  |  UseAppIconForFrmRpt = False
|  |  AllowDatasheetSchema = True
|  |  DesignWithData = True
|  |  Show Values Limit = 1000
|  |  Show Values in Indexed = 1
|  |  Show Values in Non-Indexed = 1
|  |  Show Values in Remote = 0
|  |  Auto Compact = 0
|  |  Track Name AutoCorrect Info = 0
|  Database : H:\Projet\05\15\10h28 - Suivi commande et fournisseur.accdb
|  |(same things as above, it is the same database)

因此,同一个DB打开两次。我验证:事务正确运行的位置,只打开了一个DB。

EDIT2:
我用这个调试再次测试进入普通视图,然后设计然后正常。第一次,我得到了上面的输出。第二次,没有第二个相同的数据库是相同的,有一个DB是juste。
所以现在,我确定问题是他们打开了两个数据库。我必须找到的是为什么它打开两次相同的数据库。

1 个答案:

答案 0 :(得分:0)

经过艰苦的搜索,我可能发现了问题。
在“设计”视图中,我将一些查询设置为“列表框”以填充它们。它使用一个数据库来完成它。
在我的VBA代码中,我使用Recordset来填充Listboxes。他们使用另一个数据库,即使它是相同的 所以我的解决方案很简单:我没有在Design视图中定义rowsource,因此只有VBA才会填充Listbox。