我正在运行MS Access 2016通过ODBC连接到SQLServer 2016.我有一个基于链接表的简单表单。当我在窗体视图中显示它时,更改一些数据,然后单击下一条记录,它会更新当前记录并移动到下一条记录,但是当我使用组合框选择要移动的记录时 - 它会显示记录I&# 39;已选择,如果我更改了一些数据 - 它返回错误 ' 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,它会显示有一个进程块 - 但为什么,有人可以帮助我吗?
答案 0 :(得分:1)
我们刚刚在带有SQL后端的Access系统中遇到了一个类似的问题,该系统似乎间歇性地超时,这似乎是随机的,这也确实是一个组合框问题:
我们继承了此系统,原始开发人员将使用组合框查找等效的ID文本,然后从标签中引用该组合框。这意味着,例如,在“销售线”表单上有一个隐藏的组合,其中包含整个“库存”表,只是为了获得库存商品的名称。
该组合似乎已经锁定了整个“库存”表并阻止了插入/更新/删除。
我们可以始终如一地执行以下操作以说明问题:
我们通过创建一个对库存表的SQL直通查询并将其用作组合中的记录源来解决此问题,而不是像以前一样使用对SQL数据库中的库存表的Access链接表。这样做停止了表锁定的发生。
答案 1 :(得分:0)
正如您已经注意到使用记录选择器时表单/表格关系正常 - 然后整个事情归结为组合框。我要做的第一件事就是从头开始创建一个新的。当你这样做时 - 确保关键字段是第一列,并成为组合框的绑定值。这是它本来想要设置的方式 - 但只要确保就是这种情况。