2012-11-30 95 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