将 Access 连接到 SQL Server
Applies ToMicrosoft 365 专属 Access Access 2024 Access 2021 Access 2019 Access 2016

回想一下青春时代的青春岁月,那时的字母汤在你用餐时带来了无尽的欢乐。 暂且将这些回忆保留在你的内心深处,因为我们将尝一尝数据库“字母汤”的口味。 以下各节将详细介绍使用连接字符串访问数据库并在 Access VBA 代码中使用数据库编程接口的基础知识。

数据访问组件

本文内容

使用 ODBC 驱动程序或 OLE DB 提供程序

通过编程从 Access 连接到 SQL Server

ODBC 驱动程序版本摘要

OLE DB 提供程序版本摘要

ODBC 关键字摘要

OLE DB 关键字摘要

使用 ODBC 驱动程序或 OLE DB 提供程序

连接字符串已经存在很长时间了。 可在 Access 用户界面中或 VBA 代码中定义格式化的连接字符串。 连接字符串(无论是 ODBC 还是 OLE DB)将信息直接传递到数据库,如服务器位置、数据库名称、安全性类型和其他有用的选项。 例如:

ODBC;DRIVER=SQL Server;SERVER="MyServer";DATABASE="MyHRdb";TRUSTED_CONNECTION=Yes
Provider=SQLOLEDB;Data Source=MyServer;Initial Catalog=MyHRdb; Integrated Security=SSPI;

首先出现的是 SQL Server Native Client (SNAC),这是一种包含 ODBC 和 OLEDB 技术的独立库,并且仍可用于 SQL Server 版本 2005 到 2012。 许多旧应用程序都使用 SNAC,而且为了向后兼容,SNAC 目前仍受支持,但我们不建议将其用于全新的应用程序开发。 应该使用后续各个可下载的 ODBC 驱动程序版本。

ODBC 驱动程序

开放式数据库连接 (ODBC) 是一种用于将 Access 数据库连接到 Microsoft SQL Server 等外部数据源的协议。 通常使用文件数据源(也称为 DSN 文件)来添加连接字符串,在这种情况下对连接字符串使用 FILEDSN 关键字,或将连接字符串存储在注册表中,这种情况下使用 DSN 关键字。 或者,也可以使用 VBA 通过“无 DSN”连接字符串设置这些属性。

多年来,ODBC 驱动程序分三个阶段分发:

  • 在 2005 年之前,ODBC 驱动程序随 Windows 数据访问组件 (WDAC) 一起提供,后者最初称为 Microsoft 数据访问组件 (MDAC)。 为了向后兼容,这些组件仍随 Windows 提供。 有关详细信息,请参阅 Microsoft 或 Windows 数据访问组件

  • 对于 SQL Server 2005 到 SQL Server 2012,ODBC 驱动程序随 SNAC 一起提供。

  • SQL Server 2012 之后,ODBC 驱动程序是单独提供的,并支持全新的 SQL Server 功能。

在新开发中,请避免使用前两个阶段的 ODBC 驱动程序,而应使用第三阶段的 ODBC 驱动程序。

OLE DB 提供程序

对象链接和嵌入数据库 (OLE DB) 是一种用于将 Access 数据库连接到 Microsoft SQL Server 等外部数据源的更新版协议。 OLE DB 不需要 DSN,还可提供对 ODBC 数据源和 ODBC 驱动程序的完全访问权限。

提示    通常使用“数据链接属性”对话框添加 OLE DB 连接字符串。 虽然无法从 Access 打开“数据链接属性”对话框,但可以在 Windows 资源管理器中创建一个空的 .txt 文件,将文件类型更改为 .udl,然后双击该文件。 创建连接字符串后,将文件类型更改回 .txt。

多年来,OLE DB 提供程序分三个阶段分发:

  • 在 2005 年之前,OLE DB 提供程序随 Windows 数据访问组件 (WDAC) 一起提供,后者最初称为 Microsoft 数据访问组件 (MDAC)。

  • ODBC 驱动程序随 SQL Server 2005 到 SQL Server 2017 一起提供。 曾在 2011 年弃用。

  • 2017 年,SQL Server OLE DB 提供程序重新启用。

目前在新解决方案开发中推荐的版本是用于 SQL Server 的 OLE DB 驱动程序 18。

如何使用 ODBC 连接字符串优化性能

若要优化性能、将网络流量降至最低并减少对 SQL Server 数据库的多用户访问情况,请通过在多个记录集之间共享连接字符串来尽可能减少连接字符串的使用。 虽然 Ace 只是将连接字符串传递到服务器,但它能理解和使用以下关键字:DSN、DATABASE、UID、PWD 和 DRIVER,帮助最大限度减少客户端/服务器通信。

注意    如果与外部数据源的 ODBC 连接丢失,Access 会自动尝试重新连接到该数据源。 如果重试成功,你可以继续工作。 如果重试失败,你仍然可以处理不依赖于该连接的对象。 若要重新连接,请关闭并重新打开 Access。

使用 ODBC 和 OLE DB 时的建议

避免混用连接字符串和数据库访问技术。 对 DAO 使用 ODBC 连接字符串。 对 ADO 使用 OLE DB 连接字符串。 如果你的应用程序包含同时使用 DAO 和 ADO 的 VBA 代码,请对 DAO 使用 ODBC 驱动程序,并对 ADO 使用 OLE DB 提供程序。 尽可能分别获得 ODBC 和 OLEDB 的最新功能和支持。

ODBC 使用术语“驱动程序”,而 OLE DB 使用术语“提供程序”。 这些术语描述的是同一类型的软件组件,但在连接字符串语法中不可互换。 请根据文档要求使用正确值。

返回页首

通过编程从 Access 连接到 SQL Server

有两种方法可通过编程方式从 Access 连接到 SQL Server 数据库。

DAO

数据访问对象 (DAO) 提供用于连接数据库的抽象接口。 Microsoft 数据访问对象 (DAO) 是本机编程对象模型,让你直达 Access 和 SQL Server 的核心,以便创建、删除、修改和列出对象、表格、字段、索引、关系、查询、属性和外部数据库。

有关详细信息,请参阅 Microsoft 数据访问对象参考

ADO

ActiveX 数据对象 (ADO) 提供一种高级编程模型,可通过引用第三方库在 Access 中使用。 ADO 易于学习,使客户端应用程序能够访问和操作各种来源(包括 Access 和 SQL Server)的数据。 其主要优点是易用性、高速、低内存开销和较小的磁盘占用空间。 ADO 还支持用于构建和基于 Web 的应用程序的主要功能。

有关详细信息,请参阅 Microsoft ActiveX 数据对象参考Microsoft ActiveX 数据对象 (ADO)

应使用哪一个?

在使用 VBA 代码的 Access 解决方案中,可使用 DAO 和/或 ADO 作为数据库接口技术。 DAO 仍然是 Access 中的默认设置。 例如,所有窗体和报表以及 Access 查询都使用 DAO。 但是,当迁移到 SQL Server 时,请考虑使用 ADO 使解决方案更加高效。 下面是有助于确定何时使用 DAO 或 ADO 的一般性准则。

希望执行以下操作时使用 DAO:

  • 在不使用 VBA 的情况下创建读/写绑定窗体。

  • 查询本地表。

  • 将数据下载到临时表中。

  • 以只读模式将直通查询用作报表或窗体的数据源。

  • 在 VBA 中定义和使用 TableDef 或 Querydef 对象。

希望执行以下操作时使用 ADO:

  • 利用额外的方法进行优化,如执行异步操作。

  • 运行 DDL 和 DML 直通查询。

  • 通过 VBA 中的记录集直接访问 SQL Server 数据。

  • 为特定任务(如 Blob 的流式传输)编写更简单的代码。

  • 使用 VBA 中的命令对象通过参数直接调用存储过程。

返回页首

ODBC 驱动程序版本摘要

下表总结了有关 ODBC 驱动程序版本、下载位置和功能支持的重要信息。 请确保使用基于 Windows 而不是 Office 的正确驱动程序位版本(64 位或 32 位)。 如果在 64 位 Windows 上运行 32 位 Access,请安装 64 位驱动程序(其中包括 Access 所需的 32 位组件)。

有关详细信息,请参阅将连接字符串关键字用于 SQL Server Native Client适用于 Windows 上 SQL Server 的 ODBC 的发行说明 (V17) 以及 Windows 上的 Microsoft ODBC Driver for SQL Server 的功能(V13、11)

ODBC 驱动程序

版本

下载

新功能

ODBC 驱动程序 17.0 至 17.3

SQL Server 2017

下载

ODBC 驱动程序 17.3

将 Azure Active Directory 与 ODBC 驱动程序一起使用

使用 Always Encrypted 时的 ODBC 驱动程序限制

使用 XA 事务

ODBC 驱动程序 17.2

将 Always Encrypted 与 SQL Server 的 ODBC 驱动程序一起使用

数据分类

UTF-8 服务器编码排序规则和 Unicode 支持

ODBC 驱动程序 17.1

将 Always Encrypted 与 SQL Server 的 ODBC 驱动程序一起使用

ODBC 驱动程序 17.0

Always Encrypted

UseFMTONLY    在需要临时表的特殊情况下使用旧元数据。 请参阅适用于 Windows 上 SQL Server 的 ODBC 的发行说明

使用托管实例时的差异(ODBC 版本 17)

ODBC 驱动程序 13.1

SQL Server 2016 SP1、SQL Azure

下载

Always Encrypted

Azure Active Directory

AlwaysOn 可用性组

SQL Server 的 ODBC 驱动程序中的驱动程序感知连接池

ODBC 驱动程序 13.0

SQL Server 2016

下载

国际化域名 (IDN)

ODBC 驱动程序 11.0

SQL Server 2005 至 2012

下载

驱动程序感知连接池

Windows ODBC 驱动程序中的连接弹性

异步执行

客户端连接 (ODBC) 中的服务主体名称 (SPN)

Windows 上的 Microsoft ODBC Driver for SQL Server 的功能

返回页首

OLE DB 提供程序版本摘要

下表总结了有关 OLE DB 提供程序版本、下载位置和功能支持的重要信息。 请确保使用基于 Windows 而不是 Office 的正确驱动程序位版本(64 位或 32 位)。 如果在 64 位 Windows 上运行 32 位 Access,请安装 64 位驱动程序(其中包括 Access 所需的 32 位组件)。

有关详细信息,请参阅将连接字符串关键字用于 SQL Server Native Client

OLE DB 提供程序

版本

下载

新功能

OLE DB 驱动程序 18.2.1

(MSOLEDBSQL)

SQL Server 2017

下载

适用于 SQL Server 的 OLE DB 驱动程序的功能适用于 SQL Server 的 Microsoft OLE DB 驱动程序的发行说明

SQL Server Native Client (SQLNCLI)

SQL Server 2005 至 2012

已弃用,请勿使用

OLE DB 驱动程序 (SQLOLEDB)

已弃用,请勿使用

返回页首

ODBC 关键字摘要

下表总结了 SQL Server 可识别的 ODBC 关键字及其用途。 Access 仅可识别其中一部分。

关键字

说明

Addr

运行 SQL Server 实例的服务器的网络地址。

AnsiNPW

指定是否使用 ANSI 定义的行为来处理 NULL 比较、字符数据填充、警告和 NULL 连接(是或否)。

APP

调用 SQLDriverConnect 的应用程序的名称。

ApplicationIntent

在连接到服务器时声明应用程序工作负载类型(ReadOnly 或 ReadWrite)。

AttachDBFileName

可附加数据库的主文件的名称。

AutoTranslate

指定是否在客户端或服务器之间发送 ANSI 字符串或将其转换为 Unicode(是或否)。

Database

数据库名称。 Description 连接的目的。 Driver SQLDrivers 返回的驱动程序名称。

DSN

现有 ODBC 用户或系统数据源的名称。 Encrypt 指定是否应在通过网络发送数据之前对数据进行加密(是或否)。

Failover_Partner

无法连接到主服务器时要使用的故障转移伙伴服务器的名称。

FailoverPartnerSPN

故障转移伙伴的 SPN。

Fallback

已弃用的关键字。

FileDSN

现有 ODBC 文件数据源的名称。 Language SQL Server 语言。

MARS_Connection

在 SQL Server 2005 (9.x) 或更高版本的连接上指定多重活动结果集 (MARS)(是或否)。

MultiSubnetFailover

指定是否连接到 SQL Server 可用性组或故障转移群集实例的可用性组侦听程序(是或否)。

Net

dbnmpntw 表示命名管道,而 dbmssocn 表示 TCP/IP。

PWD

SQL Server 登录密码。

QueryLog_On

指定是否记录长时间运行的查询(是或否)。

QueryLogFile

长时间运行的查询的数据记录文件的完整路径和文件名。

QueryLogTime

数字字符串,指定为了记录长时间运行的查询而需达到的阈值(以毫秒为单位)。

QuotedId

指定 SQL Server 是否使用关于在 SQL 语句中使用引号的 ISO 规则(是或否)。

Regional

指定在将货币、日期或时间数据转换为字符数据时 SQL Server Native Client ODBC 驱动程序是否使用客户端设置(是或否)。

SaveFile

在连接成功的情况下当前连接的属性所保存到的 ODBC 数据源文件名称。

Server

SQL Server 实例的名称:网络上的服务器、IP 地址或配置管理器别名。

ServerSPN

服务器的 SPN。

StatsLog_On

启用 SQL Server Native Client ODBC 驱动程序性能数据捕获。

StatsLogFile

用于记录 SQL Server Native Client ODBC 驱动程序性能统计信息的文件的完整路径和文件名。

Trusted_Connection

指定是否将 Windows 身份验证模式或 SQL Server 用户名或密码用于登录验证(是或否)。

TrustServerCertificate

与 Encrypt 一起使用时,启用使用自签名服务器证书的加密。

UID

SQL Server 登录名。

UseProcForPrepare

已弃用的关键字。

WSID

工作站标识符,表示应用程序所在计算机的网络名称。

返回页首

OLE DB 关键字摘要

下表总结了 SQL Server 可识别的 OLE DB 关键字及其用途。 Access 仅可识别其中一部分。

关键字

说明

Addr

运行 SQL Server 实例的服务器的网络地址。

APP

标识应用程序的字符串。

ApplicationIntent

在连接到服务器时声明应用程序工作负载类型(ReadOnly 或 ReadWrite)。

AttachDBFileName

可附加数据库的主文件的名称。

AutoTranslate

配置 OEM/ANSI 字符转换(True 或 False)。

Connect Timeout

等待数据源初始化完成所需的时间(以秒为单位)。

Current Language

SQL Server 语言名称。

Data Source

组织中的 SQL Server 实例名称。

Database

数据库名称。

DataTypeCompatibility

一个数字,表示将使用的数据类型处理模式。

Encrypt

指定是否应在通过网络发送数据之前对数据进行加密(是或否)。

FailoverPartner

用于数据库镜像的故障转移服务器的名称。

FailoverPartnerSPN

故障转移伙伴的 SPN。

Initial Catalog

数据库名称。

Initial File Name

可附加数据库的主文件的名称(包括完整路径名)。

Integrated Security

用于 Windows 身份验证 (SSPI)。

Language

SQL Server 语言。

MarsConn

在 SQL Server 2005 (9.x) 或更高版本的连接上指定多重活动结果集 (MARS)(是或否)。

Net

用于与组织中的 SQL Server 实例建立连接的网络库。

Network Address

组织中的 SQL Server 实例的网络地址。

PacketSize

网络数据包大小。 默认值为 4096。

Persist Security Info

指定是否启用持久安全性(True 或 False)。

PersistSensitive

指定是否启用持久敏感(True 或 False)。

Provider

对于 SQL Server Native Client,这应该是 SQLNCLI11。

PWD

SQL Server 登录密码。

Server

SQL Server 实例的名称:网络上的服务器、IP 地址或配置管理器别名。

ServerSPN

服务器的 SPN。

Timeout

等待数据源初始化完成所需的时间(以秒为单位)。

Trusted_Connection

指定是否将 Windows 身份验证模式或 SQL Server 用户名或密码用于登录验证(是或否)。

TrustServerCertificate

指定是否已验证服务器证书(True 或 False)。

UID

SQL Server 登录名。

Use Encryption for Data

指定是否应在通过网络发送数据之前对数据进行加密(True 或 False)。

UseProcForPrepare

已弃用的关键字。

WSID

工作站标识符,表示应用程序所在计算机的网络名称。

返回页首

管理 ODBC 数据源

管理链接表

需要更多帮助?

需要更多选项?

了解订阅权益、浏览培训课程、了解如何保护设备等。

社区可帮助你提出和回答问题、提供反馈,并听取经验丰富专家的意见。