从MS Access调用存储过程会导致错误3146

时间:2018-09-08 09:22:11

标签: sql-server vba ms-access

当我使用下面显示的代码从MS Access前端调用SQL Server存储过程时,它将停止运行并抛出运行时错误“ 3146”。

此存储过程在SQL Server中正常运行,但是当我从MS Access运行时,它首先运行,但是突然停止并抛出运行时错误“ 3146”。

为了获得更大的权限,此存储过程用于在MS Access中将记录插入空表中时,它应该插入1000条记录,但是会插入970条记录,然后停止。

我的存储过程有一个用于插入记录的选择查询,现在我已将这个简单的选择查询更改为联合查询,因为我在存储过程的设计中对此进行了更改,使其在SQL Server中可以正常工作

Public Sub Command0_Click()
    Dim qdef As DAO.QueryDef
    Set qdef = CurrentDb.CreateQueryDef("")

    qdef.Connect = CurrentDb.TableDefs("[ASBUILT_LIST]").Connect
    qdef.SQL = "EXEC Update_Asbuilt2"
    qdef.ReturnsRecords = False  ''avoid 3065 error
    qdef.Execute
    qdef.Close

    Set qdef = Nothing
End Sub

1 个答案:

答案 0 :(得分:2)

如果它运行了,但是一直到最后,这可能不是权限问题,而是超时问题

您可以执行:

debug.print qdef.ODBCTimeout 

了解您当前的超时值是什么。

然后只需增加足够的秒数即可完成存储过程:

Public Sub Command0_Click()
    Dim qdef As DAO.QueryDef
    Set qdef = CurrentDb.CreateQueryDef("")

    qdef.Connect = CurrentDb.TableDefs("[ASBUILT_LIST]").Connect
    ' --------------- Define TimeOut in Seconds ----------------
    qdef.ODBCTimeout = 2000 
    ' ----------------------------------------------------------        
    qdef.SQL = "EXEC Update_Asbuilt2"
    qdef.ReturnsRecords = False  ''avoid 3065 error
    qdef.Execute
    qdef.Close

    Set qdef = Nothing
End Sub