从访问调用使用链接服务器的存储过程

时间:2015-01-13 23:09:30

标签: sql-server-2008 stored-procedures ms-access-2010 linked-server

我有用作用户前端(UI)的Access,我们称之为Acc1。

Acc1,链接到SQL Server上的表。

从Acc1我想调用存储过程,我们称之为SP1。

SP1,是链接服务器中表的简单选择。链接服务器是一个只有表的Access数据库。我们称之为DB Acc2。

注意:将来SP1将查询更复杂的查询,该查询将使用来自Acc2和SQL Server数据库的表。现在作为第一步,我想执行这个简单的选择查询。

当我在SP1中对SQL Server表中的表进行简单的Select查询时,尝试从Acc1中调用它,这是有效的。

当我尝试在SP1中查询链接服务器表并尝试从Acc1调用它时,它失败并显示错误:

enter image description here

当我从SQL Server运行此SP1时,它正在运行。

任何想法为什么会发生?我该怎么办?

以下是代码:

SP1:

ALTER PROC [dbo].[spSpanDates_BMPWorkFlowSpanCounts]
AS
BEGIN
    SELECT *
    FROM 
    [Supplemental_Form_master_tables]...[tblBPMWorkflows]
END

Acc1中的代码:

Private Sub Button_BPMStartEndDatesALL_Click()
Dim qdf As DAO.QueryDef, rst As DAO.Recordset
Dim FindRecordCount  As Long
Set qdf = CurrentDb.CreateQueryDef("")
qdf.Connect = "ODBC;DRIVER={sql server};DATABASE=PLMScheduling; SERVER=USCLES425\INST2; Trusted_Connection=Yes;"
qdf.sql = "EXEC dbo.spSpanDates_BMPWorkFlowSpanCounts"
qdf.ReturnsRecords = True
Set rst = qdf.OpenRecordset(dbOpenSnapshot)
If rst.EOF Then
    FindRecordCount = 0
Else
    rst.MoveLast
    FindRecordCount = rst.RecordCount
End If
rst.Close
Set rst = Nothing
Set qdf = Nothing

End Sub

我正在使用SQL Server 2008和Access 2010。

非常感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

答案很简单。当SP1从Acc1运行时,SQL Server使用Acc1的权限。因此,当尝试使用Acc1的权限从Acc2查询SP1表时,这会失败。