Сложности с переносом данных из SQL Server в Excel с помощью VBA

Я пытаюсь извлечь данные из SQL Server в Excel, чтобы заполнить уже существующий рабочий лист, поэтому я написал тестовый код для этого. Хотя это несовершенно, я в основном тестировал установку соединения с сервером, но при открытии соединения я сталкиваюсь с ошибкой автоматизации Error 440. Что я делаю неправильно в этой части кода.

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

Sub GetPhysicalCount()
    Dim squery As String
    Dim cnLogs As New ADODB.Connection
    Dim rsData As New ADODB.Recordset
    Dim rsHeaders As New ADODB.Recordset
    Dim x As Long
    Dim y As Long
    Dim dbpath As String
    Dim dbname As String
    Dim AppExcel As Excel.Application
    Dim Workbook As Object
    Dim Worksheet As Object
    Dim strConn As String
    Dim Count As Long


    pUser = "AllenBroady"
    pPsw = "Cthulu90"
    pServer = "IMCPU_TEST"
    pCatalog = "MasterMFG"




    strConn = "Provider = SQLOLEDB;"
    strConn = strConn & "Initial Catalog= & pCatalog; & Data Source= & pServer;"
    strConn = strConn & "Integrated Security=sspi;& User ID= & pUser; & Password= & pPsw;"

    cnLogs.Open strConn

        With rsHeaders

            .ActiveConnection = cnLogs

                    .Open "SELECT * FROM MasterMFG WHERE Dept_Code = 001"

                 Do While Not rsHeaders.EOF

                    Cells(1, l_counter + 1) = rsHeaders(0)

                    l_counter = l_counter + 1

                    rsHeaders.MoveNext

                  Loop

            .Close

            End With

            With rsCount
                  .ActiveConnection = cnLogs
                    .Open "SELECT COUNT(Dept_Code)FROM MasterMFG WHERE Total <> 0"
                      Count = rsCount
                  .Close
            End With



            With rsData

            .ActiveConnection = cnLogs
                .Open "SELECT  Dept_Code, Total FROM MasterMFG WHERE Total <> 0"


               For i = 1 To Count

                    Sheet1.Range("A" & i + 1) = rsData.Fields(i)
                    rsData.MoveNext
                    Sheet1.Range("B" & i + 1) = rsData.Fields(i)
               Next i

            .Close

            End With

        cnLogs.Close

        Set cnLogs = Nothing

        Set rsHeaders = Nothing

        Set rsData = Nothing

    Sheets(1).UsedRange.EntireColumn.AutoFit

End Sub

Я продолжаю получать сообщение об ошибке «Автоматизация» (ошибка 440)


person Broady    schedule 16.10.2019    source источник
comment
Вам нужно использовать встроенную систему безопасности или имя пользователя/пароль? Я считаю, что проблема в том, что вы делаете и то, и другое.   -  person Jacob H    schedule 16.10.2019
comment
Благодаря тому, что был и оплошность сам. Я удалил его и запустил, и все равно столкнулся с той же ошибкой.   -  person Broady    schedule 16.10.2019


Ответы (1)


Ваши строки strConn = strConn не объединены должным образом.

Ваши переменные не оцениваются, их имена просто помещаются прямо в строку.

Изменить, например.

 strConn = strConn & "Initial Catalog= & pCatalog; & Data Source= & pServer;"
 strConn = strConn & "Integrated Security=sspi;& UserID= & pUser; & Password= & pPsw;"

to

 strConn = strConn & "Initial Catalog=" & pCatalog & ";Data Source=" & pServer & ";"
 strConn = strConn & "Integrated Security=sspi;User ID= "& pUser; & "Password= " & pPsw & ";"
person jamheadart    schedule 16.10.2019
comment
Спасибо, я пропустил это. - person Broady; 16.10.2019
comment
Я все еще сталкиваюсь с той же ошибкой, как только пытаюсь подключиться. - person Broady; 16.10.2019