1

我有一个带有 2 个主键的数据库,一个用于 LINE NUMBER,一个用于构建阶段。这样做的原因是我们的项目可能使用相同的行号,但必须完全单独跟踪项目的多个阶段。我所拥有的是一个组合框,它将驱动表单上的记录信息。这很好用,但是现在当我有多个阶段时,它只会打开生产线的第一阶段,而不是其他 4 个阶段。当挑选出非第一阶段的东西时,它会产生第一阶段信息。

有没有办法将组合框与 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
4

2 回答 2

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
于 2013-07-23T19:01:22.233 回答
0

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

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

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

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

于 2013-07-23T18:56:24.523 回答