2009-04-13 34 views
4

我有一個Access數據庫。讓我們假裝它是爲了一家寵物商店。爲什麼Microsoft Access表單會爲一個查詢創建記錄,而不是另一個?

有一張動物的桌子。

Animals (animal_id, birth_date, price) 

然後我們銷售的不同類型的動物的具體表。

Dogs (animal_id, bark_volume) 
Cats (animal_id, collar_size, shedding_rate) 
Fish (animal_id) 

魚沒有意思,所以他們沒有任何特殊的領域。魚桌只是存在,所以你知道動物表中的哪些記錄是魚。

現在,我有一個通用的形式爲寵物店添加動物。在你獲得表格之前,你首先必須說出你要添加什麼樣的動物。基於此,表單顯示/隱藏字段,更改其記錄源,並將字段綁定到適當的數據列。表單從查詢DogInfo,CatInfo和FishInfo中提取數據。

現在,當你進入一隻狗或一隻貓,一切都很好。記錄被添加到動物和狗或貓。

但是,當你輸入一個魚,你得到的只是一個動物,沒有魚。

這可能是什麼原因造成的?這是否由於魚桌上缺少其他列造成的? (讓我們拋開一個事實,即使用select查詢更新表格根本沒有意義,我沒有指望Access讓我在第一時間做到這一點,但是Access的格言似乎是「讓不好的事情容易做到,做對的事情尷尬。「數據庫相對簡單並且很少使用,而且至少比我開始研究之前好過100倍,所以我並不太擔心關於這個問題,只要我能使它工作。)

+0

這個表設置有很多錯誤。我希望這只是一個沒有經過精心設計的例子。 – Fionnuala 2009-04-14 12:56:41

+0

基本的設計是基於此:http://stackoverflow.com/questions/554522/something-like-inheritance-in-database-design/554681#554681 – 2009-04-14 13:06:35

+0

這有很多錯誤,搜索谷歌'訪問表結構體'。 – zuk1 2009-04-23 12:37:35

回答

7

「這是否由於魚桌上缺少其他列導致?」

是 - 當你的孩子記錄(貓狗)輸入數據的訪問將自動在父ID(animal_id)

填補由於是它不會產生魚記錄沒有數據項。你必須在代碼中這樣做。不知道如何表單和數據源是安裝程序,但你會做形式的活動之一是這樣的:

Fish![animal_id] = Animal![animal_id] 

編輯

在你FishInfo查詢,您必須給Fish.[animal_id]一個別名 - 你可以「T有兩個名稱相同的領域 - 稱之爲Fish_animal_id

然後在Form_BeforeUpdate事件把這個:

Me.Fish_animal_id = Me.animal_id 
0

你沒有狗/貓/魚表的單獨ID?假設唯一的區別是列的數量,我會很好奇,如果突然修復它。

2

哈你有沒有想過在不同的表上配置關係?鑑於上面的設計,我將開始在特定動物表中添加一個標識列,並將其設置爲主鍵。例如。:

Dogs(DOG_ID, animal_id, bark_volume) 
Cats(CAT_ID, animal_id, collar_size, shedding_rate) 

等。在關係視圖,然後你會定義一個一對多(一到一個?)的關係從Animals.ANIMAL_IDDogs.animal_id。然後,您可以將動物表連接到窗體上的組合/列表框控件以從該表中選擇記錄。我想如果你正確地配置控件,你甚至可以從該控件創建新的記錄(或者你可以使用子窗體)。

0

不好的設計撇開,你建立了各種表之間的關係?你是否設置了表來強制引用完整性?

相關問題