我的任务是将Access应用程序转换为.NET,我对Access一无所知。我的问题是,我需要能够看到通过VBA从表单中调用的实际查询。
VBA代码使用一个名为DoCmd.OpenForm的命令来打开表单并显示记录。VBA代码位于按钮的事件处理程序中。单击该按钮时,该按钮将使用DoCmd.OpenForm及其相关参数打开窗体。DoCmd.OpenForm中的第四个参数是WhereCondition (根据MSDN),开发人员使用它插入WHERE子句(每个MSDN没有WHERE )。使用的WHERE子句是ProjectNumber = Me![ProjectNumber]。
问题是,我看不到查询的其余部分,即整个SELECT语句是什么,Access如何知道要选择哪些字段来填充由DoCmd.OpenForm命令打开的表单?有什么办法能查出来吗?为了增加混乱,DoCmd.OpenForm打开的目标表单具有与其关联的自己的查询。换句话说,如果表单是在设计模式下打开的,则在Data->Record Source下,它有一个查询列表。我可以看到该查询的语法,但不是使用DoCmd.OpenForm命令从VBA代码中调用的“部分”语法。似乎有两个不同的查询用于填充目标表单。
我尝试过ODBC跟踪,但它没有显示任何内容。由于应用程序与Server后端对话,我可能可以让我们的DBA启动跟踪,但这并不是一个很好的选择,因为应用程序是巨大的,并且这个场景以许多形式存在,而且我不确定它会捕获任何东西。任何帮助都是非常感谢的。
发布于 2016-12-22 23:59:19
WhereCondition参数DoCmd.OpenForm是窗体记录源的附加 WHERE子句。或者一个额外的过滤器,但是您想要调用它。
例如,如果表单记录源是
SELECT * FROM Projects WHERE PrjStatus = 1而WhereCondition是
ProjectNumber = Me![ProjectNumber]然后打开的表单的实际SELECT语句将是
SELECT * FROM Projects WHERE PrjStatus = 1 AND ProjectNumber = Me![ProjectNumber]发布于 2016-12-23 01:32:06
表单可能基于查询,也可能不基于查询。通常使用基表名。因此,表单数据源可以是:
A base table name
A saved query
Have embedded sql right in the data source.若要查看给定表单的基础数据源,请在设计模式下打开表单,显示属性表(如果属性表尚未显示,则只需按alt键即可。在“数据”选项卡中,可以看到数据源:
例如:

上面的源名称可以是基表、保存查询的名称,甚至是该记录源中的原始sql权限,如下所示:

在上面,你可以击中小的..。按钮(当您将光标放入数据源并显示查询生成器时会出现该按钮。例如:

从上面,您可以通过选择上面所示的sql来切换到SQL视图。
结果是:

因此,通常没有为表单指定SQL或查询,而只有基表。(因此,如果Access要求您调用查询生成器,请确保回答否!),因为如果继续,您将对应用程序进行更改,并将表单数据源更改为表单的嵌入式查询。
但是,在所有情况下,openform命令的“where”子句都作为过滤器添加到数据源中。如果sql已经有where子句,则将它们组合在一起(就像在sql服务器视图上使用select + where )
https://stackoverflow.com/questions/41293170
复制相似问题