我正在运行MS Access 2016通过ODBC连接到SQLServer2016。我有一个基于链接表的简单表单。当我以表单视图显示它,更改一些数据,然后单击以获取下一个记录时,它会更新当前记录并移至下一个记录,但是当我使用组合框选择要移动的记录时 - 它显示记录i've选择,如果我更改了一些数据 - 它返回错误 'odbc -update在链接表上失败; Microsoft ODBC SQL Server驱动程序查询超时过期(#0)'
我尝试了下面的2种不同的方法,由2个不同组合框的代码
Private Sub cboFindRecord_AfterUpdate()
Dim rst As DAO.Recordset
Set rst = Me.RecordsetClone
rst.FindFirst "Id=" & Nz(Me.cboFindRecord, 0)
If Not rst.EOF Then
Me.Bookmark = rst.Bookmark
End If
rst.Close
Set rst = Nothing
End Sub
Private Sub FindRecord2_AfterUpdate()
Me.txtId.Enabled = True
Me.txtId.Locked = False
Me.txtId.SetFocus
If IsNull(Me.FindRecord2) Then
Exit Sub
End If
DoCmd.FindRecord Me.FindRecord2, acEntire, , acSearchAll, , acCurrent
End Sub
(我在此数据库中的其他形式上有此代码,它们可以使用,但是对于此表,对于此表来说,它没有)
桌子上有500个记录,它似乎是一个阻止问题,而不是超时问题。如果我在SQL Server上运行SP_WHO2,则显示有一个过程块 - 但是为什么有人可以帮助我?
我们刚刚与SQL后端的访问系统遇到了类似的问题,SQL后端似乎是随机的,这也是一个组合框问题:
我们继承了此系统,原始开发人员将使用一个组合框来查找IDS文本等效物,然后从标签中引用该组合框。这意味着,例如,在销售行形式上,有一个隐藏的组合包含整个库存表,只是为了获取库存项目的名称。
该组合似乎一直在锁定整个库存表并防止插入/更新/删除。
我们可以始终如一地做以下内容来说明问题:
- 在系统的一个副本上打开销售线 - 该销售线的组合可以从库存表中查找数据
- 在系统的另一份副本中打开库存项目
- 编辑并保存该库存项目
- 当时显示库存项目挂起的系统
- 然后关闭第一副本上的销售线
- 似乎在库存表上释放锁定,因为库存项目将立即保存第二副本
我们通过创建SQL通过查询到库存表并将其用作组合中的记录源,而不是像以前一样在SQL数据库中的库存表上使用访问链接。这样做阻止了表锁定。
您已经注意到,使用记录选择器时,表单/表关系可以正常工作,然后整个内容都归结为组合框。我要做的第一件事就是简单地从头开始创建一个新的。当您这样做时 - 确保密钥字段是第一列,并成为ComboBox的界值。这是它想要固有设置的方式 - 但请确保是这种情况。