我们在这里遇到的最流行(经常发生而不是最不喜欢)的问题之一是在VBA代码中创建/操作SQL字符串。 在其他编码环境中也是如此,但是我将在这里处理VBA。
说明之所以如此困难,是因为所有工作都在重定向级别上完成。 我的意思是,编码器永远不会直接与SQL本身一起工作,而是与代码一起工作,而代码又依赖于代码来生成他们所设想的SQL。 这与编码人员历来处理指针的问题非常相似。
解决方案我经常向那些为此感到挣扎的编码人员(任何级别的编码人员-经验丰富的编码人员也会遇到这种情况)建议使用一种技术,即使用
MsgBox()函数或Debug.Print进入调试器窗口的立即窗格 ,以在使用SQL之前在字符串中显示SQL的值。 与MsgBox()相比 ,“即时窗格”选项的好处是可以将其复制并粘贴-例如,以字节为单位的帖子。另一个选择,假设您相对满意
在VBA中进行调试只是简单地跟踪(可以设置一个断点来执行此操作)到将执行SQL字符串的行,然后可以直接查看字符串值(在Debug模式下以各种方式进行,包括打印到立即窗格 )。要尝试的第三件事,因为有时通过VBA运行时看到的行为和错误消息与运行完整的QueryDef(在Access数据库中保存的查询)所看到的行为和错误消息不同,因此,需要打印SQL并将其放入QueryDef对象中,看看当您尝试运行它时会发生什么。 为此,只需创建一个QueryDef,并在将其打开进行设计时切换到SQL视图,然后将复制的SQL字符串粘贴到已存在的位置。 从那里运行,看看会发生什么。 与通过VBA执行信息相比,您可能会或可能不会获得更多信息。
结论真正理解SQL字符串的含义以及在什么地方可能出现问题的时候要容易得多,当您可以完整地并以其真实形式看到它时,而不是在代码即将创建时。
这也是在论坛上询问SQL问题的更好的方法。 没有人会很高兴被问到有关您发布的VBA代码的SQL问题。
From: https://bytes.com/topic/access/insights/915252-how-debug-sql-string