Код SQL Excel в VBA — Проблема со строкой подключения

#sql-server #vba #connection-string

Вопрос:

У меня есть несколько SQL-запросов, которые я создаю в PowerQuery. Как бы мне ни хотелось закодировать их в VBA. Но после поиска в Интернете я все еще не могу найти способ правильного подключения к таблицам SQL. Полагаю, у меня проблема с моей строкой соединений. Пожалуйста, посоветуйтесь.

Прилагается запрос PowerQuery. Дайте мне знать, пожалуйста.

 let
    Source = Sql.Databases("EU002VM0353"),
    EPV2P9028 = Source{[Name="EPV2P9053"]}[Data],
    dbo_vw_pbi_01_fact_inspection_state = EPV2P9053{[Schema="dbo",Item="vw_pbi_01_fact_inspection_state"]}[Data],

    #"Filtered Rows" = Table.SelectRows(dbo_vw_pbi_01_fact_inspection_state, each ([QCF Is required] = true) and ([Is NA] = false) and ([WS status] = "Active")),
 

Ответ №1:

Если вы хотите получить данные непосредственно с sql server на свой лист Excel, вы можете использовать этот фрагмент кода:

 'Define variables
Public con As Object, rs As Object, cmd As Object
Public Const provider As String = "SQLOLEDB"
Public Const server As String = "ServerName_or_IP_Adress"
Public Const database As String = "Database_Name"
Public Const serverUser As String = "ServerUser_(sa)"
Public Const serverPass As String = "xxx"
Public Const sheetName As String = "Query_Output_Sheet_Name"

' "Microsoft ActiveX Data Objects 2.8 Library" reference must be selected
Private Sub Query()

    Dim con As ADODB.Connection
    Dim cmd As ADODB.Command
    Dim rs As ADODB.Recordset
    Dim ws As Worksheet

    Set ws = Sheets(sheetName)
    Set con = New ADODB.Connection
    
    con.ConnectionString = _
        "Provider=" amp; provider amp; ";" amp; _
        "Data Source=" amp; server amp; ";" amp; _
        "Initial Catalog=" amp; database amp; ";" amp; _
        "User ID=" amp; serverUser amp; ";" amp; _
        "Password=" amp; serverPass amp; ";" amp; _
        "Trusted_Connection=yes;" amp; _
        "DataTypeCompatibility=80;"
    
    con.Open
    
    Dim Query As String
    Query = "Select * from TableName"

    Set cmd = New ADODB.Command
    cmd.ActiveConnection = con
    cmd.CommandTimeout = 600
    cmd.CommandText = Query
    
    Set rs = cmd.Execute(, , adCmdText)
    
    If rs.EOF = False Then ws.Cells(1, 1).CopyFromRecordset rs
    
    rs.Close
    con.Close
    Set rs = Nothing
    Set cmd = Nothing
    Set con = Nothing
    
End Sub
 

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