【问题标题】:Code a Excel SQL into VBA - Connection string issue将 Excel SQL 编码到 VBA - 连接字符串问题
【发布时间】:2021-11-04 04:49:00
【问题描述】:

我在 PowerQuery 中构建了多个 SQL 查询。 我想如何在 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")),

【问题讨论】:

    标签: sql-server vba connection-string


    【解决方案1】:

    如果你想直接从 sql server 获取数据到你的 excel sheet,你可以使用这段代码:

    '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=" & provider & ";" & _
            "Data Source=" & server & ";" & _
            "Initial Catalog=" & database & ";" & _
            "User ID=" & serverUser & ";" & _
            "Password=" & serverPass & ";" & _
            "Trusted_Connection=yes;" & _
            "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
    

    连接变量定义为公共的,因此您可以从其他模块或用户窗体调用它们。您只需要填写变量和工作表名称(您要获取数据)

    【讨论】:

      猜你喜欢
      • 2012-09-26
      • 2016-09-20
      • 2019-12-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-07
      • 2011-04-11
      • 1970-01-01
      相关资源
      最近更新 更多