从 ODBC 切换到 OLEDB 并获得 "Object Required"
Switching from ODBC to OLEDB and getting "Object Required"
我的任务是修改一些 VBA 代码以从使用 ODBC 连接切换到使用 OLEDB 连接,这样我们就可以将用户名和密码编码到子例程中。
我当然没有这方面的经验,但我想我已经设法为新的 OLEDB 连接获取了正确的连接字符串。
我已经在独立测试子中测试了连接字符串,它工作正常。
我正在尝试替换代码中以前的 ODBC 连接字符串,但我开始得到 "Run-time error '424' Object required"
这是我目前正在尝试开始工作的子程序:
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 错误?
注意:在另一个位置的代码中有一个非常相似的 sub,我只是从前面提到的行中删除了 "ReturnData.",它似乎开始工作了。如果我在这里这样做,我会得到这个:
运行-时间错误“430”:Class不支持自动化或不支持预期的界面
对于为什么切换到 OLEDB 会破坏此 sub 的任何帮助都非常感谢。
你的代码 ReturnData 没有被创建或任何东西,除非你在其他地方声明它是全局变量。我想你是在 Excel 中这样做的。在这种情况下替换 ReturnData.Range("A1").CopyFromRecordset tableRecords(10)
像
activeworkbook.sheets("Sheet1").Range("A1").CopyFromRecordset tableRecords(10)
编辑。设法复制它然后修复它。试试这个。
替换ReturnData.Range("A1").CopyFromRecordset tableRecords(10)
像
activeworkbook.sheets("Sheet1").Range("A1").CopyFromRecordset tableRecords
我的任务是修改一些 VBA 代码以从使用 ODBC 连接切换到使用 OLEDB 连接,这样我们就可以将用户名和密码编码到子例程中。
我当然没有这方面的经验,但我想我已经设法为新的 OLEDB 连接获取了正确的连接字符串。
我已经在独立测试子中测试了连接字符串,它工作正常。
我正在尝试替换代码中以前的 ODBC 连接字符串,但我开始得到 "Run-time error '424' Object required"
这是我目前正在尝试开始工作的子程序:
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 错误?
注意:在另一个位置的代码中有一个非常相似的 sub,我只是从前面提到的行中删除了 "ReturnData.",它似乎开始工作了。如果我在这里这样做,我会得到这个: 运行-时间错误“430”:Class不支持自动化或不支持预期的界面
对于为什么切换到 OLEDB 会破坏此 sub 的任何帮助都非常感谢。
你的代码 ReturnData 没有被创建或任何东西,除非你在其他地方声明它是全局变量。我想你是在 Excel 中这样做的。在这种情况下替换 ReturnData.Range("A1").CopyFromRecordset tableRecords(10)
像
activeworkbook.sheets("Sheet1").Range("A1").CopyFromRecordset tableRecords(10)
编辑。设法复制它然后修复它。试试这个。
替换ReturnData.Range("A1").CopyFromRecordset tableRecords(10)
像
activeworkbook.sheets("Sheet1").Range("A1").CopyFromRecordset tableRecords