我有一些专门针对 VBA 中的 SQL 的技巧。
将您的 SQL 代码与字符串变量放在一起。我曾经这样做过:
Set RS = DB.OpenRecordset("SELECT ...")
这很难管理。改为这样做:
strSQL = "SELECT ..."
Set RS = DB.OpenRecordset(strSQL)
通常您无法修复查询,除非您看到正在运行的内容。为此,请在执行前将您的 SQL 转储到即时窗口:
strSQL = "SELECT ..."
Debug.Print strSQL
Stop
Set RS = DB.OpenRecordset(strSQL)
将结果粘贴到 Access 的标准查询生成器中(您必须使用 SQL 视图)。现在您可以测试最终版本,包括代码处理的变量。
当你准备一个长查询作为字符串时,分解你的代码:
strSQL = "SELECT wazzle FROM bamsploot" _
& vbCrLf & "WHERE plumsnooker = 0"
我第一次学会使用vbCrLf 是为了给用户美化长消息。后来我发现它使 SQL 在编码时更具可读性,并且改进了 Debug.Print 的输出。 (其他微小的好处:每行末尾不需要空格。新的行语法构建了它。)
(注意:您可能认为这会让您在 SQL 行的右侧添加 add cmets。准备好失望吧。)
正如这里其他地方所说,使用文本编辑器可以节省时间。一些文本编辑器提供比官方 VBA 编辑器更好的语法突出显示。 (哎呀,StackOverflow 做得更好。)它也可以有效地删除 Access 杂乱无章的东西,比如 WHERE 子句中多余的表引用和成堆的括号。
解决严重问题的工作流程:
VBA Debug.Print > (capture query during code operation)
query builder > (testing lab to find issues)
Notepad++ > (text editor for clean-up and review)
query builder > (checking, troubleshooting)
VBA
当然,故障排除通常是降低查询的复杂性,直到您能够隔离问题(或至少使其消失!)。然后,您可以将其重新构建为您想要的杰作。因为解决一个棘手的问题可能需要几个周期,所以您可能会重复使用此工作流程。