2010-06-29 87 views
0

我正在使用Access 2000,我有一個綁定到兩個表上的可更新查詢的表單。插入到可更新的查詢中

下面是查詢的簡化版本:

SELECT tblA.ID AS MainID, tblB.ID, tblA.ItemX, tblB.ItemY 
FROM tblA INNER JOIN tblB ON tblA.ID = tblB.ID; 

柱tblA.ID是輸入「自動編號」,並且是主鍵。列tblB.ID是長整數,具有唯一索引,並且是必需的。從tblA.ID到tblB.ID有一對一的「執行參照完整性」關係。

假設窗體的文本框綁定到MainID,ID,ItemX和ItemY。 問題是,如果用戶啓動一個新行,只在ItemX中輸入一個值(即沒有任何tblB列),並進行保存,Access只向tblA插入一行。沒有行被插入tblB。然後查詢不能隨後檢索剛插入的內容。

這是正常的訪問行爲,還是應該訪問能夠在tblB中插入一行,只有新生成的ID值和所有其他tblB列爲空?

+0

一般來說,如果希望可編輯表單,建議避免將表單綁定到具有多個表格的記錄源。 – 2010-06-29 22:17:16

+0

大衛,謝謝你提醒我。請注意,如果您嘗試更新多表查詢中的表並且它不工作,則有時查詢屬性Recordset Type = Dynaset(Inconsistent Updates)會有所幫助。 – 2010-06-30 01:42:37

+0

...當然,還有魔術噴射/ ACE-only DISTINCTROW。 – 2010-07-01 02:03:48

回答

1

如果查詢將連接定義爲「僅包含來自兩個表的hte連接字段相等的行」,這是正常行爲。嘗試將連接更改爲「包含來自TableA的所有記錄,並且只有來自TableB中他加入字段的記錄相同。」要在設計視圖中更改此查詢並右鍵單擊從TableA到TableB的行。

請注意,1對1關係在數據庫系統中通常是不常見的。這些是什麼類型的表?

+0

+1這看起來好像是「正確」的方式,即無論如何都不要在tblB中保存一行。如果你真的想要強制保存行,你需要添加一些VB代碼來設置一個tblB字段,從而使Access認爲行需要保存。但從數據庫設計的角度來看,插入空行沒有多大意義。 – 2010-06-29 09:57:03

+0

re:什麼類型的表是那些類型,它是一個子類型/超類型安排,帶有一個tableA系統和許多不同的tableB。每個tableA/tableB組合都有其自己的可更新查詢。系統將每個查詢視爲一個虛擬表。鑑於這是正常行爲,並且這個問題很少發生,我會採用Todd的建議並添加VBcode來設置tblB字段。感謝您的建議!! – Carlos 2010-06-29 16:02:46

+0

除了外連接外,還有僅限訪問的DISTINCTROW謂詞可以幫助編輯多表記錄集。 – 2010-06-29 22:18:16