Переменная в Dlookup в Access 2016 возвращает ошибку времени выполнения 13 - несоответствие типов - PullRequest
0 голосов
/ 22 марта 2019

Логика не сложная. Приложение использует временную таблицу, в которую добавляются данные для отчета. После запуска отчета данные очищаются. Первоначально клиент сказал мне, что он введет все данные (принимая участие людей, посещающих какое-либо мероприятие), будет сделано сразу. Теперь это изменилось. Я ищу максимальный идентификатор в временной таблице - если число строк больше 0. Затем я хочу использовать dlookup, чтобы сообщить клиенту, где он остановился, чтобы не создавать больше проблем. Вот логика:

Dim VMax As Variant
Dim VNFind As String
VMax = DMax("foodpantryid", "signin_sheet_data") 'This works correctly
MsgBox VMax 'This works correctly
VNFind = DLookup("last_name", "Dat_household_member", "[household_id]" = VMax) 'I get the type mismatch/error 13 here.
MsgBox VNFind 'so this never works

Дополнительная информация:

  1. Household_id - длинное целое число. Когда я изменяю его на целое число, я получаю ошибку 94 (недопустимое использование null).
  2. Я попытался установить VMax для варианта, целого и длинного. Все еще безуспешно. Я думаю, вариант бы сработал.
  3. DLookup работает, если я не включаю "[domestic_id]" = VMax.
  4. Я пытался включить = VMax в "", и это тоже не получается. Это приводит к ошибке 2471.

1 Ответ

2 голосов
/ 22 марта 2019

Вы поместили = вне разделителей строк.

Это означает: скажем, ваш ID равен 5. Тогда параметр равен "[household_id]" = 5. Это сравнение между строкой "[household_id]" и числом 5, которое вызывает несоответствие типов, потому что вы не можете сравнивать строки с числами, если строка не может быть приведена к числу.

Вместо этого вы должны включить = в вашу строку, а DLookUp должно быть:

DLookup("last_name", "Dat_household_member", "[household_id] = " & VMax)

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

TempVars!VMax = VMax
DLookup("last_name", "Dat_household_member", "[household_id] = TempVars!VMax")
TempVars.Remove "VMax"
...