2009-11-03 1 views
4

Я пытаюсь взять Excel 2003 и подключить его к SQL Server 2000 для запуска нескольких динамически сгенерированных SQL-запросов, которые в конечном счете заполняют определенные ячейки ,Запрашиваемая операция требует объекта сеанса OLE DB ... - Подключение Excel к SQL-серверу через ADO

Я пытаюсь сделать это через VBA через ADO (я пробовал от 2.8 до 2.0), но я получаю сообщение об ошибке при установке переменной ActiveConnection, которая находится внутри объекта ADODB.Connection. Мне нужно решить эту довольно быстро ...

Для запрошенной операции требуется объект сеанса OLE DB, который не поддерживается текущим поставщиком.

Я честно не уверен, что означает эта ошибка, и сейчас меня это не волнует. Как получить это соединение для успеха, чтобы я мог запускать свои запросы?

Вот мой VB код:

Dim SQL As String, RetValue As String 
SQL = " select top 1 DateTimeValue from SrcTable where x='value' " 'Not the real SQL 
RetValue = "" 


Dim RS As ADODB.Recordset 
Dim Con As New ADODB.Connection 
Dim Cmd As New ADODB.Command 

Con.ConnectionString = "Provider=sqloledb;DRIVER=SQL Server;Data Source=Server\Instance;Initial Catalog=MyDB_DC;User Id=<UserName>;Password=<Password>;" 
Con.CommandTimeout = (60 * 30) 


Set Cmd.ActiveConnection = Con ''Error occurs here. 

' I'm not sure if the rest is right. I've just coded it. Can't get past the line above. 
Cmd.CommandText = SQL 
Cmd.CommandType = adCmdText 

Con.Open 
Set RS = Cmd.Execute() 

If Not RS.EOF Then 

    RetValue = RS(0).Value 
    Debug.Print "RetValue is: " & RetValue 

End If 
Con.Close 

Я полагаю, что-то не так со строкой подключения, но я попытался более десятка вариаций. Теперь я просто стреляю в темноту.

Note/Update: Чтобы сделать более запутанным, если я Google для приведенной выше цитаты с ошибкой, я получаю много обращений, но ничего не кажется актуальным или Я не уверен, какая информация релевантна ....

У меня есть код VBA в «Sheet1» в разделе «Объекты Microsoft Excel». Я делал это раньше, но обычно помещал вещи в модуль. Может ли это изменить ситуацию?

ответ

12

Вы еще не открыли свое соединение. Я думаю, вам нужно Con.Open, прежде чем назначать его объекту Command.

Con.ConnectionString = "Provider=sqloledb;DRIVER=SQL Server;Data Source=Server\Instance;Initial Catalog=MyDB_DC;User Id=<UserName>;Password=<Password>;" 
Con.CommandTimeout = (60 * 30) 

Con.Open 

Set Cmd.ActiveConnection = Con 'Error occurs here. 

Cmd.CommandText = SQL 
Cmd.CommandType = adCmdText 
+0

Это и есть ответ. Благодарю. –

+0

Это ответ! Большое спасибо! – Willowdan