当我使用下面显示的代码从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
答案 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