如何在MS Access中导入之前验证外部数据源

时间:2012-12-28 11:10:13

标签: ms-access access-vba ms-access-2010

我有一个MS Access数据库,它使用外部文本文件进行输入。

我不相信这个文本文件,我想在导入数据之前验证内容,以免污染我的数据库。

数据是通过宏自动从文本文件中导入的。我试图将插入的查询包装在宏中的“If”程序流程块中。我无法使If语句中的条件生效。

外部文本文件源称为表UserStatistics

我创建了一个包含以下代码的查询(UserStatistics-CheckTxtFileIsCorrect):

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

宏中的If条件目前设置为:

  • count (*) from [UserStatistics-CheckTxtFileIsCorrect] >1但是错误了。

我尝试的所有内容都失败了,错误“无法解析......”或“无法找到您输入的名称......”

非常感谢任何帮助!!

更新了我尝试的变体列表:

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

MAJOR UPDATE 2

HansUp建议DCount。如果我省略了表达式的标准部分,If条件现在正在评估。但是标准部分肯定需要实现我的目标。

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

以上所有都给出了错误2001

的解决方案!

事实证明我的外部文本文件列名包含空格。因此,DCount语句的标准中的列需要包含在方括号中,如下所示:

如果DCount("*","UserStatistics","[User ID]='KNOWNGOODVALUE'")>1那么 Do my Actions here....
否则
MsgBox Error here...
结束如果

非常感谢HansUp指点我DCount

1 个答案:

答案 0 :(得分:0)

在条件中使用DCount()表达式。

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

这应该返回与查询相同的计数,但实际上并不需要查询,因为您可以将源表名称和WHERE条件包含为DCount选项。

您可以在立即窗口中测试DCount表达式,以计算出第三个选项。 ( Ctrl + g 将打开立即窗口)请尝试以下行:

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

注意引号......字符串中有一组单引号,用双引号括起来。

由于第三个选项(WHERE标准)是障碍,因此请使用DCount的查询并省略第三个选项。

DCount("*", "[UserStatistics-CheckTxtFileIsCorrect]")