使用INSERT INTO将数据写入访问数据库

我正在尝试使用INSERT INTO命令从Excel 2010文件中将数据写入Access 2007文件。 数据包含在Tool_Selector.xlsm excel文件的“NewProj”工作表中,需要写入“Tool_Database.mdb”文件,但不幸的是我收到了几个不同的错误。这就是我目前

Sub AddData() Dim Cn As ADODB.Connection Set Cn = New ADODB.Connection Cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\Tools_Dev\_Tool_Selector\Tool_Selector.xlsm;Extended Properties=Excel 8.0;" _ & "Persist Security Info=False" Cn.Execute "INSERT INTO Project_Names IN 'D:\Tool_Database\Tool_Database.mdb' SELECT * FROM Worksheets("NewProj").Range("A2").Value" Cn.Close Set Cn = Nothing End Sub 

我从这个线程得到了代码: 使用VBA将Excel中的数据插入到Access中

我只需要转移单个单元格的值。

谢谢。

问题是你在SQL语句中使用VBA代码。 下面的代码行会编译但执行失败

 Cn.Execute "INSERT INTO Project_Names IN 'D:\Tool_Database\Tool_Database.mdb' SELECT * FROM Worksheets("NewProj").Range("A2").Value" 

因为在使用Worksheets(),.Range和.Value的VBA函数时仍然处于SELECT语句中,所以失败。 IIRC,你应该能够使用SQL语法来从工作表中select一个特定的范围。 适当的语法应该是:

 "SELECT * FROM [Sheet$]" 

如果你想要一个特定的范围,那么你会尝试:

 "SELECT * FROM [Sheet$A1:C20]" 

有一篇关于此的Microsoft文章: http : //support.microsoft.com/kb/257819如果您正在寻找有关在Excel中使用ADO的更多信息。 脚本专家也写了一篇很好的文章,帮助我在几年前了解它: http : //technet.microsoft.com/en-us/library/ee692882.aspx 。

希望能帮助你解决你的问题。 不过,我会留下一个警告字。 我记得当我第一次使用这个代码时,在查询一个已经打开的Excel电子表格时遇到了一些非常奇怪的问题。 如果我正在查询一个已经打开的Excel电子表格,那么我会遇到一个问题,内存将被泄漏,Excel最终将耗尽内存使用。 解决问题的唯一方法是完全closuresExcel。 ADO引用是否被正确地closures/清除也没有关系。

事实上,我只是谷歌search,仔细检查,这里是一个关于该错误的文章: http : //support.microsoft.com/default.aspx ?scid=kb;en-us;319998&Product=xlw。

这听起来类似于从Office 2003升级到2007年时曾经遇到的问题。

我的解决scheme是更改连接string中的提供程序。 由于您使用的是现代办公版本,我认为它应该是:

 Provider=Microsoft.Ace.OLEDB.12.0; 

你可能也想看看扩展属性。 我知道Excel 8.0是一个Excel '97文件。 而Excel 2010是14.0