2015-04-29 2 views
0

Мне поручено модифицировать некоторый код VBA, чтобы переключиться с использования ODBC-соединения на использование соединения OLEDB, чтобы мы могли просто ввести имя пользователя и пароль в подпрограмму.Переключение с ODBC на OLEDB и получение «Object Required»

Я, конечно, не испытывал этого, но мне кажется, что мне удалось получить правильную строку соединения для нового соединения 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)

Почему я получаю объект, необходимый ошибки, когда я только изменил строку подключения. ?

Примечание: в коде в другом месте был очень похожий элемент, и я просто удалил «ReturnData.» Из ранее упомянутой строки и, похоже, начал работать. Если я это сделаю, я получаю следующее: Ошибка времени выполнения «430»: класс не поддерживает автоматизацию или не поддерживает ожидаемый интерфейс

Любая помощь в том, почему переключение на OLEDB является нарушением этого подкласса.

ответ

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 
+0

Когда я изменить его таким образом я начинаю снова получаю ошибку автоматизации. Ошибка времени выполнения «430»: класс не поддерживает автоматизацию или не поддерживает ожидаемый интерфейс. – JaReg

+0

вы используете его в excel? Является ли он стандартным модулем или модулем класса? – Sam

+0

Также есть ли у вас какие-либо ссылки в VBA, которые отсутствуют или для определенного файла? – Sam

Смежные вопросы