0

我正在尝试运行将字段复制到新表中的代码,将它们从_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

4 回答 4

3

您可以发布 Records 和 Records_New 表的表描述吗?我敢打赌,您正在尝试将 NULL 值插入“记录”表的列之一(并且列描述不是 NULL)。

希望这可以帮助。

于 2009-07-21T18:44:25.663 回答
1

我认为如果您还将插入语句更改为更具体地说明它正在插入/选择哪些列,这将有所帮助。您如此不具体是在要求错误。

这似乎对您的回答没有响应,但我怀疑选择表和目标表中的列没有对齐,或者目标表中有一个字段不允许为空。

试试这个:

在一个新的查询(在 SQL 视图中)中,将您的查询“INSERT INTO Records SELECT * FROM Records_New”粘贴到并尝试手动运行它。我敢打赌,您会得到一个更具体的错误,并且可以在运行查询之前对查询进行故障排除,因为它周围的代码会增加复杂性。

于 2009-07-21T18:51:20.907 回答
0

INSERT INTO 语句 (Microsoft Access SQL)

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

INSERT INTO Records SELECT * FROM [Records_New];

这是您需要使用的:

CStr("INSERT INTO " & TName & " SELECT * FROM [" & TName & "_New)"];")
于 2009-07-21T19:02:47.030 回答
-1

也许 Timer 需要括号?

QueryTimer = Timer()
于 2009-07-21T18:39:03.943 回答