1

我有一個主窗體,它有兩個組合框的子窗體。我想根據第一個組合框的選擇來限制第二個組合框。我在第一個組合框的行源添加以下代碼:子窗體中的從屬組合框

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 

我的問題是,當我選擇第二個組合框的一個價值,我可以將第一個組合框更改爲組合框中的所有選項。

例如,首先我選擇法國在第一個組合框,然後第二個組合顯示我法國的城市,我選擇一個。現在我可以將組合框更改爲美國。

這意味着我在第二個組合框中有一個來自法國的城市,現在我將第一個組合框的值更改爲美國,如果我保存此記錄並希望保存子窗體中的其他記錄,則可以。

我該怎麼做才能限制它?我的意思是當我從第二個組合框中選擇城市時,我不想有這種可能性來改變第一個組合框的值,因爲在這種情況下我的數據庫是錯誤的 - 我可以保存不屬於特定國家的城市。

回答

0

如果用戶選擇了錯誤的國家,用戶是否應該不能改變國家?

在第一個組合框的AfterUpdate事件中有代碼從第二個組合框中刪除數據(將combobox值設置爲Null),以便用戶現在必須選擇適當的城市。

如果您不想允許用戶在選擇城市後更改國家,則必須禁用或鎖定國家/地區組合框。然後在移動到新記錄時重新激活它。當重新打開現有記錄時,可能還想禁用/鎖定。因此,將國家/地區組合框設置爲已禁用/鎖定設計,然後以編程方式將其僅激活爲新記錄。

推薦您的代碼設置combobox 2 RowSource在combobox 2 GotFocus事件中。

+0

對不起,我是新來access.I補充說 Me.cityName =空 在第一個組合框更新後,但沒有任何改變。 當我選擇第二個組合框的值時,我仍然可以將第一個組合框的值更改爲我擁有的所有選項。 – Mitra

+0

請參閱上面的回答中的編輯。 – June7

+0

其實我必須設計數據錄入表格,允許用戶編輯數據,用戶想要有這種可能性改變國家的時候,一開始他輸入錯了,所以如果他進入錯誤的國家和城市,他可以改變它。但問題是如果他選擇了國家,並據此選擇了城市,現在他也有這種可能性來改變國家到他想要的地步,這意味着他可以保存錯誤的信息。 – Mitra