繁体   English   中英

可以通过VBA更改MS Access子窗体字段吗?

[英]Possible to change MS Access subform fields through VBA?

我可以找到许多示例,这些示例如何通过更改代码中的基础源查询并重新查询来返回子表单中的特定记录,但是我一直在努力使用相同的原理来更改返回的字段。

我有以下情况:

组合框以选择5个字段中的1个。 子窗体应该显示选定的字段以及几个静态字段,我们将其称为字段6和7

因此,在用户从下拉列表中选择字段1的情况下,子窗体应显示字段1、6和7。在他们选择字段4的情况下,子窗体应显示字段4、6和7等。

这是我尝试过的(除其他事项外):

通过向导设置子表单,并以查询(选择field1,field6,field7)作为源,在选择组合框后修改该查询:

Set qd = CurrentDb.QueryDefs("myqueryname")
qd.SQL = "Select " & mycomboboxselection & ",field6,field7 from mytablename"
Form_mymainformname.mysubformname.Requery

如果更改后我独立运行该查询,查询本身可以很好地更新,但是主窗体中的子窗体不会更改,并且当我从导航窗口中单击子窗体本身时,它似乎被困在寻找字段1,因为它询问我输入参数值

任何人都可以帮助实现这一目标吗?

将子窗体的RecordSource设置为SQL:

Dim SQL As String

SQL = "Select " & mycomboboxselection & ",field6,field7 from mytablename"
Me!YourSubformControl.Form.RecordSource = SQL

它将强制重新查询子窗体。

好了,经过几个小时的搜索和反复试验后,我找到了解决方案。

这里有两个单独的问题。 首先,创建子表单使用新创建的表单作为源对象,而不是直接使用查询,并且看来,无论您如何尝试操纵所述表单的记录源,它都不喜欢更改其构建时使用的字段。

因此,创建子表单,将源对象从表单更改为查询(并删除现在毫无意义的新创建的表单),然后可以使用我开始的代码:

Set qd = CurrentDb.QueryDefs("myqueryname")
qd.SQL = "Select " & mycomboboxselection & ",field6,field7 from mytablename"

哪个有效! 有点....

您必须每次都关闭并重新打开表单才能看到实际的更新,这显然不是我们要的。

另一行不执行任何操作:

Form_mymainformname.mysubformname.Requery

它适用于更改记录,但显然不适用于更改字段。 我怀疑这有点ms怪癖

但是,即使我觉得它应该与上面的代码行完全一样,也可以使用下面的代码:

Form_MyForm.MySubForm.SourceObject = Form_MyForm.MySubForm.SourceObject

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM