Как использовать SQL с параметрами в качестве источника строки Combobox в MS Access / VBA - PullRequest
1 голос
/ 08 ноября 2019

Я хотел бы определить и использовать строку SQL с PARAMETERS в качестве RowSource поля со списком форм. Я использую PARAMETERS для предотвращения SQL-инъекций.

Мой SQL определяется следующим образом:

Dim strSql As String, strParm As String
Dim compID As Integer

compID = ...

strParm = "PARAMETERS [CompanyID] INT; "
strSql = strParm & "SELECT NAME, BUSINESS_NUMBER, FILE_ID FROM COMPANY WHERE COMPANY_ID = [CompanyID] ORDER BY CREATION_DATE;"

Из прочитанной мной документации такая строка обычно используется с CreateQueryDef.

Как правильно использовать результат этого SQL, используя значение compID в качестве RowSource комбинированного списка (Me!myComboBox.RowSource)?

Поскольку он в настоящее время закодирован,следующие работы, но я хотел бы избежать конкатенации строк при построении моего оператора SQL:

Me!myComboBox.RowSource = "SELECT NAME, BUSINESS_NUMBER, FILE_ID FROM COMPANY WHERE COMPANY_ID = " & compID & " ORDER BY CREATION_DATE;

1 Ответ

3 голосов
/ 08 ноября 2019

К сожалению, вы не можете напрямую использовать параметры в источнике строк.

Однако вы можете использовать параметры в querydef, использовать их для создания набора записей и использовать этот набор записей для заполнения комбинированного списка, например:

With CurrentDb.CreateQueryDef("", strSql)
    .Parameters!CompanyID = compID
    Set myCombobox.Recordset = .OpenRecordset
End With

Вы также можете использовать либо TempVars, либо параметры на основе форм в источниках строк, например,

TempVars!CompID = compID
strSql = "SELECT NAME, BUSINESS_NUMBER, FILE_ID FROM COMPANY WHERE COMPANY_ID = TempVars!CompID ORDER BY CREATION_DATE;"

См. Как использовать параметры в VBA в различных контекстахв Microsoft Access? для получения дополнительной информации.

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