查询中的“空”值

时间:2009-07-21 18:35:11

标签: sql ms-access vba ms-access-2007 access-vba

我正在尝试运行将字段复制到新表中的代码,将它们从_New表移动到原始表。执行此操作的VBA代码如下:

SQLStatement = CStr("INSERT INTO " & TName & " SELECT * FROM " & TName & "_New")
Log.WriteLine "Running query with string """ & SQLStatement & """ "
QueryTimer = Timer
DoCmd.RunSQL SQLStatement
Log.WriteLine "Query time: " & (Timer - QueryTimer)

日志只是我把它放在一起的类模块中的一小部分程序。它的输出错误是

@142921:  Running query with string "INSERT INTO Records SELECT * FROM Records_New" 
@142941:  Error Date/Time: 7/21/2009 2:29:40 PM
@142941:  Error # & Description: 3162, You tried to assign the Null value to a variable that is not a Variant data type.

我可以确认TNameSQLStatement在运行SQL操作时都是有效字符串,并且源(Records和Records_New)都是有效的。 Option Explicit设置在文件的其他位置,以避免混淆打字错误。错误发生在DoCmd行。

为什么这会有Null值,即使DoCmd.RunSQL没有返回值?

4 个答案:

答案 0 :(得分:3)

您可以发布Records和Records_New表的表格描述吗? 我打赌你试图在“Records”表的一列中插入一个NULL值(并且列描述为NOT NULL)。

希望这有帮助。

答案 1 :(得分:1)

我认为如果您还将insert语句更改为更具体地插入/选择哪些列,这将有所帮助。你是因为非特异性而要求提出错误。

这似乎对你的答案没有响应,但我怀疑select表和目标表中的列没有排列,或者目标表中有一个不允许null的字段。

试试这个:

在新的Query(在SQL视图中)粘贴您的查询“INSERT INTO Records SELECT * FROM Records_New”并尝试手动运行它。我敢打赌你会得到一个更具体的错误,可以在运行它之前解决查询问题,增加周围代码的复杂性。

答案 2 :(得分:0)

INSERT INTO Statement (Microsoft Access SQL)

您的SQL INSERT语句不正确 - 应该是:

INSERT INTO Records SELECT * FROM [Records_New];

以下是您需要使用的内容:

CStr("INSERT INTO " & TName & " SELECT * FROM [" & TName & "_New)"];")

答案 3 :(得分:-1)

也许Timer需要parens?

QueryTimer = Timer()