我的任务是修改一些VBA代码,以便从使用ODBC连接切换到使用OLEDB连接,这样我们就可以将用户名和密码编码到子例程中。
我当然没有经验,但我认为我已经设法为新的OLEDB连接获得正确的连接字符串。
我在一个独立的测试子测试中测试了连接字符串,它工作正常。
我正在尝试替换代码中的先前ODBC连接字符串,但我开始得到“运行时错误'424'对象需要”
以下是我目前正在努力开展的工作:
Sub getdata()
Dim tableName As String
Dim tableRecords As New ADODB.Recordset
Dim Cnxn2 As ADODB.Connection
tableName = "TABLE_NAME"
Set Cnxn2 = New ADODB.Connection
'Old Connection String Using ODBC
'Cnxn2.ConnectionString = "Data Source='DATASOURCE';" '& "Integrated Security = SSPI;"
'New Connection String Using OLEDB
Cnxn2.ConnectionString = "Provider=sqloledb;Data Source=SERVER\INSTANCE;User ID=USER;Password=PASSWORD;"
Cnxn2.ConnectionTimeout = 30
Cnxn2.Open
tableRecords.Open tableName, Cnxn2, adUseClient, adLockOptimistic, adCmdTable
With tableRecords
ReturnData.Range("A1").CopyFromRecordset tableRecords(10)
.Close
End With
Cnxn2.Close
Set Cnxn2 = Nothing
Set tableRecords = Nothing
End Sub
错误是突出显示“ReturnData.Range(”A1“)的行.CopyFromRecordset tableRecords(1)
为什么我只更改连接字符串时会收到Object Required错误?
注意:在另一个位置的代码中有一个非常相似的子,我只是删除了“ReturnData”。从前面提到的线,它似乎开始工作。如果我这样做,虽然我得到这个: 运行时错误'430':类不支持自动化或不支持预期的接口
为什么切换到OLEDB的任何帮助都打破了这一点。非常感谢。
答案 0 :(得分:1)
你的代码中没有创建ReturnData或任何东西,除非你声明它是全局变量else where。我想你是在Excel中这样做的。在哪种情况下替换ReturnData.Range("A1").CopyFromRecordset tableRecords(10)
像
activeworkbook.sheets("Sheet1").Range("A1").CopyFromRecordset tableRecords(10)
EDIT。管理复制它然后修复它。试试这个。
替换ReturnData.Range("A1").CopyFromRecordset tableRecords(10)
像
activeworkbook.sheets("Sheet1").Range("A1").CopyFromRecordset tableRecords