簡體   English   中英

如何在 Access 表單中以多對多關系填充第三個表? (MySQL 后端)

[英]How can I populate the third table in a many-to-many relationship in an Access form? (MySQL backend)

首先,這里是相關表之間的關系。

我正在開發一個 Access 前端,作為底層 MySQL 數據庫的 CRUD,我主要是在多對多關系中正確表示表並與之交互。 我按照本教程中的說明進行操作,我的表單大部分都可以使用。 但是本教程示例的局限性在於關系中的第三個表(在我的例子中,地址)是 static,並且不能從表格中更改。

這是我的表單目前的外觀。 在 people_has_addresses 子表單中添加新條目時,如果我希望通過將其 ID 輸入到addresses_addressID 列中來添加地址表中已經存在的地址,一切正常。 列的 rest 自動加載到地址中,並且 people_has_addresses 使用 PersonID 和 AddressID 的這種唯一組合自動填充新行。 當我想動態創建一個新地址,將其添加到地址表中,並用這個新組合填充 people_has_addresses 時,問題就來了。 如果我在子表單中自由輸入新地址並按回車鍵,我會收到以下錯誤:“Microsoft Access 數據庫引擎無法在表 'addresses' 中找到具有關鍵匹配字段 'addresses_AddressID' 的記錄。”

我的問題是,我需要做什么才能允許在地址中創建新行? 理想情況下按照我上面描述的方式工作。 我覺得我快要做到這一點了,但不知道從這里該怎么做。

好的,所以該行中的組合框讓您 select 給定地址。 您並沒有真正描述過,如果您有 10 個地址,您想在郵件列表中顯示哪個地址,或者什么不是。 您可以做的是在您插入(保存)地址ID的表中添加一個額外的列,並添加一個“默認”復選框。 然后,您可以使用默認地址列 = true 進行查詢,以僅提取一個地址用於郵寄等。因此,在此示例中,我確實有一個 select 復選框,默認情況下將使用許多地址。 我們可以為家庭、商業、度假地點或其他任何內容添加另一列。 這樣,您可以將地址歸類為它是什么。

但是,問題和您的問題當然是如何添加新地址?

有很多方法可以做到這一點,就像冰淇淋的味道一樣。 換句話說,這取決於你的創造性思維。 一種方法是使用不在列表事件中的組合框。 因此,如果您輸入的地址 ID 不存在,系統可能會提示您輸入。 然而,用戶在數據輸入過程中不應該看到、知道或使用一些愚蠢的“id”。 事實上,用戶在使用應用程序期間甚至不應該看到 PK 或 FK id。

我建議你在組合框旁邊,讓你 select 一個地址是放置一個按鈕來添加一個新地址。 您可以使用 + 號之類的圖形圖像。 因此,他們可以使用組合框來 select 一個現有地址,或者單擊 + 按鈕添加一個新地址。 按鈕后面的代碼會啟動一個表單來編輯地址,但在添加模式下啟動表單。 當您關閉/保存表單時,代碼可以/將填充您剛剛添加到地址的 FK Address_ID 列中的新地址的 PK id。

為了虐待動物和你的用戶? 他們不需要知道或看到或輸入一些“數字”。 組合框可以隱藏第一個PK列。 因此,當您 select 給定地址(在此示例中為酒店,但它可能只是一個地址)時,您會顯示名稱。 因此,用戶無需展開組合框,只需開始輸入酒店名稱即可。 公平地說,有了地址,你真的沒有要輸入的“名字”,所以你的情況有些不同。 在大多數情況下,您選擇的東西有一些名稱,或部件名稱/編號,或者在我們的例子中是酒店名稱。

請注意,子表單基於連接其他列的查詢。 所以,當他們破解組合框的時候,他們其實是在選擇一個PK。 就像魔術一樣(並且沒有代碼),然后從另一個表中自動顯示城市,省,描述列。

所以表格看起來像這樣: 在此處輸入圖像描述

在上面,我們選擇了幾家酒店。 但是,請注意要使用哪個地址的復選框,因為我們可能有多個,但對於打印信函或信封,復選框將確定將出現哪個地址。

在上面,如果我們沒有找到或沒有我們想要使用的酒店(或地址),那么我們可以點擊組合框旁邊的 + 號。 這將啟動一個很好的單一表單布局來輸入新的酒店(或地址)。 如前所述,如何設置 UI 以使其工作在很大程度上是一個開放的 canvas。 獲得靈感的一種好方法是查看您使用的其他軟件。 那么,如何為 outlook 用戶添加多個地址? 所以,關於你想如何做到這一點,存在大量的方法和想法。 這並不是真正的如何做到這一點,而是你希望它如何工作,因為你可以根據自己的意願設計它,讓它隨心所欲地工作。

所以,PK id 不應該在這里暴露。 用戶無法關心或知道這些事情。 我的意思是,當我輸入這個回復時,毫無疑問,驅動堆棧溢出的 SQL 服務器為這篇文章生成了一個新數字——但這不是用戶的事情,只是開發人員需要關心的事情。

好的,所以我們構建了那個子表單。 驅動那個子表的表只有

ID  (PK) 
Customer_ID   (FK to parent form driving this)
Hotel_ID      (FK to hotel - or in your case address)
DefaultAddress (true/false column)

如前所述,我們應該添加 ONE MORE 列,將地址設置為要使用的默認地址。 例如:默認地址。

. 所有其他列都顯示為左連接的結果。 (此子表單的左連接非常重要)。

現在,如果酒店不在我們的選擇列表中,那么用戶只需點擊組合框旁邊的 + 號,我們就會彈出一個漂亮的表單來編輯/添加新酒店。 請注意,當您使用 outlook、會計系統或任何軟件時? 您沒有看到和輸入 PK id 值 - 只有開發人員才能看到,最終用戶永遠不會看到或必須處理實際的 PK 編號。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM