MS Access组合框使用两个主键设置记录

时间:2013-07-23 17:57:24

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

我有一个包含2个主键的数据库,一个用于LINE NUMBER,另一个用于构建PHASE。这样做的原因是我们的项目可能使用相同的行号,但必须完全独立地跟踪项目的几个阶段。我所拥有的是一个组合框,它将驱动表单上的记录信息。这样可以正常工作,但是现在当我有一个以上的阶段时,它只会显示该行的第一阶段而不是其他4阶段。当选择除phas之外的其他东西时,它会产生第一阶段信息。

有没有办法将组合框与2个字段联系起来,根据拾取的两个字段选择合适的记录?

或者我可能需要按照表单的方式进行更新...有更好的方法吗?

用于选择记录的代码:

Sub SetFilter()

    Dim LSQL  As String

    LSQL = "select * from tblLineData_Horizon"
    LSQL = LSQL & " where lineno = '" & cboSelected & "'"

    Form_frmHorizon_sub.RecordSource = LSQL

End Sub

Private Sub cboSelected_AfterUpdate()

    'Call subroutine to set filter based on selected Line Number
    SetFilter

End Sub

Private Sub Form_Open(Cancel As Integer)

    'Call subroutine to set filter based on selected Line Number
    SetFilter

End Sub

2 个答案:

答案 0 :(得分:1)

一个基本想法,但你很可能想稍微调整一下这个行为并进行更多检查。加载表单时,您只能选择LineNo。当cbxLineNo中包含值时,它会启用cbxPhaseNo进行选择,一旦选择,它就会更改子表单的RecordSource

Private Sub cbxLineNo_AfterUpdate()
    If IsNull(cbxLineNo) Then
        cbxPhaseNo.Enabled = False
    Else
        cbxPhaseNo.Enabled = True
        cbxPhaseNo.RowSource = "SELECT PhaseNo FROM tblLineData_Horizon WHERE LineNo = " & cbxLineNo & ";"
    End If
End Sub

Private Sub cbxPhaseNo_AfterUpdate()
    If IsNull(cbxPhaseNo) = False And IsNull(cbxLineNo) = False Then
        tblLineData_Horizon_sub.Form.RecordSource = "SELECT * FROM tblLineData_Horizon WHERE LineNo = " & cbxLineNo & " AND PhaseNo = " & cbxPhaseNo & ";"
    End If
End Sub

Private Sub Form_Load()
    cbxLineNo.Enabled = True
    cbxPhaseNo.Enabled = False

    cbxLineNo.RowSource = "SELECT LineNo FROM tblLineData_Horizon GROUP BY LineNo;"
End Sub

答案 1 :(得分:0)

您的问题有点不清楚,但您可以创建一个包含多个列的组合框,然后您的select语句将是:

where lineno = '" & cboSelected.Column(0) & "' And otherfield='"& cboSelected.Column(1)&"'"

单击其RowSource属性并单击“构建”按钮(...),转到组合框后面的查询。添加所需的列后,调出查询的属性并将Unique Values设置为是,以便它不会重复这些字段的组合。

您还需要更改组合框的其他属性:“列数”和“列宽”。