Я хочу подключиться к базе данных MS SQL Server с помощью макроса Outlook. Но я не знаю, неправильный ли код, или мне нужно добавить библиотеку/драйвер, или что здесь происходит, но это не работает.

Private Sub Application_Startup()
On Error GoTo ExitHere
    'adodb connection to other database
    stg_cn.Open "Provider = SQLOLEDB;" & _
                        "Data Source = 192.168.100.100;" & _
                        "Initial Catalog = hugeDB;" & _
                        "Integrated Security=SSPI;" & _
                        "User ID = oneuser;" & _
                        "Password = onepassword;"

    sQuery = "SELECT * FROM documents where location = 'IE'"

    'set reference to query
    Set cmd = New ADODB.Command
        cmd.ActiveConnection = stg_cn
        cmd.CommandType = adCmdText
        cmd.CommandText = sQuery
    Set rs = cmd.Execute
    Do While Not rs.EOF
        For i = 0 To rs.Fields.count - 1
            MsgBox (i + 1)
        Next
        rs.MoveNext
    Loop
ExitHere:
    If Not stg_cn Is Nothing Then stg_cn.Close
    Set rs = Nothing
    Set stg_cn = Nothing
    Exit Sub

End Sub
3
Juan M. 12 Авг 2015 в 14:21
1
Ошибка/проблема? Вы не даете нам многого, чтобы продолжать.
 – 
Nick.McDermaid
12 Авг 2015 в 15:58
1
Вы сказали макрос Outlook, но код начинается с Workbook_Open, что является Excel. Следует ли вызывать процедуру Application_Startup, если она находится в Outlook?
 – 
Darren Bartrup-Cook
12 Авг 2015 в 19:14
Я изменил это, но это тоже не работает... Может быть, это потому, что способ подключения к базе данных должен быть другим?
 – 
Juan M.
12 Авг 2015 в 20:04

2 ответа

При проверке зрения я не могу понять, что не так, я думаю, что это должно что-то делать с тем, как вы выполняете операции ADO.

Но я просто добавляю последний написанный мной макрос для подключения к SQL-серверу из макроса. Надеюсь, поможет.

Private Sub Workbook_Open()
On Error GoTo ErrorHandler
    '**************************************Initialize Variables**************************************
    sServer = "<SQL SERVER Server>"
    sDBName = "<SQL SERVER DB>"

    '**************************************Open Connection**************************************
    'adodb connection to other database
    stg_cn.Open "Provider=SQLOLEDB;Data Source=" & sServer & _
                  ";Initial Catalog=" & sDBName & _
                  ";Integrated Security=SSPI;"

    sQuery = "SELECT * " & _
             "FROM Table "

    'set reference to query
    Set cmd = New ADODB.Command
        cmd.ActiveConnection = stg_cn
        cmd.CommandType = adCmdText
        cmd.CommandText = sQuery
    Set rs = cmd.Execute
    Do While Not rs.EOF
        For i = 0 To rs.Fields.Count - 1
            <PERFORM OPERATIONS>
        Next
        rs.MoveNext
    Loop

ExitHere:
    If Not stg_cn Is Nothing Then stg_cn.Close
    Set rs = Nothing
    Set stg_cn = Nothing
    Exit Sub

End Sub
8
CodePhobia 12 Авг 2015 в 14:45

Строка подключения, предоставленная @CodePhobia, должна вам подойти.

Ниже приведены только функции идентификатора пользователя и пароля, как показано в вашем исходном вопросе при попытке подключения с использованием этого.

Dim rsConn as ADODB.Connection
Set rsConn = New ADODB.Connection
With rsConn
    .ConnectionString = "Provider = sqloledb;" & _
                        "Data Source = myServerName;" & _
                        "Initial Catalog = myCatalog;" & _
                        "Integrated Security=SSPI;" & _
                        "User ID = myUserID;" & _
                        "Password = myPassword;"
    .Open
End With

Вы можете использовать этот веб-сайт для поиска строк подключения в будущем. Он должен охватывать все возможные соединения, которые вы хотите установить.

1
luke_t 12 Авг 2015 в 15:38
... База данных недоступна... Я почти уверен, что IP, таблица, имя пользователя и пароль верны. Conn.connectionString = "Provider = sqloledb;" & _ "Источник данных = hugeDB;" & _ "Встроенная безопасность=SSPI;" & _ "Идентификатор пользователя = hdbmread;" & _ "Пароль = hdbmreadonly;" Conn.Open Set Rst.ActiveConnection = Conn Rst.Open "выбрать COUNT(*) из Nav n" & _ "группировать по n.Nav_Date" rs.Close Set rs = Nothing CN.Close Set CN = Nothing End Sub
 – 
Juan M.
12 Авг 2015 в 18:15
Вы включили "Initial Catalog = myCatalog;" & _ в строку подключения? Это каталог в базе данных, к которой вы хотите подключиться.
 – 
luke_t
12 Авг 2015 в 18:22
Conn.connectionString = "Поставщик = sqloledb;" & _ "Источник данных = 192.168.100.100;" & _ "Исходный каталог=" & hugeDB & _ "Интегрированная безопасность=SSPI;" & _ "Идентификатор пользователя = hdbmread;" & _ "Пароль = hdbmreadread;" Все та же проблема. Он не может подключиться из Outlook, но я могу сделать это через Microsoft SQL Server Management Studio, поэтому это не проблема с разрешениями ... Я здесь заблокирован, и это должно быть легко.
 – 
Juan M.
12 Авг 2015 в 18:46
Data Source должно быть именем сервера; имя вашего сервера - это IP-адрес?
 – 
luke_t
12 Авг 2015 в 20:31
В моем макросе у меня есть имя сервера. Здесь я добавил IP, но только потому, что не хотел использовать те же внутренние имена, которые мы используем в компании. Но да, я использую имя сервера.
 – 
Juan M.
13 Авг 2015 в 11:26