簡體   English   中英

如何解決MS Access中的組合鍵沖突

[英]How to Troubleshoot composite key violation in MS Access

我的Access數據庫(2007)有四個表; 客戶,供應商,帳戶和帳戶年齡

AccountAgeing具有由其他兩個表的外鍵以及日期組成的復合鍵。

AsAtDate,供應商ID,帳號

我正在通過臨時表從excel導入數據,而我的父表(客戶,供應商,客戶)也能很好地導入。

但是,從我的tempTable連續導入AccountAgeing有一個關鍵沖突。 在749種可能的進口產品中,有746項違反了密鑰。 要測試的查詢是:

SELECT DISTINCT tempTable.[SupplierID], #31/7/14#, tempTable.[AccountNumber]
       FROM tempTable;

這返回了749條記錄(所有記錄)。 如果是這種情況,我該怎么辦?

復合鍵字段均已建立索引,並且重復OK。 目標表中沒有數據 這些是我表上的索引(顯然,我已簡化了問題中的名稱 我已為日期和[帳號]編制了索引,因為這些是將在其中進行搜索的字段。

這是您可以嘗試的一些故障排除步驟的序列。

  1. 從目標表中刪除主鍵並填充它。 如果無法填充目標表,則問題可能不是鍵本身,並且可能會根據收到的錯誤消息而變得明顯。
  2. 如果確實填充了目標表,請嘗試將所需的組合鍵添加到已經填充的目標表中。
  3. 如果無法添加鍵,請在填充的目標表上重新運行“選擇不同的”查詢。
  4. 如果您沒有選擇749個不同的行,請目視檢查表內容以查看發生了什么。

這些步驟將使您獲得一些見識。 只是一個猜測-但聽起來您某處的數據類型可能不匹配。 在這種情況下,Access有時會即時轉換數據並將其插入而不會給出錯誤。 但是在此過程中,數據的性質發生了變化,從而導致目標表中的鍵沖突。

我很想知道您的發現。 找出問題所在時,請發表評論。

希望能幫助到你。 排除故障,祝您好運。

謝謝你馬蒂! 我嘗試手動填充,這是錯誤的,因為在客戶表中沒有匹配的記錄。

我發現我錯誤地將AccountAgeing分配為客戶而不是客戶的父級。

業務邏輯是AccountAgeing記錄將始終具有一個Account,但是AccountAgeing記錄並不總是提及公司編號(Customer表的主鍵)。

該修復程序將Account Aging組合鍵的一部分綁定到Accounts組合鍵。

在此處輸入圖片說明

我不確定添加具有帳號但沒有公司號的ATBRecord時會發生什么,但這是另一個問題

檢查表屬性中的索引屬性-確保在任何組合鍵字段上都未將其設置為“重復”,然后單擊“確定”。

暫無
暫無

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

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