2016-02-16 86 views
-1

在我设置有条件的基于值列表框行来源:陷阱语法错误编译

如果myvalue的=“”然后
Me.MyList.RowSource =“SELECT ...
FROM .. 。
RIGHT JOIN ...
GROUP BY ...
ORDER BY ...
否则
Me.MyList.RowSource =“SELECT ...
FROM ...
RIGHT JOIN ...
GROUP BY ...
HAVING myvalue的
ORDER BY ...
结束时,如果

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

谢谢。

+1

VBA编译器不显示SQL字符串中的语法错误。您应该向我们展示您的*实际*代码。 – Andre

回答

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

0

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

事实证明,我对属性表中有一个有问题的HAVING子句的列表框的剩余查询定义。当我从属性表中删除定义时,表单打开时没有恼人的语法错误。我原来发布的vba代码很好。