MS Access 表单在将值传递给组合框后不会更新

MS Access Form won't update after passing value to combobox

提问人:Grabu 提问时间:10/23/2023 最后编辑:Grabu 更新时间:10/23/2023 访问量:26

问:

通过另一个窗体上的按钮打开新窗体,并将值传递到新窗体中的组合框以选择特定数据集。将值传递到组合框后,窗体不会更新。

我在 MS Access 中使用带有按钮 myButton 的表单 form1,它再次打开一个新的表单 form2。form2 上有两个组合框用于选择特定的数据集。打开 form2 后,我希望将 comboBox1 设置为一个值,具体取决于 form1 中的当前数据集。第二个组合框 comboBox2 包含查询中生成的值列表,该列表再次依赖于 comboBox1 中的值: comboBox1 和 comboBox2 中的两个值是 1:n 相关的,因此在选择 comboBox1 中的值后,comboBox2 中的(嵌入)查询将返回 comboBox1 中可用于 value1 的所有数据集。从此查询的列表中,我希望使用第一个可用值初始化 comboBox2。

我找到了以下代码来设置两个组合框中的值:

Private Sub cmdMyButton_Click()

    DoCmd.OpenForm "frmForm2"
    Forms!frmForm2.comboBox1 = Me.Value1
    Forms!frmForm2.comboBox2 = Forms!frmForm2.comboBox2.ItemData(0)
    
End Sub

到目前为止,一切正常,符合预期。但是,form2 中显示的数据集将始终是基础表的第一个数据集,尽管两个组合框中的值都需要选择另一个数据集。只要我在 combobox2 中更改值,表单就会正确更新。

我尝试了不同的更新方法,例如 、 和 ,但表单不会更新(或引发错误)。RequiryRecalcRefreshAfter_Update

SQL VBA 数据库 MS-Access 组合框

评论


答:

0赞 Kostas K. 10/23/2023 #1

设置值 of 后,需要重新查询以更新其列表,因为它依赖于第一个组合框的值。comboBox1comboBox2

另外,我很确定这一行是不正确的,因为它引用了相同的控件(除非它是拼写错误)。

试试这个:

DoCmd.OpenForm "frmForm2"

With Forms.frmForm2
    .comboBox1 = Me.Value1
    .comboBox2.Requery
    .comboBox2 = .comboBox1.ItemData(0)
    .Requery
End With

评论

0赞 Grabu 10/23/2023
嗨,科斯塔斯,谢谢你的回答!不幸的是,它没有奏效。您引用的行没有错别字:comboBox2 中的可用选项列表由查询(嵌入在组合框中)生成 - 此查询依赖于 comboBox1(框是级联的)。我想使用从此查询中获得的列表的第一个元素初始化 comboBox2。这很有效,除了窗体的其余部分不会更新,一旦选择了第一个元素。我试图按照你所说的去做,但不幸的是结果是一样的。Requery
0赞 Grabu 10/23/2023
我编辑了这个问题以清除 comboBox1 和 comboBox2 的级联。