Ms access 具有引用完整性的MS访问不允许空值

Ms access 具有引用完整性的MS访问不允许空值,ms-access,null,referential-integrity,Ms Access,Null,Referential Integrity,Microsoft Access数据库中有两个表。其中一个定义元素,另一个引用元素。但是,此参考是可选的。该值可以为NULL。只要外键存在,我就不允许插入或更新空值。在保存没有外键的空值后,我无法添加该键 reference列被设置为“Required=false”,并且允许单独使用NULL值。只有引用完整性不能处理空值 如何解决这个问题 更新:我想到了一些可能相关的事情:我的外键使用两列。其中一个始终设置,但另一个可以为空 添加了示例架构: 表总线: 列: •对象整数 •总线号整数 •名称va

Microsoft Access数据库中有两个表。其中一个定义元素,另一个引用元素。但是,此参考是可选的。该值可以为NULL。只要外键存在,我就不允许插入或更新空值。在保存没有外键的空值后,我无法添加该键

reference列被设置为“Required=false”,并且允许单独使用NULL值。只有引用完整性不能处理空值

如何解决这个问题

更新:我想到了一些可能相关的事情:我的外键使用两列。其中一个始终设置,但另一个可以为空

添加了示例架构:

表总线:
列:
•对象整数
•总线号整数
•名称varchar
主键:objid,总线号

表格连接:
列:
•对象整数
•名称varchar
•总线1整数
•总线2整数
主键:objid,name

conn(objid,总线1)将总线(objid,总线编号)引用为1:n和
conn(objid,总线2)将总线(objid,总线编号)引用为1:n


这两个引用都是可选的,但objid是上级对象的一部分,并且总是被设置的。

在所示的示例设置中,很有可能将空值编辑到现有元素,并创建带有空值的记录。我想你可能有些东西没有完全正确设置


请发布两个表中的示例数据,说明哪些列用作索引和外键。当然,您有一个组合键是相关的。@Remou:我在上面添加了一个示例架构描述。varchar?您正在使用MS Access(Jet/ACE)后端或SQL Server?它是文本。我不习惯访问数据类型,我更经常在MySQL或SQLite上使用,我不知道这是如何工作的。我只能建议您删除引用完整性并通过表单进行验证。好的,但它仅适用于单列引用,或多列引用,但可能它们都需要为null,而不仅仅是其中的一些。是的,您可以将FK的所有null或全部完成,但在使用引用完整性时不能混合使用。您可以创建一个自动编号并使用它。在多次尝试使用各种组合的“忽略Nulls”索引属性、“Unique”属性(打开和关闭)、主表和外部表中的不同索引组合等后,我无法让它使用多列键。有一次,我认为我已经让它工作了,甚至提交了一个答案,但我忘记了重新启用引用完整性约束。最后,我得出了与LonelyPixel相同的结论,即Access不支持可空的多列关系,同时仍然强制执行引用完整性。虽然它很旧,但我发现自己在数字类型字段FK中遇到了这个问题。除了Fionnuala图像中显示的设计之外,请记住,引用表(ElementID)中的FK字段必须将其“默认值”属性设置为空白。当您将字段定义为数字时,Access会将其默认为“0”和0 Null,这反过来会使引用表中的新记录违反关系的引用完整性属性。