我的Access数据库(2007)有四个表;客户,供应商,帐户和AccountAgeing
AccountAgeing有一个复合键,由其他两个表的外键和一个日期组成。即;
AsAtDate,SupplierID,AccountNumber
我通过临时表从excel导入数据,我的父表(客户,供应商,帐户)导入得很好。
但是,从我的tempTable导入AccountAgeing持续存在密钥违规。在749种可能的进口中,746违反了该关键。要测试的查询是:
SELECT DISTINCT tempTable.[SupplierID], #31/7/14#, tempTable.[AccountNumber]
FROM tempTable;
这返回了749条记录(全部)。如果是这种情况,我如何进行密钥违规?
复合关键字段都已编制索引,重复数据正常。目标表中没有数据 我有日期和[帐号]索引,因为搜索将在这些字段上。
答案 0 :(得分:1)
以下是您可以尝试的一系列故障排除步骤。
这些步骤可以引导您获得一些见解。只是一个猜测 - 但听起来你可能有某种数据类型不匹配。在这种情况下,Access有时会动态转换数据并插入它而不会出错。但在此过程中,数据的性质会发生变化,从而导致目标表中的密钥违规。
我很想听听你发现了什么。当你弄清问题是什么时,请发表评论。
希望它有所帮助。祝你好运。
答案 1 :(得分:1)
谢谢马蒂!我试图手动填充,这是错误的,因为在Customers表中没有匹配的记录。
我发现我错误地将AccountAgeing指定为客户的父级,而不是客户的父级。
业务逻辑是AccountAgeing记录将始终具有帐户,但AccountAgeing记录并不总是提及公司编号(Customer表的主键)。
修复程序将Account Aging组合键的一部分绑定到Accounts复合键。
我不确定当我添加一个帐号但没有公司号的ATBRecord时会发生什么,但这是另一个问题
答案 2 :(得分:0)
检查表属性中的Indexed属性 - 确保在任何复合键字段上没有设置为Duplicates OK