將 Access 應用程式連結至 SQL Server - Azure SQL Database (AccessToSQL)
如果您想要搭配使用現有的 Access 應用程式與 SQL Server,您可以將原始的 Access 資料表連結至已移轉的 SQL Server 或 SQL Azure 資料表。 連結會修改您的 Access 資料庫,讓查詢、表單、報告和資料存取頁面使用 SQL Server 或 Azure SQL Database 中的資料,而非 Access 資料庫中的資料。
注意
您的 Access 資料表會保留在 Access 中,但不會與 SQL Server 或 SQL Azure 更新一起更新。 連結資料表並驗證功能之後,您可能想要刪除 Access 資料表。
連結 Access 和 SQL Server 資料表
當您將 Access 資料表連結至 SQL Server 或 SQL Azure 資料表時,Jet 資料庫引擎會儲存連線資訊和資料表中繼資料,但資料會儲存在 SQL Server 或 SQL Azure 中。 此連結可讓您的 Access 應用程式針對 Access 資料表運作,即使實際的資料表和資料位於 SQL Server 或 SQL Azure 中也一樣。
注意
如果您使用 SQL Server 驗證,密碼會以純文字形式儲存在連結的 Access 資料表上。 我們建議使用 Windows 驗證。
連結資料表
在 [Access 中繼資料總管] 中,選取您想要連結的資料表。
以滑鼠右鍵按一下 [資料表],然後選取 [連結]。
適用於 Access 的 SQL Server 移轉小幫手 (SSMA) 會備份原始 Access 資料表並建立連結的資料表。
連結資料表之後,SSMA 中的資料表會出現一個小連結圖示。 在 Access 中,資料表會以「連結的」圖示顯示,這是一個具有箭號 (指向它) 的地球。
當您在 Access 中開啟資料表時,會使用索引鍵集資料指標擷取資料。 因此,對於大型資料表,不會一次擷取所有資料。 不過,當您瀏覽資料表時,Access 會視需要擷取其他資料。
重要
若要連結 Access 資料表與 Azure 資料庫,您需要 SQL Server Native Client (SNAC) 10.5 版或更新版本。
您可以從 Microsoft® SQL Server 2008 R2 功能套件取得最新版本的 SNAC。
取消連結 Access 資料表
當您將 Access 資料表從 SQL Server 或 SQL Azure 資料表取消連結時,SSMA 會還原原始 Access 資料表及其資料。
取消連結資料表
在 [Access 中繼資料總管] 中,選取您想要取消連結的資料表。
以滑鼠右鍵按一下 [資料表],然後選取 [取消連結]。
將資料表連結至不同的伺服器
如果您已將 Access 資料表連結至一個 SQL Server 執行個體,且稍後想要變更另一個執行個體的連結,則必須重新連結資料表。
將資料表連結至不同的伺服器
在 [Access 中繼資料總管] 中,選取您想要取消連結的資料表。
以滑鼠右鍵按一下 [資料表],然後選取 [取消連結]。
按一下 [重新連線至 SQL Server] 按鈕。
連線到您要連結 Access 資料表的 SQL Server 或 SQL Azure 執行個體。
在 [Access 中繼資料總管] 中,選取您想要連結的資料表。
以滑鼠右鍵按一下 [資料表],然後選取 [連結]。
更新連結的資料表
如果變更 SQL Server 或 SQL Azure 資料表定義,您可使用本主題先前所示的程序,取消連結並重新連結 SSMA 中的資料表。 您也可使用 Access 來更新資料表。
使用 Access 更新連結的資料表
開啟 Access 資料庫。
在 [物件] 清單中,按一下 [資料表]。
以滑鼠右鍵按一下連結的資料表,然後選取 [連結的資料表管理員]。
選取要更新的每個連結資料表旁邊的核取方塊,然後按一下 [確定]。
可能的移轉後問題
下列各節列出將資料庫從 Access 移轉至 SQL Server 或 SQL Azure 之後,可能發生在現有 Access 應用程式中的問題,然後連結資料表,以及原因和解決方法。
連結資料表的效能變慢
原因:某些查詢在調整大小之後可能會因為下列原因而變慢:
應用程式取決於不存在於 SQL Server 或 SQL Azure 中的函式,這會導致 Jet 在本機提取資料表來執行 SELECT 查詢。
更新或刪除許多資料列的查詢是由 Jet 作為每個資料列的參數化查詢來傳送。
解決方法:將執行緩慢的查詢轉換為傳遞查詢、預存程序或檢視。 轉換成傳遞查詢有下列問題:
無法修改傳遞查詢。 修改查詢結果或新增記錄必須以替代方式完成,例如,在您繫結至查詢的表單上具有明確的 [修改] 或 [新增] 按鈕。
某些查詢需要使用者輸入,但傳遞查詢不支援使用者輸入。 使用者輸入可經由 Visual Basic for Applications (VBA) 程式碼取得 (該程式碼會提示輸入參數),或經由做為輸入控制項的表單取得。 在這兩種情況下,VBA 程式碼都會透過使用者輸入將查詢提交至伺服器。
直到更新記錄後,才會更新自動遞增資料行
原因:在 Jet 中呼叫 RecordSet.AddNew 之後,即可在更新記錄之前使用自動遞增資料行。 在 SQL Server 或 SQL Azure 中,並非如此。 只有在儲存新記錄之後,才可使用識別資料行的新值。
解決方法:存取識別欄位之前,請先執行下列 Visual Basic for Applications (VBA) 程式碼:
Recordset.Update
Recordset.Move 0,
Recordset.LastModified
無法使用新記錄
原因:當您使用 VBA 將記錄新增至 SQL Server 或 SQL Azure 資料表時,如果資料表的唯一索引欄位具有預設值,而且您未指派該欄位的值,則直到在 SQL Server 或 SQL Azure 中重新開啟資料表後,才會顯示新記錄。 如果您嘗試從新記錄取得值,您會收到下列錯誤訊息:
Run-time error '3167' Record is deleted.
解決方法:當您使用 VBA 程式碼開啟 SQL Server 或 SQL Azure 資料表時,請包含 dbSeeChanges
選項,如下列範例所示:
Set rs = db.OpenRecordset("TestTable", dbOpenDynaset, dbSeeChanges)
移轉之後,某些查詢將不允許使用者新增記錄
原因:如果查詢不包含唯一索引中包含的所有資料行,您就無法使用查詢來新增值。
解決方法:確定至少一個唯一索引中包含的所有資料行都是查詢的一部分。
您無法透過 Access 修改連結的資料表結構描述
原因:移轉資料和連結資料表之後,使用者無法修改 Access 中資料表的結構描述。
解決方法:使用 SQL Server Management Studio 修改資料表結構描述,然後在 Access 中更新連結。
移轉資料之後,超連結功能會遺失
原因:移轉資料之後,資料行中的超連結會失去其功能,且變成簡單的 Nvarchar(max) 資料行。
解決方案: 無。
Access 不支援某些 SQL Server 資料類型
原因:如果您稍後更新 SQL Server 或 SQL Azure 資料表,以包含 Access 不支援的資料類型,就無法在 Access 中開啟資料表。
解決方法:您可以定義 Access 查詢,只傳回具有支援資料類型的資料列。