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

Posted

技术标签:

【中文标题】MS Access 组合框使用两个主键设置记录【英文标题】:MS Access combo box setting a record with two primary keys 【发布时间】:2013-07-23 17:57:24 【问题描述】:

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

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

【问题讨论】:

脑海中浮现出两个想法。通过组合您的两个字段并使用查询将表单的所有数据拉到一起来制作组合的唯一标识符。其次使用两个单独的下拉菜单,并让一个命令按钮触发子表单中的数据检索。 一个数据库的不同表可以有一个主键。一个表不能有多个 PK,但一个表可以有一个多字段主键。也就是说,主键是多个字段的组合。你应该澄清你的问题。 【参考方案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

【讨论】:

【参考方案2】:

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

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

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

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

【讨论】:

以上是关于MS Access 组合框使用两个主键设置记录的主要内容,如果未能解决你的问题,请参考以下文章

在 MS Access 中根据表单中的多个组合框查询所有记录

MS-Access 表单组合框不能限制粘贴的记录

MS-Access 2013;根据多记录形式的记录数据更改组合框选项

如何更新 ms access vba 中的多值组合框?

表链接表单上的 MS Access 绑定组合框

MS Access Query-By-Form 问题