Вот запрос параметра, который я создал и протестировал в Access.
PARAMETERS [@id] Long;
SELECT c.id, c.customer_name
FROM customers AS c
WHERE (((c.id)=[@id]));
Я могу использовать ADO в Excel, чтобы назначить значение для параметра и извлечь набор записей на основе этого запроса.Вот код для нового модуля, который я создал в Excel.
Option Explicit
Public Sub AdoCommandWithParameter()
Const cstrDbPath As String = "C:\share\Access\whiteboard2003.mdb"
'Dim cmd As ADODB.Command '
'Dim cn As ADODB.Connection '
'Dim rs As ADODB.Recordset '
Dim cmd As Object
Dim cn As Object
Dim rs As Object
Dim strConnString As String
Dim strSql As String
strSql = "PARAMETERS [@id] Long;" & vbCrLf & _
"SELECT c.id, c.customer_name" & vbCrLf & _
"FROM customers AS c" & vbCrLf & _
"WHERE (((c.id)=[@id]));"
Debug.Print strSql
strConnString = "Provider=Microsoft.ACE.OLEDB.12.0;" & vbCrLf & _
"Data Source=" & cstrDbPath & ";" & vbCrLf & _
"Mode=Share Deny None;"
'Set cn = New ADODB.Connection '
Set cn = CreateObject("ADODB.Connection")
cn.CursorLocation = 3 ' adUseClient '
cn.Open strConnString
'Set cmd = New ADODB.Command '
Set cmd = CreateObject("ADODB.Command")
cmd.CommandText = strSql
cmd.ActiveConnection = cn
cmd.Parameters("[@id]") = 1
Set rs = cmd.Execute
Debug.Print "RecordCount: " & rs.RecordCount
rs.Close
Set rs = Nothing
Set cmd = Nothing
cn.Close
Set cn = Nothing
End Sub
Измените значение для cstrDbPath , чтобы оно соответствовало местоположению и имени вашего файла базы данных Access.
Самая сложная часть - получить правильную строку подключения.Если у вас возникли проблемы, см. ConnectionStrings.com .
Я написал эту процедуру для использования позднего связывания для ADO.Если вместо этого требуется раннее связывание, вам нужно установить ссылку на доступную версию Библиотека данных Microsoft ActiveX .И переключитесь на строки, которые я закомментировал.
Это строка, в которой вы устанавливаете значение параметра:
cmd.Parameters("[@id]") = 1
Измените его, указав желаемое значение;мы не знаем, откуда это значение.
Возможно, вы захотите что-то сделать с набором записей, отличным от Debug.Print
его RecordCount
, но мы понятия не имеем, что это может быть.: -)