Оператор SQL Access не всегда работает при передаче параметров с помощью функции VBA - PullRequest
0 голосов
/ 12 марта 2019

Я использую MS Access 2013, и у меня есть таблица, в которой одно из полей представляет собой раскрывающийся список, который ищет значения из другой таблицы. Я передаю идентификаторы в оператор SQL, используя функцию vba и предложение SQL IN (). Он работает с одним значением, когда передается более одного значения, он не возвращает записей или несоответствие типов данных.

DIM varIDs AS String

Функция VBA

getIDs(varIDs)

Оператор SQL

SELECT ID, Name FROM Table 
WHERE Table.ID IN (getIDs())

Когда varIDs = "26" это работает Когда varIDs = "26, 27", он ничего не возвращает или возвращает несоответствие типов данных

Находился в поиске ответов в течение 2 дней и не могу понять, почему он не работает с несколькими ID, передаваемыми. Любая помощь приветствуется

1 Ответ

1 голос
/ 12 марта 2019

Это не работает, как это. SQL не расширен до WHERE Table.ID IN (26, 27), как и следовало ожидать.

Измените функцию VBA, чтобы вместо нее проверить действительные идентификаторы

Public Function IsValidId(ByVal id As Long) As Boolean
    IsValidId = id = 26 Or id = 27 'Replace by your implementation
End Function

Затем измените ваш SQL на

SELECT ID, Name FROM Table 
WHERE IsValidId(Table.ID)

Другой подход, если вы можете динамически изменять запрос (например, для ComboBox), состоит в том, чтобы создать его следующим образом

Dim sql as String
sql = "SELECT ID, Name FROM Table WHERE Table.ID IN (" & getIDs() & ")"
cbo.RowSource = sql
...