MS Access 中的 SQL Server DSN-less 连接字符串错误:未找到数据源名称且未指定默认驱动程序

问题描述 投票:0回答:1

我在 MS Access 中有这个 DSN-less 连接字符串,我想用它来连接到 SQL Server 2019:

Private Const CONNECTION_STRING = "ODBC;Driver={SQL Server Native Client 11.0};Server=aaa;Database=bbb;Trusted_Connection=yes;"

当我在下面的这段代码中使用这个字符串时,它有效并正确检索链接表:

Public Sub LinkSQLTables()
On Error GoTo ErrHandler

    Dim td As TableDef
    Dim rs As Recordset
    
    
    For Each td In CurrentDb.TableDefs
    
        If td.Name Like "v_*" Or td.Name Like "vDE_*" Then
            CurrentDb.TableDefs.Delete td.Name
        End If
        
    Next
    
    Set rs = CurrentDb.OpenRecordset("SELECT * FROM SQL_Links", dbOpenSnapshot)
    
    Do While Not (rs.BOF Or rs.EOF)
    
        Set td = CurrentDb.CreateTableDef(rs!LinkName, dbAttachSavePWD, rs!LinkName, CONNECTION_STRING)
        CurrentDb.TableDefs.Append td

        CurrentDb.Execute "CREATE INDEX " & rs("LinkName") & "_PK ON " & rs("LinkName") & " (" & rs("PrimaryKeyField") & ") WITH PRIMARY"
        
        rs.MoveNext
    
    Loop
    
    rs.Close
    Set rs = Nothing
        
Exit Sub
ErrHandler:

    MsgBox "Během pokusu o spojení s databází nastala chyba. Aplikace bude ukončena." & vbNewLine & vbNewLine & _
            "Číslo chyby: " & Err.Number & vbNewLine & _
            "Popis chyby: " & Err.Description, vbCritical + vbOKOnly, "Chyba"
            
    rs.Close
    Set rs = Nothing
            
    Application.Quit
    
End Sub

但是,当我使用相同的连接字符串打开 ADO 连接时,如下面的代码所示:

Set Conn = New ADODB.Connection
Conn.ConnectionString = CONNECTION_STRING
Conn.Open

我在 Conn.Open 上收到错误消息:未找到数据源名称且未指定默认驱动程序。

我应该怎么做才能纠正这个问题?谢谢。

sql-server vba ms-access connection-string dsn
1个回答
0
投票

ODBC;
是 DAO 特定的前缀。使用 ADO 时,您必须忽略它。

我经常用这样的东西:

Const CONNECTION_STRING_DAO = "ODBC;Driver={SQL Server Native Client 11.0};Server=aaa;Database=bbb;Trusted_Connection=yes;"
Const CONNECTION_STRING_ADO = "Driver={SQL Server Native Client 11.0};Server=aaa;Database=bbb;Trusted_Connection=yes;" 

然后,使用适当的字符串进行适当的技术。

我经常将 OLEDB 用于我的 ADO 字符串,因为 ADO 本身与 OLEDB 一起工作,而 DAO 根本不与 OLEDB 一起工作。

© www.soinside.com 2019 - 2024. All rights reserved.