访问自动分配Null到非Variant - 在哪里?

时间:2010-11-17 22:20:28

标签: ms-access ms-access-2007

在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已经向我指出了问题的正确来源 - 我担心我唯一的办法是不允许通过这个子表单添加,而是建立一个独立的“创建联系人”表单。欢迎提出其他建议....

1 个答案:

答案 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的表单上显示其余的联系信息)。即使你必须在你的组织表格上有一个“创建联系人”按钮来临时创建一个创建表格,你也会获得更多的回报。