使用导航子窗体上的控件访问查询参数

Posted

技术标签:

【中文标题】使用导航子窗体上的控件访问查询参数【英文标题】:Access Query Parameter Using Control on Navigation Subform 【发布时间】:2016-12-08 22:27:39 【问题描述】:

我已经建立了一个 Access 数据库,其中包括一个导航表单。其中一种形式包括一个组合框和一个命令按钮,单击该按钮可打开根据组合框中的值过滤的报告。以下是有问题的查询的略微简化版本:

SELECT *
FROM tbl
WHERE site Like "*" & [Forms]![NavigationForm]![NavigationSubform].[Form]![comboBox] & "*";

直到今天它工作正常。现在,当单击按钮时,会出现一个输入框,要求为上述参数提供一个值 ([Forms]![NavigationForm]![NavigationSubform].[Form]![comboBox])。实际上,我正在处理拆分数据库的前端,并且该数据库的副本仍然可以正常工作并且具有完全相同的 where 条件。组合框的名称没有改变。实际上,我在任何导航子窗体上的所有控件都遇到了这个问题。当 VBA 代码中出现问题时,我可以将其更改为 Me.comboBox,但这在查询参数中不起作用。

由于这是在处理数据库的副本(但没有对其他表单进行其他更改,我不想重新创建)但不是在这个副本上,我不确定问题可能是什么,除非从根本上这个副本有问题。有没有办法找出可能出了什么问题?或者有什么办法可以解决这个问题?

【问题讨论】:

您好,您可以添加按钮的代码吗? 在这种情况下实际上没有使用 VBA 代码,只是一个打开报告的嵌入式宏。报告所基于的查询是失败的 - 我已在上面更新以包含完整查询(简化版本) 【参考方案1】:

我更改了导航表单的名称,现在一切正常。我仍然不明白为什么这会有所不同,因为直到上周旧表单名称都可以正常工作,但只要它有效,我就很高兴。

【讨论】:

【参考方案2】:

好的,所以您使用的是宏,在这种情况下,您的开头引用有点偏离。 正如您所描述的,您有一个导航表单,其中显然有一个导航子表单,它是一个没有正确链接其值的组合框。 正确的意思是您必须自己输入一个值,因为该控件不存在或找不到。 在我的测试中,我能够使用 openreport 通过这个宏进行引用。 您使用 Text 获取组合中写入的内容,如果使用隐藏列,则使用 value 获取底层代码。

编辑:

在 where 语句中有一个额外的表单子类。

SELECT *
FROM tbl
WHERE site Like "*" & [Forms]![NavigationForm]![NavigationSubform]![comboBox].Text & "*";

【讨论】:

仍然没有 - 我将该行添加到宏中,但仍然会弹出一个询问参数值的窗口。正如我上面提到的,这种精确的查询/组合框/按钮/宏组合在旧版本的数据库前端上运行良好。 好吧,现在我确定 100% 问题出在您的查询的 SQL 中。包括报表记录源查询。 就是上面的查询。 已编辑以修复查询。

以上是关于使用导航子窗体上的控件访问查询参数的主要内容,如果未能解决你的问题,请参考以下文章

单击父窗体时不会触发访问 VBA 子窗体事件

隐藏/取消隐藏基于控件标签的主窗体上的控件,在连续子窗体中使用当前事件

访问子窗体未绑定控件#Error

VBA迭代主窗体上的控件,同时忽略子窗体

Delphi_子窗体继承父窗体后如何显示父窗体上的控件

C#winform中父窗体打开后下面有一排导航,导航打开子窗体,子窗体停靠在父窗体中间