2016-03-14 3 views
1

Я хочу получить/получить/создать набор записей из SQL Server в Excel vba.Извлечение/создание набора записей из данных SQL Server в Excel vba

Я пробовал следующие методы, но при этом возвращается ошибка.

Код 1:

Dim conn As ADODB.Connection 
Dim rs As ADODB.Recordset 
Dim sConnString As String 

sConnString = "Provider=sqloledb; Server=192.168.0.204; Database=REPORTdb2" 
Set Conn = New ADODB.Connection 
Set rs = New ADODB.Recordset 
conn.Open sConnString 
Set rs = conn.Execute("select * from Table1;") 

на линии conn.Open sConnString возникает ошибка:

Invalid авторизации спецификации

Кодекса2:

sConnString = "Provider=SQLOLEDB;Data Source=192.168.0.204;" & _ 
       "Initial Catalog=ReportDB2;" & _ 
       "Integrated Security=SSPI;" 
Set conn = New ADODB.Connection 
Set rs = New ADODB.Recordset 

conn.Open sConnString 
Set rs = conn.Execute("SELECT * FROM Table1;") 

Он выдает ошибку

Не удается создать ССПИ Context

+0

Вы пытались подключиться к Серверу с помощью SSMS, чтобы проверить IP-адрес и что ваша учетная запись Windows разрешена для подключения к серверу? BTW, я уверен, что вы установили ссылку в VBE на «Microsoft ActiveX Data Objects 2.8 или выше»? – Ralph

+0

жаль, что я новичок в VBA, но я могу получить доступ, используя соединение create из опции excel. Данные -> из другого источника -> From Sql Server. Там я использую только IP-адрес. И теперь я могу получить доступ к нему совершенно бесплатно. Я хочу получить доступ к данным, не устанавливая файл подключения, т. Е. Прямое кодирование из модуля. И Ref. является коррекцией, то есть 2.8 –

+0

Если решение ниже решило вашу проблему, пожалуйста, закройте этот вопрос следующим образом: http://stackoverflow.com/tour В противном случае, пожалуйста, дайте мне знать, чего не хватает. – Ralph

ответ

0

Следующий код requires in the VBE a reference к Microsoft Active Data Objects 2.8 Library или выше:

Public Sub AdoTestConnection() 
Dim conServer As ADODB.Connection 
Dim rstResult As ADODB.Recordset 
Dim strDatabase As String 
Dim strServer As String 
Dim strSQL As String 

Set conServer = New ADODB.Connection 
conServer.ConnectionString = "PROVIDER=SQLOLEDB; " _ 
    & "DATA SOURCE=192.168.0.204; " _ 
    & "INITIAL CATALOG=REPORTdb2; " _ 
    & "User ID=sa;" _ 
    & "Password=" 
On Error GoTo SQL_ConnectionError 
conServer.Open 
On Error GoTo 0 

Set rstResult = New ADODB.Recordset 
strSQL = "set nocount on; " 
strSQL = strSQL & "select * from Table1;" 
rstResult.ActiveConnection = conServer 
On Error GoTo SQL_StatementError 
rstResult.Open strSQL 
On Error GoTo 0 

'To copy the result to a sheet you may use the following code 
'It will copy your table 'Table1' to the first sheet in your Excel file. 
ThisWorkbook.Sheets(1).Range("A1").CopyFromRecordset rstResult 

Exit Sub 

SQL_ConnectionError: 
MsgBox "Problems connecting to the server." & Chr(10) & "Aborting..." 
Exit Sub 

SQL_StatementError: 
MsgBox "Connection established. Yet, there is a problem with the SQL syntax." & Chr(10) & "Aborting..." 
Exit Sub 

End Sub 

обработатки включена ошибка для

  1. создания соединение с SQL ser веры и
  2. пытаются передать команду T-SQL на сервер для обработки

вы должны быть в состоянии легко устранить проблему для подключения к серверу. Вышеприведенный код вернет только 1 при успешном завершении (для тестового прогона). Впоследствии вы можете заменить команду SQL на ту, что приведена в приведенном выше примере.

+0

Сообщение появляется: проблемы с подключением к серверу. Aborting ... Вы можете видеть в моем коде2, он дает ошибку для контекста SSPI –

+0

Вы установили ссылку на «Microsoft Active Data Objects 2.8 Library» в VBE, как указано в решении? Кроме того, попробуйте изменить «ИНИЦИАЛЬНЫЙ КАТАЛОГ = REPORTdb2;» в приведенном выше примере на «ИНИЦИАЛЬНЫЙ КАТАЛОГ = мастер;». – Ralph

+0

Да, я уже отмечаю для 2.8 Библиотеки и для имени каталога правильно ее REPORTDB2 –