Sql server VBA连接到本地SQL Server

Sql server VBA连接到本地SQL Server,sql-server,excel,vba,Sql Server,Excel,Vba,我的电脑上安装了SQL Server 2008,我正在编写VBA代码来填充该数据库上的表。我能够从各种在线来源拼凑出以下代码: Sub connect() Dim conn As ADODB.Connection Dim cmd As ADODB.Command Dim rs As ADODB.Recordset Dim strConn As String Dim strSRV As String Dim strDB As String Dim sql_login As String Dim s

我的电脑上安装了SQL Server 2008,我正在编写VBA代码来填充该数据库上的表。我能够从各种在线来源拼凑出以下代码:

Sub connect()
Dim conn As ADODB.Connection
Dim cmd As ADODB.Command
Dim rs As ADODB.Recordset
Dim strConn As String
Dim strSRV As String
Dim strDB As String
Dim sql_login As String
Dim sql_pass As String

    'Create the connection string
    strSRV = ".\SQLEXPRESS"
    strDB = "backend"
    sql_login = "asd"
    sql_pass = "asd"

    strConn = "Provider=SQLNCLI10" & _
              "Server=" & strSRV & ";" & _
              "Database=" & strDB & ";" & _
              "Uid=" & sql_login & ";" & _
              "Pwd=" & sql_pass & ";"


    'Create the Connection and Recordset objects
    Set conn = New ADODB.Connection
    Set rs = New ADODB.Recordset

    ' Open the connection and execute
    conn.Open strConn
    Set rs = conn.Execute("SELECT * FROM *;")

    'Check we have data
    If Not rs.EOF Then
        'Transfer result
        Sheets(1).Range("A1").CopyFromRecordset rs

    'Close Recordset
    rs.Close

    Else
        MsgBox "Error: No records returned.", vbCritical
    End If

    'Clean up
    If CBool(conn.State And adStateopen) Then conn.Close
    Set conn = Nothing
    Set rs = Nothing
End Sub
目前我收到一个错误:

找不到提供程序

通过在线研究,我发现这可能是由于ODBC配置造成的,所以我转到了ODBC数据源管理。定义了3个用户数据源:数据库文件、Excel文件和MS Access数据库。我为SQL Server本机客户端10.0添加了第三个


我在
connectionstrings.com
上找不到答案,这似乎是一个流行的参考资料。我出错的原因是什么?一般来说,我怎样才能修复它?在某一点上,我的VBA将指向远程服务器,因此我不希望该解决方案成为本地解决方案

看起来您的strConn缺少一个分号…试试这个,看看是否有什么不同:-

 strConn = "Provider=SQLNCLI10;" & _
              "Server=" & strSRV & ";" & _
              "Database=" & strDB & ";" & _
              "Uid=" & sql_login & ";" & _
              "Pwd=" & sql_pass & ";"

看起来您的strConn缺少分号…请尝试此操作,看看是否有任何不同之处:-

 strConn = "Provider=SQLNCLI10;" & _
              "Server=" & strSRV & ";" & _
              "Database=" & strDB & ";" & _
              "Uid=" & sql_login & ";" & _
              "Pwd=" & sql_pass & ";"

工作!你知道我可以查阅一些文档来更好地理解这一点吗?例如,我不知道为什么我们使用的是
SQLNLCI0
,而不是我遇到的其他几个。我对连接字符串也感到困惑。你只需要继续研究——如果你陷入困境,你随时可以问更多的问题!很高兴它能为您工作。@newdimension SQLNCLI10是一个随SQL server一起安装的OLE提供程序。我通常避免在VBA中使用它,因为它必须单独安装。SQLOLEDB与Windows一起提供,它似乎也能正常工作,但字符串其余部分的格式不同。您还应该使用Provider=SQLOLEDB.1,而不是该链接中建议的SQLOLEDB。我想我在参数化查询中遇到了一些问题,因为没有包含.1(它显然使用了旧版本的驱动程序)!你知道我可以查阅一些文档来更好地理解这一点吗?例如,我不知道为什么我们使用的是
SQLNLCI0
,而不是我遇到的其他几个。我对连接字符串也感到困惑。你只需要继续研究——如果你陷入困境,你随时可以问更多的问题!很高兴它能为您工作。@newdimension SQLNCLI10是一个随SQL server一起安装的OLE提供程序。我通常避免在VBA中使用它,因为它必须单独安装。SQLOLEDB与Windows一起提供,它似乎也能正常工作,但字符串其余部分的格式不同。您还应该使用Provider=SQLOLEDB.1,而不是该链接中建议的SQLOLEDB。我想我在不包括.1时遇到了一些参数化查询的问题(它显然使用了旧版本的驱动程序)