相关查询和引用子表单控件
Posted
技术标签:
【中文标题】相关查询和引用子表单控件【英文标题】:Dependent queries and referencing subform controls 【发布时间】: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
是调用查询的子表单对象。
MS Access: How to Supply Parameters to a Query-Based Subform Control的可能重复
【参考方案1】:
最终通过参数查询完成此操作,并通过QueryDef
将控件值传递给Query2
的参数。这是因为@VBlades 在Pass parameter to a query from another query in Access 中的评论而起作用的@
Access中的QueryDef对象可以看到他们查询的参数 建立在。说 Query2 是位于顶部的查询 GET_CUSTOMER;你可以编写类似这样的代码: QueryDefs("Query2").Parameters("customer_id") = 123,即使 param 不属于顶层。所以参数 因此,更高级别的查询可以访问底层查询 (在我的头顶,我不知道如果有会发生什么 查询堆栈中的同名参数;我认为他们是 一旦设置了参数,所有这些都被赋予相同的值)。所以是的,它可以是 完成。
换句话说,我传递给查询的任何参数也会被依赖它的所有查询看到。我不知道如果有名字冲突会发生什么。
所以我猜我的 OP 是个骗子,但我花了一段时间才意识到......
【讨论】:
非常有趣。感谢您提供该文章的摘录和链接。以上是关于相关查询和引用子表单控件的主要内容,如果未能解决你的问题,请参考以下文章
在展开父表单的第一行之前,无法引用 Access 子表单表单对象
如何根据在表单上的组合框控件中输入的内容从查询中选择所有记录