【问题标题】:How to view SQL statement run by Access DoCmd.OpenForm如何查看 Access DoCmd.OpenForm 运行的 SQL 语句
【发布时间】:2017-05-08 16:06:15
【问题描述】:

我的任务是将 Access 应用程序转换为 .NET。我对访问一无所知。我的问题是我需要能够看到通过 VBA 从表单调用的实际查询。

VBA 代码使用名为 DoCmd.OpenForm 的命令打开表单并显示记录。 VBA 代码位于按钮的事件处理程序中。单击时,该按钮使用 DoCmd.OpenForm 及其相关参数打开一个表单。 DoCmd.OpenForm 中的第四个参数是根据 MSDN 的 WhereCondition,开发人员使用它来插入 WHERE 子句(根据 MSDN,没有 WHERE 一词)。使用的 WHERE 子句是ProjectNumber = Me![ProjectNumber]

问题是我看不到查询的其余部分,即整个 SELECT 语句是什么以及 Access 如何知道要选择哪些字段来填充 DoCmd.OpenForm 命令打开的表单?有没有办法找出来?更令人困惑的是,由 DoCmd.OpenForm 打开的目标表单有与之关联的自己的查询。换句话说,如果表单是在设计模式下打开的,在 Data-->Record Source 下,它会列出一个查询。我可以看到该查询的语法,而不是使用 DoCmd.OpenForm 命令从 VBA 代码调用的“部分”语法。似乎有两个不同的查询用于填充目标表单。

我尝试过 ODBC 跟踪,但没有显示任何内容。由于应用程序与 SQL Server 后端通信,我可以让我们的 DBA 打开跟踪,但这不是一个好选择,因为应用程序很大并且这种情况以多种形式存在,我不确定它会不会甚至抓到任何东西。非常感谢任何帮助。

【问题讨论】:

  • 在布局或设计视图中打开表单。表单的属性包括一个数据选项卡。在该数据选项卡中查找表单的记录源。这应该会给你你正在寻找的东西。
  • 下面两个很好的答案,但也要注意有更多的方法来操作表单的 SQL 记录源。检查 OnOpen、OnLoad 和 OnCurrent 事件。查看是否在调用表单之前设置了任何全局变量,或者是否使用了 OpenForm OpenArgs 参数。这表明更多信息被发送到表单,而不仅仅是打开它。

标签: vba ms-access


【解决方案1】:

DoCmd.OpenFormWhereCondition 参数是表单记录源的附加 WHERE 子句。或者一个额外的过滤器,不管你想怎么称呼它。

例如如果表单记录源是

SELECT * FROM Projects WHERE PrjStatus = 1

WhereCondition

ProjectNumber = Me![ProjectNumber]

那么打开的表单的实际 SELECT 语句将是

SELECT * FROM Projects WHERE PrjStatus = 1 AND ProjectNumber = Me![ProjectNumber]

【讨论】:

    【解决方案2】:

    表单可能基于查询,也可能不基于查询。通常使用基表名称。 所以一个表单数据源可以是:

    A base table name
    A saved query
    Have embedded sql right in the data source.
    

    要查看给定表单的基础数据源,请在设计模式下打开表单,显示属性表(如果尚未显示属性表,则只需按 alt-enter 键。在数据选项卡中,您会看到数据源:

    例如:

    上述源名称可以是基表、已保存查询的名称,甚至是该记录源中的原始 sql,例如:

    在上面,您可以点击小 [...] 按钮(当您将光标放入数据源时会出现该按钮,它将显示查询构建器。例如:

    从上面,您可以通过选择 SQL 来翻转到 sql 视图,如上所示。

    结果是这样的:

    所以通常没有为表单指定 SQL 或查询,而只有基表。 (因此,如果 Access 要求您调用查询生成器,请确保您回答否!,因为如果您继续,那么您将更改应用程序并将表单数据源更改为表单的嵌入式查询。

    但是,在所有情况下,openform 命令的“where”子句都会作为过滤器添加到数据源中。如果 sql 已经有 where 子句,则将它们组合起来(就像在 SQL 服务器视图上使用 sql select + where 一样)

    【讨论】:

      猜你喜欢
      • 2012-06-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-20
      • 2010-09-08
      相关资源
      最近更新 更多