vba
  • ms-access
  • access-vba
  • ms-access-2007
  • 2014-10-29 123 views 2 likes 
    2

    我有兩種形式,一種是數據輸入形式,另一種是列出數據庫中所有記錄的摘要形式。在摘要表單上有一個列出所有記錄的列表框。我希望用戶能夠從列表框中選擇一條記錄並使用命令按鈕,打開第二個表單到特定記錄。我已經得到了這個工作,使用特定的領域,在一個案例中「姓名」,使用下面的代碼:MS Access 2007使用VBA打開獨立窗體到特定記錄

    DoCmd.OpenForm "frmEditAddPerson", acNormal, ,"[PersonName]='" & Me.listPeople.Value & "'" 
    

    ,但是當我意識到兩個人可以有相同的名字,我決定這是有道理的使用PersonID是主鍵,其數據類型是「AutoNumber」。我似乎無法得到這個工作:

    DoCmd.OpenForm "frmEditAddPerson", acNormal, "[PersonName] = " & SelectPersonID 
    

    注意,我收到來自一個隱藏的列從Control拉SelectedPersonID。我確認我試圖通過在試圖調試時在MessageBox中顯示AutoNumber字段的數字值來得到正確的值。

    對於這個方法/命令的WHERE參數,我知道你應該在引號中包含字符串值,不包含整數,並且在SQL語句中包含「#」的日期。我試過將SelectedPersonID作爲一個字符串和一個整數進行分離,並且仍然無法獲得上述工作。我甚至嘗試了以下方法以確保:

    DoCmd.OpenForm "frmEditAddPerson", acNormal, "[PersonName] = " & CInt(SelectPersonID) 
    

    每次我得到「類型不匹配」。自動編號字段的特殊之處在於它不能用於這樣的事情,還是需要以特殊的方式處理?

    回答

    3

    如果PersonID是自動編號主鍵,請在第四個參數OpenForm中參考(WhereCondition)。您的OpenForm示例仍包括PersonName而不是PersonID

    此外,在您的最後兩個示例中,PersonID在第三個參數OpenForm中引用(FilterName)。

    DoCmd.OpenForm "frmEditAddPerson", acNormal, , "[PersonID] = " & SelectPersonID 
    

    它可以更容易地跟蹤哪些選項是通過包括選項名稱。

    DoCmd.OpenForm FormName:="frmEditAddPerson", View:=acNormal, _ 
        WhereCondition:="[PersonID] = " & SelectPersonID 
    
    +0

    謝謝!你的最後一個建議幫助我清理了我的代碼,現在我沒有收到錯誤,但是當它啓動表單時,它將它啓動到空白/新記錄而不是被選中的記錄。 – smk081 2014-10-29 22:20:52

    +1

    在設計視圖中打開該窗體,檢查其屬性表上的數據選項卡。找到數據輸入屬性。如果是,請將其更改爲No. – HansUp 2014-10-29 22:23:28

    +0

    好吧,看起來像是最後一塊。數據輸入=是表示該表單將只允許添加新記錄。它不會顯示現有記錄。 – HansUp 2014-10-29 22:34:15

    相關問題