MS Access DLookup Многократный поиск Ошибка выполнения 13 несоответствие типов - PullRequest
0 голосов
/ 30 августа 2018

У меня есть простая проблема, но я что-то упускаю.

Эта строка VBA работает:

If Me.To = 340 And DLookup("[LocID]", "[qryMyLocation]") = "C25" Then

Однако мне нужно протестировать 2 идентификатора LocID, и это не работает:

If Me.To = 340 And DLookup("[LocID]", "[qryMyLocation]") = "C25" Or "C20" Then

Чего мне не хватает - возможно ли выше?

Я получаю сообщение об ошибке при попытке ввода второй строки кода: ошибка времени выполнения 13 несоответствие типов

Ответы [ 3 ]

0 голосов
/ 30 августа 2018

Вы были близки. Попробуйте это:

If Me.To = 340 And (DLookup("[LocID]", "[qryMyLocation]") = "C25" Or DLookup("[LocID]", "[qryMyLocation]") = "C20") Then

Обратите внимание, что я также добавил несколько скобок.

0 голосов
/ 30 августа 2018

Поиск возвращает только один результат, но вы можете добавить желаемые результаты в критерии и подсчитать возвращенные результаты.

If Me.To = 340 And DCount("[LocID]", "[qryMyLocation]", "[LocID] = 'C25' Or [LocID] = 'C20'") > 0 Then
0 голосов
/ 30 августа 2018

Это потому, что вам нужно снова написать сравнение, VBA не понимает "C20" как допустимое логическое выражение.

If Me.To = 340 And ((DLookup("[LocID]", "[qryMyLocation]") = "C25" Or DLookup("[LocID]", "[qryMyLocation]") = "C20")) Then

Чтобы получить более быстрые результаты, вы можете сохранить DLookup в переменной.

Dim LocID as Variant 'Put the right type here, I think it should be String
LocID = DLookup("[LocID]", "[qryMyLocation]")
If Me.To = 340 And (LocID = "C25" Or LocID = "C20") Then

Редактировать: я добавил круглые скобки так же, как принятый ответ из-за приоритета оператора. Если оставить скобки, то

If (Me.To = 340 And LocID = "C25") Or LocID = "C20" Then
...