Ren*_*uis 17 sql debugging ms-access
MS Access管理原始SQL查询的能力有限:编辑器非常糟糕,没有语法突出显示,它将原始SQL重新格式化为长字符串,并且您无法插入注释.
调试复杂的SQL查询也是一件痛苦的事情:要么必须将它拆分成许多较小的查询,这些查询在架构发生变化时变得难以管理,或者你最终会遇到一个调试和更新的噩梦.
如何在MS Access中管理复杂的SQL查询以及如何调试它们?
编辑
目前,我主要只是使用Notepad ++进行语法着色,使用SQL Pretty Printer来重新格式化来自Access的原始SQL.
使用外部存储库很有用,但保持始终存在使两个版本不同步的风险,您仍然必须在Access中尝试查询之前删除注释...
rec*_*ive 14
对于调试,我在一个单独的文本编辑器中编辑它们,让我可以合理地格式化它们.当我发现需要进行更改时,我在文本编辑器中编辑版本,然后将其粘贴回Access,从不编辑Access中的版本.
仍然是一个主要的PITA.
Sma*_*oli 11
我有一些特定于VBA中的SQL的提示.
将您的SQL代码与字符串变量放在一起.我曾经这样做过:
DoCmd.RunSQL "SELECT ..."
Run Code Online (Sandbox Code Playgroud)
这很难管理.改为:
strSQL = "SELECT ..."
DoCmd.RunSQL strSQL
Run Code Online (Sandbox Code Playgroud)
除非您看到正在运行的内容,否则通常无法修复查询.为此,请在执行之前将SQL转储到立即窗口:
strSQL = "SELECT ..."
Debug.Print strSQL
Stop
DoCmd.RunSQL strSQL
Run Code Online (Sandbox Code Playgroud)
将结果粘贴到Access的标准查询构建器中(必须使用SQL视图).现在您可以测试最终版本,包括代码处理变量.
当您将长查询准备为字符串时,请分解您的代码:
strSQL = "SELECT wazzle FROM bamsploot" _
& vbCrLf & "WHERE plumsnooker = 0"
Run Code Online (Sandbox Code Playgroud)
vbCrLf当我想要给用户美化长消息时,我首先学会了使用.后来我发现它在编码时使SQL更具可读性,并且它改善了输出Debug.Print.(微小的其他好处:每行末尾不需要空格.新的行语法构建了.)
(注意:您可能认为这可以让您在SQL行的右侧添加添加注释.准备失望.)
正如其他地方所说,访问文本编辑器可以节省时间.一些文本编辑器提供比官方VBA编辑器更好的语法突出显示.(哎呀,StackOverflow做得更好.)在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
Run Code Online (Sandbox Code Playgroud)
当然,故障排除通常是降低查询复杂性的问题,直到您能够隔离问题(或者至少使其消失!).然后你可以把它建立回你想要的杰作.因为解决粘滞问题可能需要几个周期,所以您可能会反复使用此工作流程.
我编写了Access SQL编辑器 - 一个用于Microsoft Access的加载项 - 因为我编写了大量的传递查询,以及Access中更复杂的SQL.此加载项的优点是能够在Access应用程序本身中存储格式化的SQL(带注释!).将查询复制到新的Access应用程序时,将保留格式.当内置编辑器破坏您的格式时,该工具将显示您的原始查询并通知您差异.
它目前没有调试; 如果有足够的兴趣,我会追求这一点 - 但目前功能集故意保持小.
它暂时不是免费的,但购买许可证非常便宜.如果你买不起,你可以联系我.有一个免费14天试用版在这里.
安装完成后,您可以通过加载项菜单访问它(在Access 2010中,它是数据库工具 - >添加项).