如何以不推荐的方式从VBA访问SQL Server?

Hei*_*nzi 12 sql-server excel ms-access vba excel-vba

似乎已弃用从VBA项目直接访问SQL Server数据库的所有方法:

  • DAO与ODBCDirect:Access 2007已取消支持.
  • 通过JET DAO:你不认真,对吧?无论如何,它被微软认为是过时的.
  • ADO与SQLOLEDB提供程序:已弃用.
  • 使用SQL Server Native OLEDB提供程序的ADO:在SQL Sever 2012之后将不再受支持.
  • 使用用于ODBC的Microsoft OLE DB提供程序的ADO:不支持:"用于ODBC的Microsoft OLE DB提供程序(MSDASQL)不支持SQL Server Native Client."

我错过了什么?从VBA访问SQL Server数据库的官方微软批准方式是什么(毕竟,不推荐使用Office 2013中包含的官方开发语言)?

Gor*_*son 11

我错过了什么?

普通的旧ODBC.在Access以外的Office应用程序的VBA项目中,通过ADO的ODBC是最直接的:

Sub AdoOdbcExample()
    Dim con As Object
    Set con = CreateObject("ADODB.Connection")
    con.Open _
            "Driver={SQL Server Native Client 11.0};" & _
            "Server=.\SQLEXPRESS;" & _
            "Database=myDb;" & _
            "Trusted_Connection=yes;"
    con.Execute "UPDATE Clients SET FirstName='Gord' WHERE ID=5;"
    con.Close
    Set con = Nothing
End Sub
Run Code Online (Sandbox Code Playgroud)

对于Access中的VBA项目,我们还可以选择使用ODBC链接表和通过ACE DAO传递查询,就像我们一直有

Sub DaoOdbcExample()
    Dim cdb As DAO.Database, qdf As DAO.QueryDef
    Set cdb = CurrentDb
    Set qdf = cdb.CreateQueryDef("")
    qdf.Connect = "ODBC;" & _
            "Driver={SQL Server Native Client 11.0};" & _
            "Server=.\SQLEXPRESS;" & _
            "Database=myDb;" & _
            "Trusted_Connection=yes;"
    qdf.sql = "UPDATE Clients SET FirstName='Gord' WHERE ID=5;"
    qdf.ReturnsRecords = False
    qdf.Execute dbFailOnError
    Set qdf = Nothing
    Set cdb = Nothing
End Sub
Run Code Online (Sandbox Code Playgroud)

笔记:

  1. SQL Server Native Client 11.0是SQL Server 2014附带的版本(参考:此处).

  2. 引用的过时数据访问技术列表称"DAO 3.6是该技术的最终版本.它不适用于64位Windows操作系统." 这是指Jet DAO("Microsoft DAO 3.6对象库").如果安装了64位版本的Access数据库引擎,则ACE DAO("Microsoft Office 14.0 Access数据库引擎对象库")确实可用于64位应用程序.