我正在尝试运行将字段复制到新表中的代码,将它们从_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.
我可以确认TName
和SQLStatement
在运行SQL操作时都是有效字符串,并且源(Records和Records_New)都是有效的。 Option Explicit
设置在文件的其他位置,以避免混淆打字错误。错误发生在DoCmd
行。
为什么这会有Null
值,即使DoCmd.RunSQL
没有返回值?
答案 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()