我有一个包含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
答案 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
设置为是,以便它不会重复这些字段的组合。
您还需要更改组合框的其他属性:“列数”和“列宽”。