编译期间的陷阱语法错误

时间:2016-02-16 22:37:25

标签: vba ms-access error-handling compiler-errors

我正在根据值有条件地设置列表框行源:

如果MyValue =“”那么 Me.MyList.RowSource =“SELECT ...
FROM ...
正确的加入...
GROUP BY ...
订购......
否则
Me.MyList.RowSource =“SELECT ...
FROM ...
正确的加入...
GROUP BY ...
拥有MyValue
订购......
如果

结束

其中MyValue是HAVING部分的一些标准。 只要MyValue不是“”(空白),这就可以正常工作。但是在编译期间,我收到Microsoft Access错误:“HAVING子句上的语法错误。”在运行期间,没有发生带有HAVING的“else”,因此没有错误。如何避免或捕获“HAVING子句上的语法错误”。在编译期间?通常的“On error ...”在编译期间不会陷阱。

感谢。

2 个答案:

答案 0 :(得分:1)

编译器无法将您的代码插入列表框字段并检查结果。但是,一些好的做法会帮助你解决问题。

Dim strRowSourceSQL as String

strRowSourceSQL  = "SELECT ... FROM ... RIGHT JOIN ..."

If MyValue = "" then
    strRowSourceSQL = strRowSourceSQL & "MORE SQL HERE"
else
    strRowSourceSQL = strRowSourceSQL & "DIFFERENT SQL HERE"
end if

Me.MyList.RowSource = strRowSourceSQL

这种安排可以让你检查strRowSourceSQL。设置一个断点并......

Debug.Print strRowSourceSQL

完成后,请进入查询编辑器并修复错误。另外,请关注these principles

答案 1 :(得分:0)

感谢您的建议,但我发现了问题。

事实证明,我在属性表中为具有违规HAVING子句的列表框中有一个遗留查询定义。当我从属性表中删除定义时,表单打开时没有恼人的语法错误。我在原帖中包含的vba代码就好了。