在Access 2007中,我有两个相关的表,其中一个的(代理)PK是另一个的FK:
table Organization (
org_id int PK,
other_fields whatever,
contact_id int FK
)
table contact (
contact_id int PK,
contact_nm text(255),
other_fields whatever
)
显然不是完整的表格定义......
所以我构建了反映这一点的表单 - 有一个frmOrganization,带有子表单sbfContact。它们与contact_id相关,就像表格一样。对于表联系人中的所有字段,sbfContact都有控件,除了 contact_id(当然,它存在于记录源(SELECT * FROM contact;)中)。这两种形式都没有以任何方式引用另一种形式的代码,也没有任何宏。
当我尝试使用子表单输入新联系人时,会出现问题。只要在绑定到contact_nm的控件中键入一个字符,Access就会告诉我“你试图将Null值赋给一个不是Variant数据类型的变量”。我什么?哪里?我没有将任何分配给任何变量 - 是吗?如果我对消息回答“OK”,我输入的字符将显示在控件&一切都按照我的预期进行。
这里发生了什么,而且 - 更重要的是 - 我需要做些什么才能让它停止?
使用更多信息进行修改
好吧,我希望简化,但我没有帮助它......我真正拥有的是四个不同的实体,每个实体都需要自己的联系数据:
Customer
Site
Manufacturer
Engineer
(行距很重要 - 客户至少有一个站点,可能更多,但站点可以没有客户存在(除非我作为客户携带“我们”)。其他两个完全独立。 / p>
我观察到原始问题与其中一个“主人”有关,并认为它与其他人并行。我认为CodeSlave已经向我指出了问题的正确来源 - 我担心我唯一的办法是不允许通过这个子表单添加,而是建立一个独立的“创建联系人”表单。欢迎提出其他建议....
答案 0 :(得分:1)
基本上Access不知道如何将你的联系人链接到组织,假设你已经知道了Contact_ID是什么,因为它来自组织形式,但是当你在子表单上输入联系人时它仍然是空的。
我想你想在这里翻转一下。
您有Contact with multiple Orgs
还是Org with multiple Contacts
。
如果是Contact with multiple Orgs
,请将“联系人”作为主表单,将“组织”设置为子表单。
如果是Org with multiple Contacts
,请将联系人FK提供给Ord_ID并从组织中删除Contact_ID
-
根据评论进行跟进。
我处理用于多个实体的同一联系人的方式,我不会在子表单上进行联系人输入。相反,我会在一个完全不同的表单上创建评论,然后选择带有下拉列表的联系人(并在Org的表单上显示其余的联系信息)。即使你必须在你的组织表格上有一个“创建联系人”按钮来临时创建一个创建表格,你也会获得更多的回报。