依赖查询和引用子表单控件

时间:2014-10-08 15:17:29

标签: vba ms-access

情况

我的数据库包含多个查询和表单,我们称之为Query1aQuery1bQuery2Form1

Form1包含控件Text1ComboBox1和按钮Command1

查询1a和1b明确引用Form1上的控件,例如通过SELECT Forms!Form1!Text1 as Expr1Query2取决于查询1a和1b。

Command1点击后运行DoCmd.OpenQuery "Query2",一切正常。

问题

我有各种形式的结构与Form1类似,我想将它们全部放在导航标签中。我转到create -> navigation -> horizontal tabs并将Form1拖到标签页。

现在,当我尝试在导航表单中使用Form1时,会弹出Access并询问Text1的值,因为Query1a正在尝试查找它Forms!Form1但我的Text1真的住在Forms!NavigationForm!Form1.Form

尝试

我可以进入每个查询并更改代码以明确引用子表单,但这很乏味,不是很优雅,并且会破坏在导航表单之外使用表单的能力。< / p>

受到评论的启发,我也尝试了以下内容:

  1. 将参数声明添加到Query1aQuery1b
  2. 在我Form1的按钮中,我通过QueryDef以编程方式设置参数。这样,我可以做类似的事情 Dim qdf As DAO.QueryDef Set qdf = CurrentDb.QueryDefs("Query1a") qdf.Parameters("Forms!Form1!myparam").Value = Me!Text1
  3. 但是,我不知道从那里去哪里,因为我的QueryDef对象对Query2是不可见的。

    让生活更轻松的一件事是让查询能够从调用它们的地方引用表单对象,但我不知道这是否可能。

1 个答案:

答案 0 :(得分:1)

通过参数查询完成此操作,并通过QueryDef将控件值传递给Query2的参数。这是因为@VBlades在Pass parameter to a query from another query in Access

中的评论
  

Access中的QueryDef对象可以查看查询的参数   建立在。 Say Query2是位于其上的查询   GET_CUSTOMER;你可以编写类似这样的代码:   QueryDefs(“Query2”)。参数(“customer_id”)= 123,即使是   param不属于顶级。所以   因此,基础查询可以由更高级别的查询访问   (在我的头顶,我不知道如果有的话会发生什么   查询堆栈中具有相同名称的参数;我认为他们是   一旦设置参数,所有都给出相同的值)。是的,它可以   完成。

换句话说,我传递给查询的任何参数也会被依赖于它的所有查询看到。我不知道如果有名字冲突会发生什么。

所以我猜我的OP是一个骗局,但我花了一段时间才意识到......