全部,
这个错误让我疯了。我花了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>
谢谢, 诺亚
答案 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)
上周我收到了错误消息,并尝试了几种方法来解决此问题。就我而言,这与我试图将数据追加到表有关,但没有意识到我要追加到主键(这是一个自动编号字段)(当然是偶然的)。
一旦我从追加查询中删除了该字段,一切都会按预期进行。