2016-08-18 75 views
1

我在Access中創建數據庫很新,但我不是子窗體的粉絲,我已經可以說很多了,他們很適合一對多的關係(一個客戶,很多訂單),但是當我只想減少冗餘並在表和表之間建立一對一的關係時,只有在任何時候都需要來自另一個表的一條記錄,那麼子表單就不再那麼好了。MS Access窗體來更新沒有子窗體的多個表格

我的例子:

我有2個表,1家公司(ID,公司名稱,國家ID),一個用於國家(國家ID,國家名稱)。爲了消除國名的重複,我使用國家ID來鏈接2個表,並且只添加國家的ID,而不是其名稱。

當我爲「公司」表創建表單時,我想要一個字段說明公司所在的位置而不是子表單(因爲我還沒弄清楚如何隱藏它的方框),所以實際上有一個字段連接到不同的表格。

然後通過一對一連接,當選擇一條記錄時,表單將顯示在公司所在的一個字段中。這可能嗎?

額外:我在我的「國家」表中有2個國家,英國和德國,但是我從這個表格中增加一個記錄的新公司,位於法國,是否有可能我剛剛進入法國它會自動在法國的「國家/地區」表中創建一條新記錄,並將新記錄的ID添加到位於法國的公司,該公司位於法國

回答

0

是的,這是絕對可行的。我這樣做的方式是使用未綁定的表單,所以我控制所有的SQL語句來告訴數據要做什麼以及去哪裏。

由於您有3個字段被髮送到「公司」表中的一行中,並且2個字段被髮送到國家/地區表中的一行中,其中1個字段處於關係中(我假設1對多) ,在你的表單上創建4個文本框(或任何其他控件)。這些控件將用於:ID(假設這是用戶輸入的而不是自動編號,如果是,請在下面註釋),公司名稱,國家/地區,國家/地區名稱。當你全部填寫完畢後,請點擊一個帶有Click事件的按鈕。在這裏你將有2條SQL語句插入記錄,每條表有1條記錄。

的代碼看起來就像這樣:

Private Sub button_Click() 

DoCmd.RunSQL "INSERT INTO companies VALUES ([ID].Value, [company name].Value, [country ID].Value)" 
' The words in the [] are the names of your controls on the form 
DoCmd.RunSQL "INSERT INTO country VALUES ([country ID].value, [country name].value)" 

End Sub 
0

看來你的窗體和子窗體直接基於表。嘗試以查詢爲基礎的主窗體:

SELECT 
    company.ID, 
    company.CompanyName, 
    company.CountryID, 
    country.CountryName 
FROM 
    company 
    INNER JOIN country ON 
     company.CountryID = country.CountryID 

這將消除對子窗體的需要。

額外:您可能實際上想要在單獨的窗體上使用「國家/地區創建」功能,或者通過此主窗體上的按鈕按鈕進行調用。

擁有強制用戶從列表中選擇標準國家的國家ID是一個非常好的主意。但是,如果你讓他們任意輸入新的在同一個盒子你試圖阻止他們從薄霧中,好的工作可以取消。