2012-11-30 96 views
1

新在這裏,並已進入花了很多時間試圖解決這個問題,所以在這裏的背景:的MS Access - 組合框不是讓我選擇一個項目

注:已經有一個看看這個:ComboBox won't allow me to select an item ,但沒有提供我需要的答案。

我有一個數據庫,它允許一個人輸入和存儲客戶信息通過的形式,目前我有3代表具有下列關係:

客戶 - 客戶ID(PK) - 姓 - 名字

過程 - 的ProcessID(PK) - 細節 - PartsUse -

工作 - 作業ID(PK) - 客戶ID(FK) - 的ProcessID(FK) - MachineDetail -

客戶有招聘1-M的關係,而是通過擴展名(不知道爲什麼)流程也與Job有1-M關係。因此,這裏的目標是,客戶可以有很多工作,工作應該只有一個進程(以後需要解決這個問題了)。

現在,我的代碼在我的NewJob窗體中綁定ComboBox - 它的目標是在窗體打開時用客戶的所有名稱填充ComboBox,並且只允許用戶在客戶擁有後輸入作業詳細信息已被選中:

Private Sub Form_Open(Cancel As Integer) 

    Dim db As Database 
    Dim recordSet As DAO.recordSet 
    Dim sql As String 

    sql = "SELECT [Customer].[CustomerID], [Customer].[FirstName] & [Customer].[LastName] FROM Customer ORDER BY [CustomerID];" 

    'clear all fields 
    ClearJobFormFields 

    'disable all controls until a customer is selected 
    DisableJobFormControls 

    With cmbCustomer 
     .ControlSource = "Customer" 
     .RowSource = sql 
     .ColumnCount = 2 
     .ColumnWidths = "1cm; 3cm" 
     .BoundColumn = 0 
    End With 

    cmbCustomer.ControlSource = "Customer" 
    cmbCustomer.RowSource = sql 

End Sub 

要注意,每個窗體都是獨立的 - 我沒有使用子窗體。形式,這是對(NewJob)是否有AllowEdit設置爲yes,並且形式沒有RecordSource綁定到它。

組合框DOES正確填寫,但每次我嘗試選擇一個項目,我得到的錯誤:「控制不能編輯它綁定到未知領域的客戶。」

而這一切就是這麼簡單。對不起,如果這是一個常見/容易解決的問題,但它已經困擾了我好幾天。

+2

爲什麼使用VBA填充它?這太過分了。在該窗體的設計窗口中,單擊您的組合框,然後按F4以轉到屬性。在數據選項卡中,將您的查詢輸入到數據源屬性中。 – ApplePie

+2

此外,通常當您在表單上插入組合框時,它會自動詢問您要提供的數據源,您是否跳過該步驟?最後一步就是在AfterUpdate事件上綁定一個事件並解鎖所有以前鎖定的控件。 – ApplePie

回答

0

如果你的表單沒有記錄源,你的控件不應該(不能)有一個Controlsource。如果你在設計模式窗體的屬性,你會看到,客戶是不是在控件屬性的有效選擇。 爲什麼你沒有一個記錄源。表單的目標不是輸入Job數據嗎?

0

當您設置通過VBA行來源屬性,你應該把這個作爲對無粘結控制和廢料:

cmbCustomer.ControlSource = "Customer" 

你開放的形式子應該更多這樣的:

Private Sub Form_Open(Cancel As Integer) 

Dim db As Database 
Dim recordSet As DAO.recordSet 
Dim sql As String 

    sql = "SELECT [Customer].[CustomerID], [Customer].[FirstName] & [Customer].[LastName] FROM Customer ORDER BY [CustomerID];" 

    'clear all fields 
    ClearJobFormFields 

    'disable all controls until a customer is selected 
    DisableJobFormControls 

    With cmbCustomer 
     .RowSource = sql 
     .ColumnCount = 2 
     .ColumnWidths = "1cm; 3cm" 
     .BoundColumn = 0 
    End With 

End Sub 

而且那麼您可以使用此組合框的更新事件來確定是否啓用作業詳細信息字段:

Private Sub cmbCustomer_AfterUpdate() 

    'Check it's populated and set fields as necessary 
    If cmbCustomer & "" = "" Then 
     txtJobDetails.Enabled = 0 'Change this fieldname as required 
    Else 
     txtJobDetails.Enabled = -1 
    End If 

End Sub