VBA / SQL openrecordset (strSQL) Ошибка 3001 - PullRequest
2 голосов
/ 16 февраля 2011

Я пытаюсь выполнить запрос на сервере базы данных (Oracle 10g) с использованием VBA / Excel и отобразить результаты в таблице Excel.Я создал соединение ODBC (только для чтения) и проверил соединение.Я отлично работаю, если я импортирую данные в качестве источника данных в Excel (я также могу фильтровать запросы). Однако мой код VBA выдает ошибку 3001

Sub Test()

Dim cnn As ADODB.Connection
Dim canConnect As Boolean
Dim rs As Recordset
Dim strSQL As String

Set cnn = New ADODB.Connection
cnn.Open "DSN=blah;Uid=blah;Pwd=blah"

strSQL = "select job_start_dttm, job_end_dttm from c_job"
Set rs = cnn.openrecordset(strSQL)
ActiveCell = rs(0)

End Sub

Я получаю ошибку 3001 -типа Wngng, находятся за пределами допустимого диапазона или конфликтуют друг с другом

Сам запрос отлично работает в SQL-разработчике.Спасибо

edit: ошибка в строке "Set rs = cnn.openrecordset (strSQL)"

Ответы [ 2 ]

1 голос
/ 16 февраля 2011

Попробуйте:

Sub Test()
Dim cnn As New ADODB.Connection
Dim canConnect As Boolean
Dim rs As New ADODB.Recordset
Dim strSQL As String

cnn.Open "DSN=blah;Uid=blah;Pwd=blah"

strSQL = "select job_start_dttm, job_end_dttm from c_job"
rs.Open strSQL, cnn
ActiveCell = rs(0)

End Sub

Вы, кажется, смешиваете немного DAO с вашим ADODB. Вы могли бы использовать Execute, но вышеприведенное должно подойти.

1 голос
/ 16 февраля 2011

Попробуйте указать имя типа rs с префиксом ADODB, чтобы убедиться, что оно не определено как встроенный тип объекта Access Recordset.

Dim rs As ADODB.Recordset

Редактировать:

Вам также потребуется использовать команду ADO .Execute вместо DAO .OpenRecordset:

Set rs = cnn.Execute("...")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...