保存记录

时间:2017-09-04 04:35:18

标签: sql-server ms-access timeout odbc

我正在运行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,它会显示有一个进程块 - 但为什么,有人可以帮助我吗?

2 个答案:

答案 0 :(得分:1)

我们刚刚在带有SQL后端的Access系统中遇到了一个类似的问题,该系统似乎间歇性地超时,这似乎是随机的,这也确实是一个组合框问题:

我们继承了此系统,原始开发人员将使用组合框查找等效的ID文本,然后从标签中引用该组合框。这意味着,例如,在“销售线”表单上有一个隐藏的组合,其中包含整个“库存”表,只是为了获得库存商品的名称。

该组合似乎已经锁定了整个“库存”表并阻止了插入/更新/删除。

我们可以始终如一地执行以下操作以说明问题:

  • 在系统的一个副本上打开一条销售线-该销售线具有一个组合,可从“库存”表中查找数据
  • 在系统的另一个副本中打开库存项目
  • 编辑并保存该库存项目
  • 此时,显示库存项目的系统挂起
  • 然后关闭第一个副本上的销售线
  • 这似乎释放了对Stock表的锁定,因为库存项目将立即保存在第二个副本中

我们通过创建一个对库存表的SQL直通查询并将其用作组合中的记录源来解决此问题,而不是像以前一样使用对SQL数据库中的库存表的Access链接表。这样做停止了表锁定的发生。

答案 1 :(得分:0)

正如您已经注意到使用记录选择器时表单/表格关系正常 - 然后整个事情归结为组合框。我要做的第一件事就是从头开始创建一个新的。当你这样做时 - 确保关键字段是第一列,并成为组合框的绑定值。这是它本来想要设置的方式 - 但只要确保就是这种情况。