#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
Переменные подключения определены как общедоступные, поэтому вы можете вызывать их из других модулей или пользовательских форм. Вам просто нужно заполнить переменные и имя листа (которое вы хотите получить данные).