回憶那段您愛喝字母湯的兒時歲月。 請記住其中的美好,因為我們即將再次品嚐字母湯的美好,只是這次是要喝的資料庫字母湯。 以下各節會介紹使用連線字串連線資料庫以及在 Access VBA 程式碼中使用資料庫程式介面的基礎概念。
本文內容
使用 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,且目前仍然支援回溯相容性,但我們不建議使用它來進行新應用程式開發。 您應該使用較新的 ODBC 驅動程式個別下載版本。
ODBC 驅動程式
開放式資料庫連接 (ODBC) 是一項通訊協定,可用來將 Access 資料庫連線至外部資料來源 (如 Microsoft SQL Server)。 一般來說,可使用檔案資料來源 (也稱為 DSN 檔案) 來新增連線字串,而在此情況下,連線字串會使用 FILEDSN 關鍵字,或者當連線字串儲存在登錄中時則使用 DSN 關鍵字。 或者,您可以透過 VBA 使用無 DSN 的連線字串設定這些屬性。
過去幾年來,ODBC 驅動程式以三個階段方式提供:
-
2005 年之前,ODBC 驅動程式與 Windows Data Access Components (WDAC) 一起提供,其原始名稱為 Microsoft Data Access Components (MDAC)。 這些元件仍隨附於 Windows,以提供回溯相容性。 如需詳細資訊,請參閱 Microsoft 或 Windows Data Access Components (機器翻譯)。
-
在 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 Data Access Components (WDAC) 一起提供,其原始名稱為 Microsoft Data Access Components (MDAC)。
-
OLE DB 提供者隨附於 SQL Server 2005 到 SQL Server 2017 的版本中。 其在 2011 版中遭取代。
-
在 2017 版中,SQL Server OLE DB 提供者再次恢復使用。
針對新解決方案開發,目前建議使用 OLE DB Driver 18 for SQL Server。
如何使用 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
Data Access Objects (DAO) 提供資料庫的抽象介面。 Microsoft Data Access Objects (DAO) 是可讓您了解 Access 與 SQL Server 以建立、刪除、修改及列出物件、資料表、欄位、索引、關聯、查詢、屬性和外部資料庫的原生程式設計物件模型。
如需詳細資訊,請參閱 Microsoft Data Access Objects 參考 (英文)。
ADO
ActiveX Data Objects (ADO) 提供高階程式設計模型,透過協力廠商程式庫的參照可在 Access 中使用。 ADO 易於了解,而且可讓用戶端應用程式存取及管理多個來源的資料,包括 Access 和 SQL Server。 其主要的優點是易於使用、高速、記憶體負荷低以及磁碟使用量小。 ADO 也支援建置與 Web 應用程式的重要功能。
如需詳細資訊,請參閱 Microsoft ActiveX Data Objects 參考 (英文) 與 Microsoft ActiveX Data Objects (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 上的 ODBC to SQL Server 版本資訊 (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 驅動程式 ODBC 驅動程式使用 Always Encrypted 時的限制 ODBC 驅動程式 17.2 使用 Always Encrypted 與 ODBC Driver for SQL Server ODBC 驅動程式 17.1 使用 Always Encrypted 與 ODBC Driver for SQL Server ODBC 驅動程式 17.0 UseFMTONLY 若要在特殊情況中使用舊版中繼資料,需要暫存資料表。 請參閱 Windows 上 ODBC to SQL Server 版本資訊 (機器翻譯) |
|
ODBC 驅動程式 13.1 |
SQL Server 2016 SP1 SQL Azure |
||
ODBC 驅動程式 13.0 |
SQL Server 2016 |
國際化網域名稱 (IDN) |
|
ODBC 驅動程式 11.0 |
SQL Server 2005 到 2012 |
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 Driver for SQL Server 功能 (機器翻譯) 與Microsoft OLE DB Driver for SQL Server 的版本資訊 (機器翻譯) |
|
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 or 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 位址或 Configuration Manager 別名。 |
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 or 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 位址或 Configuration Manager 別名。 |
ServerSPN |
伺服器的 SPN。 |
Timeout |
等候資料來源初始化完成的時間 (以秒為單位)。 |
Trusted_Connection |
指定是否使用 Windows 驗證模式或 SQL Server 的使用者名稱或密碼作為登入驗證 (是或否)。 |
TrustServerCertificate |
指定是否要驗證伺服器憑證 (True 或 False)。 |
UID |
SQL Server 登入名稱。 |
Use Encryption for Data |
指定是否應該在透過網路傳送之前加密資料 (True 或 False)。 |
UseProcForPrepare |
已過時的關鍵字。 |
WSID |
工作站識別碼,應用程式所在之電腦的網路名稱。 |