SQL INSERT函数不能处理导入的数据

时间:2014-04-25 18:43:08

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

所以我有一个VBA代码,它将excel表作为新表导入Access,从现有表中删除数据,然后使用SQL INSERT函数将数据从新表移动到现有表中保留存在的关系。我有3个表,这是完成的,由于某些原因,其中只有一个是不工作的。代码似乎没有错误执行,但是当我打开表时没有数据。正在导入的表在我尝试插入的表中的所有字段上具有相同的列名和相同的数据类型。有没有人知道为什么只有一个表没有正确导入?下面是我正在使用的代码,而部件号是不工作的代码:

SQL = "INSERT INTO [Reps] SELECT RepsX.* FROM RepsX;"
CurrentDb.Execute SQL
SQL = "INSERT INTO [Part Number] SELECT PartNumberX.* FROM PartNumberX;"
CurrentDb.Execute SQL
SQL = "INSERT INTO [Supplier link] SELECT SupplierLinkX.* FROM SupplierLinkX;"
CurrentDb.Execute SQL

我觉得它有点小,但我一天中的大部分时间都在试图解决这个问题......

2 个答案:

答案 0 :(得分:0)

将SQL粘贴到查询窗口的SQL视图中并运行它。 应该有一条消息告诉你将追加多少条记录,如果没有,原因就在这里。

答案 1 :(得分:0)

我无法给出明确的答案,只是建议:仔细检查Part Number表中列的数据类型,然后将它们与PartNumberX中列的数据类型进行比较表。如果需要,通过使用内置转换函数将PartNumberX表列转换为适当的数据类型,使确定相应的列兼容,如下所示。

此外,依赖于源表和目标表之间的列顺序匹配 - 始终明确地键入列名称,如下所示:

insert into [Part Number] (c1, c2, ..., cn)
select cint(c1), cdbl(c2), ..., cstr(cn)
from PartNumberX

确保Part Number表中任何非空(即不允许空值)的列确实始终获得非空值。如有必要,测试然后处理空值:

insert into [Part Number] (c1, ...)
select cint(iif(c1 is null, 0, c1)), ...
from PartNumberX

确保插入不违反任何参照完整性规则(关系)。您可以通过数据库工具>直观地检查关系。关系>关系命令,然后单击关系工具>设计>关系>所有关系。

最后,您不必在VBA中运行插入查询。您可以轻松地运行它以在Access查询编辑器的SQL视图中对其进行测试。这将为您提供有关可能错误的更多反馈。