【问题标题】:Excel VBA to SQL Server 2016 Connection String ErrorExcel VBA 到 SQL Server 2016 连接字符串错误
【发布时间】:2019-12-01 12:14:25
【问题描述】:

我们正在尝试使用 Excel 中的插件 ADODB 让 VBA 访问我们的本机服务器数据库。但是,无论我们尝试何种连接字符串配置,我们都会遇到相同的错误消息。

任何帮助将不胜感激!见下图和代码。

Sub test()

    Set Conn = New ADODB.Connection
    ConnString = "Provider=SQLOLEDB;Data Source=databaseb006;Database=EIU"
    Conn.Open

End Sub

【问题讨论】:

  • 请检查客户端机器上是否安装了 SQLOLEDB 驱动器?
  • 刚刚升级到最新版本 - 问题依然存在!
  • 哪个版本?请在本网站connectionstrings.com/sql-server交叉引用您的连接字符串。
  • 交叉引用连接字符串到底是什么意思?
  • 根据驱动程序版本连接字符串可以改变。所以请确保您的连接字符串是正确的。

标签: sql-server excel vba adodb


【解决方案1】:

考虑首先检查SQLOLEDB 是否是已安装的具有以下 PowerShell 脚本的 OLEDB 提供程序之一,从这个 @josepmv's blog 页面借用,也可以在他的 Gitub repo 上找到。

PowerShell (在 Powershell ISE 中运行 x86(32 位)和非 x86(64 位)的 .ps1 脚本)

function Get-OledbRegistered
{
    [CmdletBinding()]
    [OutputType([System.Collections.Generic.List[PSObject]])]
    param ()

    Process
    {
        $list = New-Object ([System.Collections.Generic.List[PSObject]])

        foreach ($provider in [System.Data.OleDb.OleDbEnumerator]::GetRootEnumerator())
        {
            $v = New-Object PSObject        
            for ($i = 0; $i -lt $provider.FieldCount; $i++) 
            {
                Add-Member -in $v NoteProperty $provider.GetName($i) $provider.GetValue($i)
            }
            $list.Add($v)
        }
        return $list
    }
}

$list = Get-OledbRegistered
$list | ?{ $_.SOURCES_NAME.IndexOf('SQL') -ge 0 }

上面的脚本搜索包含SQL 的任何源名称。只需在末尾运行 list 即可显示所有 OLEDB 提供程序。此外,可用的提供程序必须与您的 MS Office 的位版本相匹配。例如,MS Office 32 位版本可能无法运行 OLEDB 64 位提供程序,反之亦然。同样,您的 SQL Server 位版本也必须与提供程序保持一致。

另外,请注意您可以下载latest OLEDB driver,它会引发重要信息(已添加重点):

以前的 Microsoft OLE DB Provider for SQL Server (SQLOLEDB) 和 SQL Server Native Client OLE DB 提供程序 (SQLNCLI) 仍然不推荐使用,不建议将其用于新的开发工作
...
新的 OLE DB 提供程序称为 Microsoft OLE DB Driver for SQL Server (MSOLEDBSQL)。新的提供商将使用最新的服务器功能进行更新。


从那里,根据机器上的可用性根据需要调整连接字符串。以下是典型的、未经测试的示例。

VBA

Sub test()

    Set Conn = New ADODB.Connection
    ConnString = "Provider=MSOLEDBSQL;Server=myServer\myInstance;Database=myDatabase;Trusted_Connection=yes;"
    Conn.Open

    ConnString = "Provider=SQLOLEDB;Data Source=myServer\myInstance;Initial Catalog=myDatabase;Integrated Security=SSPI;"
    Conn.Open

    ConnString = "Provider=SQLNCLI;Server=myServer\myInstance;Database=myDatabase;UID=myUser;PWD=mypwd"
    Conn.Open

End Sub

【讨论】:

    猜你喜欢
    • 2012-09-26
    • 1970-01-01
    • 2020-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-20
    • 1970-01-01
    • 2021-07-10
    相关资源
    最近更新 更多