2013-07-23 61 views
1

我有一個帶有2個主鍵的數據庫,一個用於LINE NUMBER和一個用於PHASE構建。其原因是我們有可能使用相同線路號的項目,但必須完全分開跟蹤項目的幾個階段。我擁有的是一個組合框,它將驅動表單上的記錄信息。這工作正常,但現在當我有多個階段時,它只會提出該線的第一階段,而不是其他四個階段。如果選擇除階段1以外的其他項目,則會生成第一階段信息。MS Access組合框使用兩個主鍵設置記錄

有沒有辦法將兩個字段的組合框連接起來,根據兩個字段選擇合適的記錄?

或者我需要重新提交表單的方式......有沒有更好的方法來做到這一點?

代碼用來選擇記錄:

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 
+1

想到兩個想法。通過組合您的兩個字段並使用查詢將表單中的所有數據集中在一起,可以生成組合的唯一標識符。其次使用兩個獨立的下拉菜單,並有一個命令按鈕觸發子窗體中的數據檢索。 –

+1

數據庫的不同表可以有一個主鍵。一個表不能有多個PK,但一個表可以有一個多字段的主鍵。也就是說,一個主鍵是多個字段的組合。你應該澄清你的問題。 –

回答

0

你的問題是有點不清楚,但你可以創建多個列的組合框,那麼你的select語句應該是:

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

單擊其RowSource屬性並單擊生成按鈕(...),轉到組合框後面的查詢。一旦添加了所需的列,調出查詢的屬性並將Unique Values設置爲是,以便它不重複字段的組合。

您還需要更改組合框的其他屬性:「列數」和「列寬」。

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