Я пытаюсь получить доступ через VBA к базе данных MS SQL-сервера, чтобы выполнить запрос и вывести результаты в таблицу Microsoft Word.

База данных находится на сервере. Код ниже:

Sub SQLConnect2()
    Debug.Print "Start"

    Dim cn As Object
    Dim rs As Object
    Dim ConnectionString As String
    Dim StrQuery As String
    Dim strFirstName As String

    ConnectionString = "Provider=SQLOLEDB;Data Source=Server;Trusted_connection=yes;"
    Debug.Print ConnectionString

    Set cn = CreateObject("ADODB.Connection")
    Set rs = CreateObject("ADODB.Recordset")

    cn.Open ConnectionString

    StrQuery = "USE Database SELECT TOP 10 name as Title FROM table"


    rs.Open StrQuery, cn

    Debug.Print StrQuery
    Debug.Print rs.RecordCount

End Sub

Это, однако, дает мне ошибки во время выполнения, поскольку говорит, что набор записей закрыт, я считаю, что это потому, что запрос не работает, однако, когда я копирую и вставляю запрос в SSMS, он работает как ожидалось.

Я считаю, что это может быть связано с тем, что он подключается к серверу, а затем не использует базу данных в выражении use .

Любая помощь приветствуется!

Благодарность! Джеймс

0
James Timmins 18 Ноя 2019 в 17:53
Если у вас будет несколько операторов, вам нужно заканчивать каждый оператор точкой с запятой. Но в этом случае я не понимаю, зачем вам нужно несколько операторов. Если вам нужно выбрать данные из другой базы данных, для которой соединение было открыто, вы можете просто использовать трехкомпонентное именование. «выберите 10 первых имен из таблицы Database.schema.table» - и не забывайте порядок, чтобы знать, какие 10 строк вы получаете.
 – 
Sean Lange
18 Ноя 2019 в 18:08

1 ответ

Возможно, вам придется изменить строку подключения, чтобы включить имя базы данных:

ConnectionString = "Provider=SQLOLEDB;Data Source=Server;Initial Catalog=YourDataBase; Integrated Security=SSPI;"

И удалите Использовать базу данных в вашем запросе.

См. https://www.connectionstrings.com/sql-server/.

0
rjs123431 21 Ноя 2019 в 15:28