2

我有一个使用外部文本文件进行输入的 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

重大更新 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'")>1Then
Do my Actions here....
Else
MsgBox Error here...
End If

非常感谢 HansUp 将我指向DCount.

4

1 回答 1

0

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

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

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

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

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

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

由于第三个选项,WHERE标准,是障碍,使用查询DCount并省略第三个选项。

DCount("*", "[UserStatistics-CheckTxtFileIsCorrect]")
于 2012-12-28T12:13:20.343 回答