在MS Access中管理和调试SQL查询

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)

当然,故障排除通常是降低查询复杂性的问题,直到您能够隔离问题(或者至少使其消失!).然后你可以把它建立回你想要的杰作.因为解决粘滞问题可能需要几个周期,所以您可能会反复使用此工作流程.


tra*_*or1 6

我编写了Access SQL编辑器 - 一个用于Microsoft Access的加载项 - 因为我编写了大量的传递查询,以及Access中更复杂的SQL.此加载项的优点是能够在Access应用程序本身中存储格式化的SQL(带注释!).将查询复制到新的Access应用程序时,将保留格式.当内置编辑器破坏您的格式时,该工具将显示您的原始查询并通知您差异.

它目前没有调试; 如果有足够的兴趣,我会追求这一点 - 但目前功能集故意保持小.

它暂时不是免费的,但购买许可证非常便宜.如果你买不起,你可以联系我.有一个免费14天试用版在这里.

安装完成后,您可以通过加载项菜单访问它(在Access 2010中,它是数据库工具 - >添加项).