如何使用链接表从Access执行存储过程

web*_*orm 5 ms-access stored-procedures ado access-vba

我有一个Access 2003数据库,通过ODBC连接到SQL Server 2008框.SQL Server中的表在Access中作为链接表连接.我在SQL Server上有一个存储过程,我试图通过ADO代码执行.我遇到的问题是Access似乎无法找到该过程.在Access中我需要做什么才能执行此存储过程?一些事实......

有问题的存储过程接受一个整数参数.存储过程返回一个记录集,我希望将其用作ListBox的数据源.

这是Access中的ADO代码...

Private Sub LoadUserCaseList(userID As Integer)

  Dim cmd As ADODB.Command

  Set cmd = New ADODB.Command
  cmd.ActiveConnection = CurrentProject.Connection
  cmd.CommandType = adCmdStoredProc
  cmd.CommandText = "uspGetUserCaseSummaryList"

  Dim par As New ADODB.Parameter
  Set par = cmd.CreateParameter("userID", adInteger)
  cmd.Parameters.Append par
  cmd.Parameters("userID") = userID

  Dim rs As ADODB.Recordset
  Set rs = cmd.Execute()
  lstUserCases.Recordset = rs

End Sub
Run Code Online (Sandbox Code Playgroud)

我得到的错误是"microsoft jet数据库引擎无法找到输入表或查询"uspGetUserCaseSummaryList".

Han*_*sUp 7

CurrentProject.Connection是与Access数据库的连接.您可以通过在立即窗口中执行此操作来验证:

Debug.Print CurrentProject.Connection
Run Code Online (Sandbox Code Playgroud)

您需要使用指向SQL Server实例的连接字符串创建新的ADODB.Connection对象.让您的ADODB.Command对象使用该连接.

编辑:您可以消除ADODB.Command对象,并使用连接的Execute方法返回存储过程中的记录.此示例使用存储过程,该过程需要3个参数.

Private Sub GetCenterCodes()
    Dim cnn As ADODB.Connection
    Dim rs As ADODB.Recordset

    Set cnn = New ADODB.Connection
    cnn.ConnectionString = "Provider=SQLOLEDB;Data Source=VM2003\sqlexpress;" _
        & "User ID=foo;Password=bar;Initial Catalog=Inventory"
    cnn.Open
    Set rs = New ADODB.Recordset
    Set rs = cnn.Execute("EXEC uspGetCenterCodes 14, 14, 501")
    Debug.Print rs(0), rs(1), rs(2)
    rs.Close
    Set rs = Nothing
    cnn.Close
    Set cnn = Nothing
End Sub
Run Code Online (Sandbox Code Playgroud)

您可以在ConnectionStrings.com上找到符合您需求的连接字符串示例