我遇到了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。
所以现在,我确定问题是他们打开了两个数据库。我必须找到的是为什么它打开两次相同的数据库。
答案 0 :(得分:0)
经过艰苦的搜索,我可能发现了问题。
在“设计”视图中,我将一些查询设置为“列表框”以填充它们。它使用一个数据库来完成它。
在我的VBA代码中,我使用Recordset来填充Listboxes。他们使用另一个数据库,即使它是相同的
所以我的解决方案很简单:我没有在Design视图中定义rowsource,因此只有VBA才会填充Listbox。