【发布时间】:2014-10-08 15:17:28
【问题描述】:
情况
我的数据库包含几个查询和一个表单,我们称它们为Query1a、Query1b、Query2 和Form1。
Form1 包含控件Text1、ComboBox1 和一个按钮Command1。
在Form1 上明确查询 1a 和 1b 引用控件,例如通过SELECT Forms!Form1!Text1 as Expr1。 Query2 取决于查询 1a 和 1b。
Command1 在点击时运行DoCmd.OpenQuery "Query2",一切正常。
问题
我有各种结构类似于Form1 的表单,我想将它们全部放在导航选项卡中。我转到create -> navigation -> horizontal tabs 并将Form1 拖到一个选项卡。
现在,当我尝试在导航表单中使用Form1 时,Access 会弹出并询问我Text1 的值,因为Query1a 试图在Forms!Form1 中查找它,但我的@ 987654343@真的住在Forms!NavigationForm!Form1.Form。
尝试
我可以进入每个查询并更改代码以显式引用子表单,但这很乏味,不是很优雅,而且会破坏在导航表单之外使用表单的能力。
受 cmets 启发,我也尝试了以下方法:
- 向
Query1a和Query1b添加参数声明 - 在
Form1的按钮中,我通过QueryDef以编程方式设置参数。这样,我可以做类似的事情Dim qdf As DAO.QueryDef Set qdf = CurrentDb.QueryDefs("Query1a") qdf.Parameters("Forms!Form1!myparam").Value = Me!Text1
但是,我不知道从那里去哪里,因为我的 QueryDef 对象对 Query2 是不可见的。
让生活更轻松的一件事是让查询能够从它们被调用的地方引用表单对象,但我不知道这是否可能。
【问题讨论】:
-
有一个语法用于引用父/子;它有点复杂。主参考是access.mvps.org/access/forms/frm0031.htm
-
@Smandoli 您发布的链接似乎是 VBA 语法。对于我的问题中的简单示例,我可以使用 VBA 构建 SQL 字符串并执行它。但是,实际上,我在 Access 数据库中有想要利用的复杂查询,并且在 VBA 方面重做所有事情是不可行的。如果我误解了,请告诉我。
-
更正了 VBA 上下文。但是
SELECT Forms!Form1!text1 AS Expr1是 SQL 和 Object/VBA 语法的混合体。很难说你在做什么! -
我不知道在 Access SQL 中引用表单的惯用方式是什么,但该查询运行良好(不涉及 VBA。)它只是从
Form1!text1中提取值。我想我想要的是查询中的Me.text1之类的东西,Access 可以理解Me是调用查询的子表单对象。