Проблема в том, что функция DCount не может работать напрямую с набором записей.
Вы объявляете StrSQL1
в качестве объекта RecordSet и устанавливаете его в RecordSet на основе вашего оператора Select
.
Set StrSQL1 = db.OpenRecordset("SELECT RIGHT(IRSfileFormatKey, 10) As ID FROM 1042s_FinalOutput_7;")
Затем вы пытаетесь передать этот RecordSet в функцию DCount
, которая не может принять объект RecordSet в качестве параметра Domain
. Как вы можете видеть в MSDN, функция DCount требует параметр String во второй позиции, чтобы определить «запрос», который вы хотите «считать». Отсюда ошибка 3078. Когда вы удаляете кавычки вокруг [ID]
в вашей строке DCount, вы получаете Несоответствие типов как ошибку компиляции, потому что [ID]
не является строковой или строковой переменной.
После того, как вы решите это, вы можете пересмотреть свое заявление If
. Вы не предоставили пример того, какое значение будет содержать !external_nmad_id
, кроме того факта, что это строковое значение. Функция DCount
будет возвращать количество строк, найденных в Домене (запрос), которое вы сказали ему подсчитать, так что, похоже, вы будете сравнивать строку (которая может содержать буквенные символы) с числом. Access неявно преобразует числовой результат DCount
в строку для сравнения, но если ваша строка !external_nmad_id
действительно 10 символов или содержит буквенные символы, они никогда не будут совпадать.