首页 文章

如何查看Access DoCmd.OpenForm运行的SQL语句

提问于
浏览
1

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

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

问题是我看不到查询的其余部分,即整个SELECT语句是什么以及Access如何知道选择哪些字段来填充DoCmd.OpenForm命令打开的表单?反正有没有找到它?为了增加混淆,DoCmd.OpenForm打开的目标表单具有与之关联的自己的查询 . 换句话说,如果在设计模式下打开表单,则在“数据” - >“记录源”下,会列出一个查询 . 我可以看到该查询的语法,而不是使用DoCmd.OpenForm命令从VBA代码调用的“部分”语法 . 似乎有两个不同的查询用于填充目标表单 .

我尝试过ODBC跟踪,但没有显示任何内容 . 由于应用程序与SQL Server后端进行对话,我可能可以让我们的DBA开启跟踪,但这不是一个很好的选择,因为应用程序很大并且这种情况以多种形式存在,我不确定它是否会甚至 grab 了什么 . 任何帮助是极大的赞赏 .

2 回答

  • 1

    DoCmd.OpenFormWhereCondition 参数是表单的recordsource的 additional WHERE子句 . 或者是一个额外的过滤器,但是你想要调用它 .

    例如 . 如果表单记录源是

    SELECT * FROM Projects WHERE PrjStatus = 1
    

    WhereCondition

    ProjectNumber = Me![ProjectNumber]
    

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

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

    表单可以或可以不基于查询 . 通常使用基表名称 . 所以表单数据源可以是:

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

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

    例如:

    enter image description here

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

    enter image description here

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

    enter image description here

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

    结果如下:

    enter image description here

    所以OFTEN没有为表单指定SQL或查询,只有基表 . (因此,如果Access要求您调用查询构建器,请确认您没有答案!,因为如果您继续,那么您正在更改应用程序并将表单数据源更改为表单的嵌入式查询 .

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

相关问题