Как выполнить хранимую процедуру из Access, используя связанные таблицы - PullRequest
5 голосов
/ 16 июня 2010

У меня есть база данных Access 2003, которая подключается к блоку SQL Server 2008 через ODBC.Таблицы из SQL Server связаны как связанные таблицы в Access.У меня есть хранимая процедура на SQL Server, которую я пытаюсь выполнить с помощью кода ADO.У меня проблема в том, что Access не может найти процедуру.Что мне нужно сделать в Access, чтобы выполнить эту хранимую процедуру?Некоторые факты ...

Рассматриваемая хранимая процедура принимает один параметр, который является целым числом.Хранимая процедура возвращает набор записей, который я надеюсь использовать в качестве источника данных для ListBox.

Вот мой код ADO в Access ...

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

Я получаю ошибку "ядру базы данных Microsoft Jet не удается найти входную таблицу или запрос «uspGetUserCaseSummaryList».

1 Ответ

7 голосов
/ 16 июня 2010

CurrentProject.Connection - это подключение к вашей базе данных Access.Это можно проверить, выполнив это в окне Immediate:

Debug.Print CurrentProject.Connection

Вам необходимо создать новый объект ADODB.Connection со строкой соединения, которая указывает на ваш экземпляр SQL Server.Пусть объект 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

Пример строки подключения, которая соответствует вашим потребностям, можно найти на ConnectionStrings.com

...