子形式中的相关组合框

时间:2017-03-14 04:44:53

标签: ms-access access-vba ms-access-2010 ms-access-2007 ms-access-2013

我有一个主窗体,它有一个带有两个组合框的子窗体。我想根据第一个组合框的选择限制第二个组合框。我在第一个组合框的rowsource中添加了这段代码:

SELECT DISTINCT tblAll.Country FROM tblAll ORDER BY tblAll.Country; 

然后在第一个组合框的更新事件之后我添加了

Private Sub cboCountry_AfterUpdate()

    On Error Resume Next

    cboCity.RowSource = "Select tblAll.City " & _
            "FROM tblAll " & _
            "WHERE tblAll.Country = '" & cboCountry.Value & "' " & _
            "ORDER BY tblAll.City;"

End Sub

我的问题是当我为第二个组合框选择一个值时,我可以将第一个组合框更改为我在组合框中的所有选项。

例如,首先我在第一个组合框中选择法国,然后第二个组合显示法国的城市,我选择一个。现在我可以将组合框改为美国。

这意味着我在第二个组合框中有一个来自法国的城市,现在我将第一个组合框的值更改为US,如果我保存此记录并希望在子表单中保存另一个记录,则有可能。

我应该怎么做才能限制它?我的意思是当我从第二个组合框中选择城市时,我不希望有这种可能性来改变第一个组合框的价值,因为在这种情况下我的数据库是错误的 - 我可以保存不属于特定国家的城市。

1 个答案:

答案 0 :(得分:0)

用户是否应该能够更改国家/地区,以防他们选择了错误的国家/地区?

在第一个组合框的AfterUpdate事件中有代码从第二个组合框中删除数据(将组合框值设置为Null),因此用户现在必须选择一个合适的城市。

如果您不想在选择城市后允许用户更改国家/地区,则必须禁用或锁定国家/地区组合框。然后在移动到新记录时重新激活它。在重新打开现有记录时,可能还需要禁用/锁定。因此,将国家组合框设置为禁用/锁定设计,然后以编程方式激活它仅用于新记录。

推荐你的代码将combobox 2 RowSource设置为combobox 2 GotFocus事件。