Access中DLookup函数使用多条件查询时出现语法错误无法正常工作
报错原因
原代码的语法错误来自条件参数的字符串拼接逻辑:
- 引号错位:
"Clock = " '"段单双引号配对混乱,直接截断了字符串 - 连接符冗余:换行位置重复写了
&连接符,VBA无法解析拼接逻辑 - 值包裹规则错误:文本类型的字段值需要用单引号完整包裹,原代码单引号位置完全错误
修正代码
根据Clock字段的实际数据类型选择对应写法:
- 如果
Clock字段是文本类型:
x = DLookup("Clock_ID", "User_access", _ "Clock = '" & Replace(Me.Clock_ID, "'", "''") & _ "' AND Module = '" & Replace(Me.m_1, "'", "''") & "'")
- 如果
Clock字段是数字类型:
x = DLookup("Clock_ID", "User_access", _ "Clock = " & Me.Clock_ID & _ " AND Module = '" & Replace(Me.m_1, "'", "''") & "'")
逻辑说明
- 代码中加入
Replace(待匹配值, "'", "''")是为了转义输入内容里自带的单引号,避免值中包含单引号(如名称类字段的O'Neil格式内容)时再次触发SQL语法错误 - DLookup的第三个参数支持标准SQL条件语法,直接用
AND拼接多个匹配条件即可,函数会返回同时满足所有条件的第一条记录的指定字段值 - 校验逻辑可直接判断返回值:如果x不为Null,说明表中已经存在同时匹配传入Clock值、Module值的记录,因为Module字段不允许重复,此时即可判定当前输入的Module值重复,做拦截处理即可
内容的提问来源于stack exchange,提问作者0xAkira
相关产品推荐
相关产品推荐

