2015-11-05 54 views
1

我有一個彈出窗體,它使用MS Access數據庫中主窗體上的按鈕打開。彈出窗體創建一個新的記錄(在單獨的表格中),需要鏈接到主窗體中的當前記錄。我該如何正確設置它?彈出窗體創建記錄,將1:1鏈接到主窗體

兩種形式(frmMain,frmWB)基於2個獨立的表(tblMain和tblWB)。記錄具有1:1的關係(每個主記錄只能有一個WB1記錄)。

主要形式(frmMain)具有主鍵[ID]

從(frmWB)彈出具有主鍵[WBID](自動編號)和[MainID](數)。

數據錄入人員將首先進入主信息(這將有需要避免孤兒),然後點擊一個按鈕,保存主記錄,並打開彈出窗體中添加詳細信息。完成後,他們點擊關閉按鈕,保存彈出記錄,關閉彈出窗口,然後返回到主窗體(後者保持打開狀態)。導航已在彈出窗口中被禁用,並且它被設置爲循環當前記錄。

我已經嘗試使用兩個表的主ID進行鏈接,但在彈出窗口中添加新記錄時,似乎並沒有可靠地鏈接正確的ID號。我嘗試過使用子窗體,但是如果主窗體上的導航或「新記錄」按鈕在子窗體中輸入數據時意外擊中,就會出現問題 - 這會在tblWB中創建具有錯誤ID號的記錄。

+0

通常的方法是在彈出窗體的'BeforeInsert'事件中設置外鍵。你嘗試過嗎?這假設彈出窗口是一個綁定窗體。 – Andre

+0

嗨安德烈,我會用什麼代碼來設置外鍵? – Amarok

回答

-1

與Andre的評論相反,通常的方法是在兩個表之間創建關係,強制引用完整性並使用級聯更新。

雖然this article特定於Office 2003,但所有版本的Access的概念都是相同的。如果你這樣做,彈出窗口會自動創建一個鏈接到主窗體記錄的新記錄。

+0

他插入記錄,不更新主鍵。關係如何自動設置獨立表單之間的外鍵? – Andre

+0

他正在另一個表中添加一條新記錄。這正是級聯更新所要做的。 –

+0

對不起,但沒有。級聯更新將主鍵中的**更改**傳播給相關表。 - 從您鏈接的文章中:「如果您在定義關係時單擊以選中Cascade更新相關字段複選框,那麼無論您何時*更改主表中記錄的主鍵*,Microsoft Access都會自動更新所有相關記錄中新值的主鍵。「 – Andre

0

如果frmWB開啓模式,使frmMain的當前記錄不能被改變,而彈出是開放的,你有這樣的frmWB的BeforeInsert事件過程中:

Private Sub Form_BeforeInsert(Cancel As Integer) 
    Me!MainID = Forms!frmMain!ID 
End Sub 

這種自動分配將tblMain ID添加到新創建的tblWB記錄中。

MainID應該是frmWB上的一個不可見文本框,綁定到表字段MainID。在調試時,您可以使其可見,但它應該被鎖定。

如果frmWB不是模態的,我會使用OpenArgs將ID從frmMain傳遞到frmWB。然後用Form_BeforeInsert代替Forms!frmMain!ID

相關問題