访问查询错误 - 空和&变体数据类型 - 如何修复此错误?

时间:2009-04-17 20:49:54

标签: ms-access null types variant

全部,

这个错误让我疯了。我花了2个小时试图找出它并/或在没有运气的情况下解决它。这是错误:

“您尝试将NULL值分配给不是Variant数据类型的变量。”

这是我的SQL:

SELECT tbl_budir_002.Location_Index, tbl_parent_001.NEWPARENTID 
INTO tbl_budir_003
FROM (tbl_budir_002 
    LEFT JOIN qry_parent_003 
        ON tbl_budir_002.Location_Index = qry_parent_003.Location_Index) 
    LEFT JOIN tbl_parent_001 
        ON qry_parent_003.PARENTNAME = tbl_parent_001.PARENTNAME;

我认为复杂性是在这一点上出现的 - tbl_parent_001是通过group by从另一个更大的表创建的(用于表示PARENTNAME记录)。我不得不手动进入表并将字段NEWPARENTID指定为类型autonumber,以便我可以给PARENTNAME记录主键。现在,当我运行查询时,我得到上述错误。我怀疑这是导致我出现问题的自动编号,但我不知道通过使用查询来创建主键的任何其他方法。

所以,我需要两方面的帮助:(1)根据我当前的查询设置缓解错误;(2)找出更好的方法来创建主键,而不是通过表的设计视图手动输入。< / p>

谢谢, 诺亚

4 个答案:

答案 0 :(得分:4)

以下是正在发生的事情:http://support.microsoft.com/kb/197587。除了Access 2000之外,根据我的经验,KB中的信息至少适用于Access 2002。除了解决方法1和2之外,如果您的解决方案能够支持它,我成功地将我的自动编号字段包装在NZ()中。

答案 1 :(得分:0)

看起来您的问题可能是LEFT JOIN。由于您要插入一个不存在的表,但访问可能正在尝试将NEWPARENTID列设置为主键。尝试将查询作为JOIN运行,以查看是否收到相同的错误。您可能还想先尝试手动创建表,然后插入,这样Access就不必猜测您想要的内容。

答案 2 :(得分:0)

好的,您必须考虑数据库中的空值。这并不难,但有时可能很烦人。您不能将null转换为文本,就像您可以将数字转换为文本一样。使用nz - Null为Zero。如果替换是文本,请使用“”,如果如下所示,请使用0.例如nz(myText,"") or nz(myNumber,0)

SELECT nz(tbl_budir_002.Location_Index,0), 
       nz(tbl_parent_001.NEWPARENTID ,0)...

您也可以使用IsNull(),但它不像您必须使用条件语句将其设置为其他内容一样方便。我在标准上使用isnull,在其他所有内容上使用nz。

iif(isnull(tbl_budir_002.Location_Index),0,tbl_budir_002.Location_Index)

玩得开心。

答案 3 :(得分:0)

上周我收到了错误消息,并尝试了几种方法来解决此问题。就我而言,这与我试图将数据追加到表有关,但没有意识到我要追加到主键(这是一个自动编号字段)(当然是偶然的)。

一旦我从追加查询中删除了该字段,一切都会按预期进行。