Как проверить внешний источник данных перед импортом в MS Access

У меня есть база данных MS Access, которая использует внешний текстовый файл для ввода.

Я не доверяю этому текстовому файлу, и я хочу проверить содержимое до того, как я импортирую данные, чтобы не загрязнять мою базу данных.

Данные импортируются из текстового файла через макрос, который отлично работает сам по себе. Я пытаюсь обернуть запрос, который делает вставку внутри блока «If» Program Flow в макросе. У меня возникли проблемы с получением условия в инструкции If .

The external text file source is known as the table UserStatistics

I have created a query (UserStatistics-CheckTxtFileIsCorrect) that contains the following code:

SELECT *
FROM UserStatistics
WHERE (((UserStatistics.[Column1])="KNOWNGOODVALUE"));

The If condition in the Macro is currently set to:

  • count (*) from [UserStatistics-CheckTxtFileIsCorrect] >1 but this errors out.

Все, что я пробовал, с ошибкой «не может разобрать ...» или «не может найти имя, которое вы ввели ...»

Любая помощь будет принята с благодарностью!

ОБНОВЛЕНО список вариантов, которые я пробовал:

Count([UserStatistics-CheckTxtFileIsCorrect])>1
-- "Access cannot find the name 'UserStatistics' 
-- you entered in the expression" 
Count[UserStatistics-CheckTxtFileIsCorrect] > 1 -- cannot parse
count (*) [UserStatistics] >1 -- "cannot parse..." 
Count * 
where [UserStatistics-CheckTxtFileIsCorrect]![User ID] = 'ABC' -- cannot parse
Count(select * from [UserStatistics] 
where [UserStatistics]![Column1] = 'ABC') > 1 -- cannot parse

ОСНОВНОЕ ОБНОВЛЕНИЕ 2

HansUp предложил DCount . Если я опускаю часть критерия выражения, условие If теперь оценивается. Но часть критерия определенно необходима для достижения моей цели.

DCount("*","UserStatistics","[UserStatistics]![Column1] = 'ABC' ")>1
DCount("*","UserStatistics","Column1 = 'ABC' ")>1
DCount("*","UserStatistics",Column1 = 'ABC' )>1

Все вышесказанное дает ошибку 2001

Решение!

Оказывается, что в именах столбцов внешнего текстового файла содержались пробелы. Поэтому столбец в критерии оператора DCount должен быть заключен в квадратные скобки следующим образом:

If DCount("*","UserStatistics","[User ID]='KNOWNGOODVALUE'")>1 Then
Do my Actions here....
Else
MsgBox Error here...
End If

Большое спасибо HansUp за то, что указали мне на DCount .

2
nl ja de

1 ответы

Используйте выражение DCount() в условии.

DCount("*", "UserStatistics", "Column1='KNOWNGOODVALUE'")>1

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

Вы можете проверить это выражение DCount в окне Immediate, чтобы выработать третий вариант. ( Ctrl + g откроет окно Immediate) Попробуйте следующую строку:

? DCount("*", "UserStatistics", "Column1='KNOWNGOODVALUE'")

Запомните кавычки ... существует набор одиночных кавычек в строке, которая заключена в двойные кавычки.

Поскольку третий вариант, критерий WHERE , является препятствием, используйте запрос с DCount и опустите третий вариант.

DCount("*", "[UserStatistics-CheckTxtFileIsCorrect]")
0
добавлено
Благодаря HansUp, эта часть теперь работает DCount («*», «UserStatistics»)> 1 , но я не могу заставить Criterion работать. Он продолжает выдавать ошибку 2001, которая представляет собой довольно общий код ошибки.
добавлено автор sparco1500, источник
Успех! Я обнаружил, что мой внешний текстовый файл имеет имя столбца с пробелом в нем. Таким образом, окончательная инструкция DCount - это DCount («*», «UserStatistics», «[Column with Spaces] =« KNOWNGOODVALUE »)> 1 Большое спасибо за вашу помощь!
добавлено автор sparco1500, источник