可以通过VBA更改MS Access子表单字段吗?

时间:2016-06-07 10:27:08

标签: vba ms-access access-vba

我可以找到很多关于如何通过在代码中重新更改底层源查询并重新查询来返回子表单中的特定记录的示例,但我正在努力使用相同的原则来更改返回的字段。 / p>

我有以下情况:

Combobox选择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它要求我输入一个参数值

有人可以帮忙解决这个问题吗?

2 个答案:

答案 0 :(得分:2)

将子窗体的 RecordSource 设置为SQL:

Dim SQL As String

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

它将强制重新查询子表单。

答案 1 :(得分:0)

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

这里有两个独立的问题。首先创建子表单使用新创建的表单作为源对象,而不是直接使用查询,似乎无论你如何尝试操作所述表单的记录源,它都不喜欢改变它的字段。用。构建。

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

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