как создать параметризованный запрос доступа и инициализировать его переменной в Excel VBA - PullRequest
0 голосов
/ 19 февраля 2012

Можете ли вы помочь мне с тем, как создать запрос динамического доступа (запрос параметризованного доступа) и

инициализировать его с помощью переменной в Excel VBA

eX: Выбрать & из клиентов, где id =1

где id = 1 следует инициализировать переменной, например, где id = @id

1 Ответ

3 голосов
/ 20 февраля 2012

Вот запрос параметра, который я создал и протестировал в 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, но мы понятия не имеем, что это может быть.: -)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...