2017-06-26 50 views
0

我是MS Access的新手,並且一直在開發基本的CRM系統。到目前爲止,所有方法都進行得很順利,但是我對我的想法是一個非常簡單的問題,我可以理解它......我可以理解VBS並在一般情況下解決Access問題,但絕不是任何領域的專家。難以填充未綁定的組合框


如何使未綁定的組合框自動根據表中的其他值自行設置爲某個值?

我有一個表格供用戶編輯員工信息,其中包括用於輸入員工分部和分部的組合框。大約有10個師,每個師有5個分支。

分支組合框將BranchID保存到tblEmployee表中,並將其作爲tblBranch表的鍵。 tblBranch表還具有BranchName和DivisionID,DivisionID作爲tblDivision表的關鍵字,基本上只有分區ID和分區名稱。

現在分區組合框未被綁定,因爲這僅僅是允許用戶縮小分支組合框的範圍。如果單擊分區組合框,級聯菜單就會正常工作,但是當我打開表單時,分組組合框顯示空白(因此分支組合框也顯示空白,因爲它具有對分組組合框的標準引用)。

我該如何讓分部組合框查看特定員工的BranchID,然後向相關分部預先設置?

我試圖通過設置一個綁定和一個事件來做到這一點,但我無法讓任何一種方式正常工作...(可能只是我的新手)。

謝謝!


謝謝!很高興看到我一直在正確的道路上。然而,它仍然不起作用,我認爲這是因爲我不瞭解YourEmployeeIDField。

我的代碼如下:

Private Sub cboDivision_Enter() 
    Dim sql_ As String 
    sql_ = "SELECT d.Division " & _ 
      "FROM tblDivision d INNER JOIN (tblBranch b INNER JOIN tblEmployee e ON b.BranchID = e.BranchID) ON d.DivisionID = b.DivisionID " & _ 
      "WHERE e.EmployeeID=" & Me.txtEmployeeID 

    Me.cboDivision.RowSource = sql_ 
End Sub 

我刪除的組合框的選擇標準,以確保事情並沒有獲得濾出意外。

我嘗試使用EmployeeID,e.EmployeeID,txtEmployeeID(表單上的字段)和Me.txtEmployeeID,沒有太多的運氣。

在調查了RowSource方法之後,我想知道我是否可能沒有解釋我究竟想要什麼? (或者我只是誤解)組合框cboDivision填充了tblDivision.Division,這是我想要的。但是,因爲它是未綁定的,所以當記錄加載到我的表單中時,cboDivision是空白的。我希望它顯示與綁定的cboBranch組合框關聯的分區(但是當您點擊cboDivision時,它仍然有可用於選擇的完整分區列表)。


,我正在使用的按鈕代碼如下所示(它簡化SQL,但是同樣的結果發生與您的代碼):

Private Sub Command240_Click() 
    'Me.cboDivision.Value = 8 
    Dim sqlStr As String 
    sqlStr = "SELECT d.DivisionID" & _ 
      "FROM tblDivision d INNER JOIN tblBranch b ON b.DivisionID = d.DivisionID)" & _ 
      "WHERE b.BranchID=" & BranchID 

    Me.cboDivision.Value = sqlStr 

    MsgBox ("You clicked me.") 
End Sub 

註釋掉「Me.cboDivision。值= 8「使cboDivision組合框顯示與DivisionID 8相關的分區,這是我想要的;但是,如果我用當前代碼單擊按鈕,組合框將更新爲:」SELECT d.DivisionIDFROM tblDivision d INNER JOIN tblBranch b關於b.DivisionID = d.DivisionID)WHERE b.BranchID = 45"

(45在端部是該記錄的正確BranchID,使得一部分至少是工作)。

+0

您可能必須使用VBA來設置從屬組合框RowSource屬性。發佈您的嘗試代碼。 – June7

+0

您需要爲SQL提供某種類型的ID,以便將篩選結果轉換爲該特定ID。如果表單已綁定,請嘗試'Me!EmployeeID',其中'EmployeeID'是持有該ID的字段的名稱。 –

+0

我現在已經有了這方面的工作。我想我應該做的是設置cboDivision的價值。我正在使用按鈕對其進行測試,只是爲了排查故障。 我通過使用Me.cboDivision.Value = 18來成功地工作,然後顯示與DivisionID number 18相關聯的Division;但是,當我嘗試在按鈕事件中使用任何SQL代碼時,它顯示的值是SQL代碼...而不是對SQL查詢的響應。 –

回答

0

您需要更改組合框的RowSource屬性,以根據所選的EmployeeID填充正確的分區信息。

您可以對t他控制的輸入事件:

Private Sub YourComboBoxName_Enter() 
    Dim sql_ As String 
     sql_ = "SELECT d.DivisionName " & _ 
       "FROM tblDivision d INNER JOIN (tblBranch b INNER JOIN tblEmployee e ON b.BranchID = e.BranchID) ON d.DivisionID = b.DivisionID " & _ 
       "WHERE e.EmployeeID=" & YourEmployeeIDField 

    Me.YourComboBoxName.RowSource = sql_ 
End Sub 


ComboBox控件的行來源類型必須設置爲Table/Query

+0

謝謝科斯塔斯。我已經更新了更多細節的原始問題。 –

0

我想出了我想做的事......也許是我沒有正確解釋它。做什麼,我需要的代碼如下:

Private Sub Form_Current() 
    Me.cboDivision.Value = DLookup("DivisionID", "tblBranch", "BranchID=" & BranchID) 
    Me.cboMinistry.Value = DLookup("MinistryID", "tblDivision", "DivisionID=" & Me.cboDivision) 
End Sub 

所以,當我改變目前的記錄,它更新基於BranchID的限值未綁定的組合框。

感謝您的幫助,響應者!