【发布时间】:2011-02-01 10:59:43
【问题描述】:
在 Excel 2007 中运行 VBA 代码时出现自动化错误。我正在尝试连接到远程 SQL Server 数据库并将数据从 Excel 加载到 SQL Server。
我得到的错误是,
“运行时错误'-2147217843(80040e4d)':自动化错误”。
我查看了 MSDN 站点,它建议这可能是由于与 sqloledb 提供程序相关的错误,缓解这种情况的一种方法是使用 ODBC。好吧,我更改了连接字符串以反映 ODBC 提供程序和相关参数,但我仍然遇到同样的错误。
下面是 ODBC 作为提供者的代码:
Dim cnt As ADODB.Connection
Dim rst As ADODB.Recordset
Dim stSQL As String
Dim wbBook As Workbook
Dim wsSheet As Worksheet
Dim rnStart As Range
Public Sub loadData()
'This was set up using Microsoft ActiveX Data Components version 6.0.
'Create ADODB connection object, open connection and construct the connection string object.
Set cnt = New ADODB.Connection
cnt.ConnectionString = _
"Driver={SQL Server}; Server=onlineSQLServer2010.foo.com; Database=fooDB Uid=logonalready;Pwd='helpmeOB1';"
cnt.Open
On Error GoTo ErrorHandler
'Open Excel and run query to export data to SQL Server.
strSQL = "SELECT * INTO SalesOrders FROM OPENDATASOURCE('Microsoft.ACE.OLEDB.12.0', & _
"'Data Source=C:\Database.xlsx; Extended Properties=Excel 12.0')...[SalesOrders$]"
cnt.Execute (strSQL)
'Error handling.
ErrorExit:
'Reclaim memory from the connection objects
Set rst = Nothing
Set cnt = Nothing
Exit Sub
ErrorHandler:
MsgBox Err.Description, vbCritical
Resume ErrorExit
'clean up and reclaim memory resources.
cnt.Close
If CBool(cnt.State And adStateOpen) Then
Set rst = Nothing
Set cnt = Nothing
End If
End Sub
【问题讨论】:
-
在哪一行出现错误?另外,你的sql server密码里面有单引号吗?
-
代码在 'cnt.open() 处死掉,就在连接字符串之后。为了回答你的密码问题,我确实在它周围加上了单引号。
-
数据库名称和用户名之间不需要分号吗?另外,顺便说一句,您的 Sub 的最后 5 行将永远不会被执行。
-
我更新了代码以反映数据库名称和用户名之间的分号。 (我正在运行的真实版本中已经有一个分号)。我还重新排列了最后 5 行代码,使其在最后关闭。
标签: sql-server excel vba