2013-06-25 57 views
0

我有一個Access窗體,它列出了表中的所有記錄。該表中的一列是指「設備」表,然後它具有對「品牌」列的外鍵引用。在表單中,由於每行的組合框中有一些魔術,所以顯示品牌名稱+設備名稱。在保持添加能力的同時按國外字段排序記錄

問題:如何按品牌名稱排序此表單,同時保留創建新記錄的能力?這是我當前的查詢:

SELECT ehs.* 
FROM ehs, brand, device 
WHERE brand.ID=device.brand_id AND ehs.device_id=device.ID 
ORDER BY brand.brand_name, device.model; 

顯然(並且可以理解),當查詢中有一個連接時不能添加記錄。什麼是排序清單的更好方法?

回答

1

可以創建一個窗體,在查詢中有一個允許添加和更新的外鍵。我剛剛在Access 2010中做了這個確認。

有可能你用組合框提到的一些魔法已經打破了這樣做的能力。

注:我剛剛注意到我用DeviceName你使用過model - 你需要調整下面的SQL。

有一些技巧,但:

  • 確保所有的表都有主鍵(很難避免在Access)
  • 確保您所有的外鍵索引(所以brand_id在設備表和ehs表中的device_id) - 重複確定。
  • 使用關係圖來畫這些表

然後,我創建了一個查詢之間的關係 - 我只是使用的查詢設計師,所以訪問有趣brackety安排是其所有自己做的:

SELECT ehs.* 
FROM (Brand INNER JOIN Device ON Brand.brandID = Device.BrandID) INNER JOIN ehs ON Device.DeviceID = ehs.DeviceID 
ORDER BY Brand.Brandname, Device.DeviceName; 

如果您在數據表視圖中查看該應用程序,則應該可以添加記錄。這很重要,如果你不能解決問題,如果可以的話,我們就可以了。

如果這樣做,那麼我建議根據此查詢創建一個新的表單,並驗證新表單允許您添加記錄。這個新的表單基本上會有一個device_id的id號。所以你必須輸入一個數字才能使其工作。

你將要執行的,和我猜的東西的訣竅是造成你的問題:

爲了有一個「品牌」下拉菜單,你選擇一個品牌,這然後限制設備下拉選項。

這是真正棘手的(我恐怕在Access中有點生疏,而且這不是真的)。

什麼是CAN可以輕鬆地做到這一點,它具有包含品牌名稱的設備下拉菜單,並對其進行適當的排序。

我在窗體中添加了一個組合框。嚮導會引導您使用表格或查詢,我只是選擇了設備表格(稍後我們將對此進行調整),以及字段 - 您需要device_id model和brand_id,以及顯示內容(model和brand_id - 我們將調整它),它隱藏了主鍵。當它說「你想保存它以備後用還是將它存儲在此字段中時,請選擇將其存儲在此字段中並選擇device_id(位於ehs表中)。

當嚮導完成時,單擊新組合框,然後獲取它的屬性切換到數據選項卡,在RowSource旁邊有一個構建器[...]按鈕,點擊它,你會看到一個查詢構建器,添加品牌表並顯示品牌名稱字段並隱藏(我們只是選擇了這個,所以組合框有兩列)

當你關閉它時,它會問你是否要保存它,所以說是的。 SQL將是類似的(由於我的錯誤,適當的字段名稱更改):

SELECT Device.DeviceID, Brand.Brandname, Device.DeviceName 
FROM Brand INNER JOIN Device ON Brand.brandID = Device.BrandID 
ORDER BY Device.DeviceName; 

您的表單現在應該有一個組合框,顯示未選擇時的設備名稱以及選擇下拉列表時的設備名稱和品牌名稱。

然後,您可以從窗體中刪除原始device_id文本框。

您還可以將品牌名稱添加到源查詢並將其添加爲表單上的文本字段,以便您可以在設備旁邊看到品牌,即使它不在下拉列表中。

的形式主要查詢可以是:

SELECT ehs.*, Brand.Brandname 
FROM (Brand INNER JOIN Device ON Brand.brandID = Device.BrandID) INNER JOIN ehs ON Device.DeviceID = ehs.DeviceID 
ORDER BY Brand.Brandname, Device.DeviceName; 

您可以添加名優產品爲文本框 - 你不需要設備名(模型),因爲這顯示在組合框中。

而你應該仍然可以添加記錄。

所以,這並不理想,但比編碼一堆VBA簡單很多,這是我認爲如果你想分開你的組合框(不確定),你需要去哪裏,特別是因爲這不是反正原來的問題。

我建議你做每一步,並驗證它仍然在每個階段工作。

祝你好運。

+0

嗨格雷格,非常感謝!我調整了您提供的第一個查詢並將其設置爲記錄源,並且現在可以使用。猜猜訪問不完全理解'WHERE table1,table2'語法... –

相關問題