You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PowerQuery编写的SQL查询转VBA实现的连接字符串问题咨询

解决方案

1. 连接字符串配置说明

根据你PowerQuery中用到的参数(服务器地址EU002VM0353、数据库名EPV2P9053),两种常用的合法连接字符串格式如下:

  • Windows身份验证(和PowerQuery默认使用的当前系统账号权限一致,无需额外输入账号密码):
    Provider=SQLOLEDB;Data Source=EU002VM0353;Initial Catalog=EPV2P9053;Integrated Security=SSPI;
  • SQL Server独立身份验证:
    Provider=SQLOLEDB;Data Source=EU002VM0353;Initial Catalog=EPV2P9053;User ID=你的SQL账号;Password=你的SQL密码;

2. 完整VBA实现代码

以下代码完全对应你PowerQuery的查询、筛选逻辑,采用晚绑定方式无需手动引用ADODB库,直接运行即可:

Sub 查询SQL质检数据表()
    Dim conn As Object, rs As Object
    Dim strConn As String, strSQL As String
    
    ' 配置连接字符串,默认使用Windows身份验证,需要换SQL账号可替换为对应格式
    strConn = "Provider=SQLOLEDB;Data Source=EU002VM0353;Initial Catalog=EPV2P9053;Integrated Security=SSPI;"
    
    ' SQL查询语句,直接把筛选逻辑写在SQL层,执行效率远高于VBA本地遍历
    strSQL = "SELECT * FROM dbo.vw_pbi_01_fact_inspection_state " & _
             "WHERE [QCF Is required] = 1 " & _
             "AND [Is NA] = 0 " & _
             "AND [WS status] = 'Active'"
    
    ' 初始化数据库对象
    Set conn = CreateObject("ADODB.Connection")
    Set rs = CreateObject("ADODB.Recordset")
    
    ' 执行查询
    conn.Open strConn
    rs.Open strSQL, conn
    
    ' 示例:将查询结果输出到当前工作簿Sheet1的A1单元格
    If Not rs.EOF Then
        ' 输出表头
        Dim i As Integer
        For i = 0 To rs.Fields.Count - 1
            Sheet1.Cells(1, i + 1).Value = rs.Fields(i).Name
        Next
        ' 输出查询内容
        Sheet1.Range("A2").CopyFromRecordset rs
    End If
    
    ' 释放资源,必须执行否则会残留数据库连接
    rs.Close
    conn.Close
    Set rs = Nothing
    Set conn = Nothing
End Sub

3. 连接失败排查点

  • 确认本地网络可以正常访问服务器EU002VM0353的1433端口(SQL Server默认端口),无防火墙拦截
  • 确认你使用的账号拥有EPV2P9053数据库的查询权限,和PowerQuery使用的账号权限一致
  • 如果使用SQL独立账号登录,确认该账号开启了SQL Server身份验证权限,且密码无特殊字符转义问题

内容的提问来源于stack exchange,提问作者nikau

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 19:24:02