我有用作用户前端(UI)的Access,我们称之为Acc1。
Acc1,链接到SQL Server上的表。
从Acc1我想调用存储过程,我们称之为SP1。
SP1,是链接服务器中表的简单选择。链接服务器是一个只有表的Access数据库。我们称之为DB Acc2。
注意:将来SP1将查询更复杂的查询,该查询将使用来自Acc2和SQL Server数据库的表。现在作为第一步,我想执行这个简单的选择查询。
当我在SP1中对SQL Server表中的表进行简单的Select查询时,尝试从Acc1中调用它,这是有效的。
当我尝试在SP1中查询链接服务器表并尝试从Acc1调用它时,它失败并显示错误:
当我从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。
非常感谢您的帮助!
答案 0 :(得分:1)
答案很简单。当SP1从Acc1运行时,SQL Server使用Acc1的权限。因此,当尝试使用Acc1的权限从Acc2查询SP1表时,这会失败。