簡體   English   中英

將 MS Access 后端遷移到 SQL 服務器

[英]Migrate MS Access back-end to SQL Server

我非常沮喪!

幾個月來,我一直在嘗試將 MS Access 數據庫遷移到 SQL 服務器,但沒有任何效果。 我需要能夠在 Access 前端和 SQL 服務器后端編輯數據。

我已經能夠復制表格,但一端的編輯未應用到另一端。 我可以下載的應用程序受到嚴重限制——我們的 IT 部門至少需要一周時間才能安裝新應用程序。 我嘗試使用 SSMS 18(今天剛剛安裝)來創建鏈接服務。

我使用“Microsoft Office 12.0 Access...”(16.0 不可用)作為提供程序,並將產品名稱和提供程序字符串留空——我在.mdb.accdb文件中收到此錯誤。

TITLE: Microsoft SQL 服務器管理工作室

已創建鏈接服務器,但連接測試失敗。 您要保留鏈接服務器嗎?

附加信息:執行 Transact-SQL 語句或批處理時發生異常。
(Microsoft.SqlServer.ConnectionInfo)

無法為鏈接服務器“2022_08_24”創建 OLE DB 提供程序“Microsoft.ACE.OLEDB.12.0”的實例。 (Microsoft SQL 服務器,錯誤:7302) 如需幫助,請單擊: https://docs.microsoft.com/sql/relational-databases/errors-events/mssqlserver-7302-database-engine-error

生成的腳本是

USE [master]
GO
EXEC master.dbo.sp_addlinkedserver @server = N'2022_08_24', @srvproduct=N'', @provider=N'Microsoft.ACE.OLEDB.12.0', @datasrc=N'C:\Users\liptonj1\OneDrive - Southern California Edison\Documents\Word Test_be.accdb'
GO
EXEC master.dbo.sp_serveroption @server=N'2022_08_24', @optname=N'collation compatible', @optvalue=N'false'
GO
EXEC master.dbo.sp_serveroption @server=N'2022_08_24', @optname=N'data access', @optvalue=N'true'
GO
EXEC master.dbo.sp_serveroption @server=N'2022_08_24', @optname=N'dist', @optvalue=N'false'
GO
EXEC master.dbo.sp_serveroption @server=N'2022_08_24', @optname=N'pub', @optvalue=N'false'
GO
EXEC master.dbo.sp_serveroption @server=N'2022_08_24', @optname=N'rpc', @optvalue=N'false'
GO
EXEC master.dbo.sp_serveroption @server=N'2022_08_24', @optname=N'rpc out', @optvalue=N'false'
GO
EXEC master.dbo.sp_serveroption @server=N'2022_08_24', @optname=N'sub', @optvalue=N'false'
GO
EXEC master.dbo.sp_serveroption @server=N'2022_08_24', @optname=N'connect timeout', @optvalue=N'0'
GO
EXEC master.dbo.sp_serveroption @server=N'2022_08_24', @optname=N'collation name', @optvalue=null
GO
EXEC master.dbo.sp_serveroption @server=N'2022_08_24', @optname=N'lazy schema validation', @optvalue=N'false'
GO
EXEC master.dbo.sp_serveroption @server=N'2022_08_24', @optname=N'query timeout', @optvalue=N'0'
GO
EXEC master.dbo.sp_serveroption @server=N'2022_08_24', @optname=N'use remote collation', @optvalue=N'true'
GO
EXEC master.dbo.sp_serveroption @server=N'2022_08_24', @optname=N'remote proc transaction promotion', @optvalue=N'true'
GO
USE [master]
GO
EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname = N'2022_08_24', @locallogin = NULL , @useself = N'False'
GO

這更像是一個評論而不是一個答案,但對於評論來說太長了。

嘗試以下步驟:

  1. 使用 SSMS 創建數據庫
  2. 使用該數據庫(單擊鼠標右鍵)使用任務/導入數據並使用 Access 連接類型連接到您的 Access 數據庫
  3. Select 要復制的表(並復制它們)
  4. 在您的 Access 前端,使用 ODBC 連接連接到 SQL 服務器數據庫並鏈接源表

然后您可以直接讀/寫它們

正確的流程是 SSMA 為 Access 實施的流程: https://www.microsoft.com/en-us/download/details.aspx?id=54255

After creating matching tables and migrating the data the last step is to replace the Access tables with ODBC linked tables to the SQL Server so your Access-based forms and reports work directly with the SQL Server data.

不需要從 SQL 服務器到訪問的鏈接服務器。

雖然通常情況並非如此,但我們假設您有一個拆分訪問數據庫。

這意味着您有所謂的前端(accdb 或 mdb)。 (FE) 然后您將表鏈接到后端(accDB 或 mdb)。 (是)

12號辦公室呢? 好的,那是 2007 版 - 15 歲,但應該可以正常工作。 (您使用的是 15 年前的其他什么軟件?或者您是否出於某種奇怪的原因將 Access 單獨用於這么舊的版本???)。

不管?

那么,這里的基本思想是什么?

您將表從 BE 遷移到 sql 服務器。

然后,您刪除指向 Access 后端的 FE 鏈接,現在要在您的 FE 中創建指向/鏈接到 SQL 服務器(您可能在其中)遷移 Access 數據表的鏈接。

因此:

我已經能夠復制表格,但一端的編輯未應用到另一端。

聽起來您的 FE 仍然指向較舊的數據庫。 我的意思是即使沒有 SQL 服務器,通常也很容易讓您的 FE 指向錯誤的數據庫 BE。 您開始編輯,但您看不到數據庫中的更改!!!!

因此,一旦您將數據移動到 SQL 服務器,然后在您的 FE 中,您將刪除鏈接(您不是在此處刪除表,而是僅刪除 FE 中的鏈接表,對,因為我們在 FE 中沒有表,請執行我們?)。

為什么我要導出/導入表,只是為了刪除它們?

您沒有刪除表,.,。 - 你要刪除你的“鏈接”表。 或者你的 Access FE 中的所謂鏈接,你現在不再使用 BE。 和編輯您的訪問 FE 中的數據將直接針對和編輯駐留在 SQL 服務器上的表,表之間沒有 suffeling 數據的概念 - 您正在使用鏈接表。 數據在 FE 中不存在,鏈接表中也不存在。 因此,您被告知要刪除鏈接表 - 而不是您的 BE 中的物理表。

我的意思是假設您的 Access 應用程序已拆分,那么您的 FE 中沒有要刪除的表了,是嗎? 所以,不,我們不會在這里刪除任何表,您將刪除之前指向您的 accDB BE 的 FE 中的 LINKED 表。

然后,您將創建新的表鏈接,這些鏈接現在指向您遷移到 SQL 服務器的表。

那么,如果您不使用 SSMAA?

然后使用 sql 工作室工具在 SQL 服務器中創建數據庫。

創建數據庫后,您就可以將 Access 表移動到該數據庫中。 因此,它歸結為您計划用於此任務的工具。

結果,表之間沒有數據“洗牌”。 您的 FE 中有一個鏈接表。 您正在直接編輯該鏈接表中的數據。 但是,現在鏈接表不是訪問表,而是駐留在 SQL 服務器上的表。

好的,以上概述了移動部件及其工作原理。

因此,讓我們在 Access 數據庫中使用一個簡單的表。 並讓我們將該表導入 SQL 服務器。 (但如前所述,由於這是一個表,所以我們可以使用簡單的導入。但是,再次,如果您在該 Access 數據庫中有大量表,那么專用遷移工具是比簡單導入更好的選擇很多倍表)。

因此,第一步是創建一個數據庫。 這與 Access 非常相似。 您創建一個新數據庫,然后將 Access 表(和數據)遷移(或導入)到該 SQL 服務器數據庫中。

完成后,第 2 步是創建一個鏈接到該表的鏈接表,該表位於 sql 服務器上。

因此,我們啟動 SSMS,並創建一個新表。

因此,我們右鍵單擊數據庫,然后選擇新數據庫。

在此處輸入圖像描述

然后只需為我們的數據庫輸入一個名稱。

在此處輸入圖像描述

現在點擊確定。

現在,我們右鍵單擊該數據庫,然后選擇導入數據。

例如:

在此處輸入圖像描述

現在,在這個例子中,我們將只導入一個表。

所以,在導入選項中,我們看到/得到這樣的東西:

在此處輸入圖像描述

注意選擇的數量。 好吧,如果這是一個 mdb 文件,那么從上面選擇“JET”數據庫引擎。

但是,如果這是一個 accDB 文件呢? (訪問 2007 及更高版本),然后像我一樣選擇 Access 數據引擎。

(並且您可能必須將文件下拉列表從 *.mdb 更改為所有文件。

所以,這選擇了文件。

現在下一頁,您必須 select sql 服務器“驅動程序”。 您在這里有太多選擇 - 這可能會非常混亂。

因此,到目前為止,最好的選擇是始終選擇 SQL 服務器原生驅動程序。 (你不必這樣做——但如果你不這樣做,將會更加痛苦和痛苦)。

所以這個:

在此處輸入圖像描述

因此這是:

在此處輸入圖像描述

再說一次,不知道您是否在這里使用 SQL 服務器登錄或 windows 安全性。

好的,現在我們得到:

在此處輸入圖像描述

我只選擇一個表(因為這是通過使用簡單的導入來進行數據遷移的一種糟糕且糟糕的方式——但我們必須從某個地方開始。!!)。

因此,此時,我們應該能夠擴展我們的數據庫,並查看 ONE 表。

這個:

在此處輸入圖像描述

好的,現在右鍵單擊此表並選擇設計。

SSMS 中的表設計器非常類似於 access,因此接下來的步驟應該很容易:

記住我上面所說的。 上面我們使用的導入選項是一種將數據導入 SQL 服務器的糟糕方式,而目標是使用我們的 Access FE 鏈接到該表。

原因是因為導入選項有點像 Excel 和平面文件的骯臟和快速導入選擇,並且快速而骯臟。

但是,它不會設置我們的主鍵,以及我們在 Access 表中通常具有的所有其他設置(例如 PK 列和自動編號)。

所以,現在在設計模式下,我們將設置 PK 列。

所以點擊PK列(在大多數情況下應該是“ID”——Access的默認值)。

然后在SSMS菜單上,點擊主鍵按鈕。

這個:

在此處輸入圖像描述

好的,這得到了 PK(主鍵設置)。

現在我們還需要將此 PK 設置為“自動編號”(就像在 Access 中一樣)。

所以這個設置:

在此處輸入圖像描述

因此,再次選擇“ID”,並在屬性表中,將列設置為“是識別”“是”,它將為增量和種子輸入 1 和 1。

您現在可以關閉此表。

因此,如前所述,對於 1 或 2-3 個表,您必須為每個表執行上述操作。

正如我所說,如果您有 40 個和 ALSO 相關的數據和表,那么我們希望使用自動化工具(例如 Access - SSMAA 的 SQL 遷移助手)。

但是,對於這個 ONE table 測試,上面的就可以了。

好的,所以現在我們 go 到我們的 Access FE,我們可以刪除這個鏈接到后端的表。 (同樣,我們不刪除表,而只刪除舊的現有 LINKED 表)。

現在我們為 SQL 服務器表創建一個新的鏈接表。

在訪問中,然后這個:

在此處輸入圖像描述

因此,該選項允許我們導入或鏈接(我們將在此處鏈接)。

在此處輸入圖像描述

我們得到了這個:

在此處輸入圖像描述

總是沒關系,按照上面的方法選擇(保留默認為 FILE),不要使用機器數據源)。

接下來我們選擇ODBC sql服務器驅動。

如果可能,請始終選擇本機驅動程序。 但是,此選擇取決於您是否要將 FE 分發給許多用戶。 (默認情況下不安裝本機 11、12 和最多 18 個驅動程序)。 如果您沒有看到任何本機驅動程序,請選擇“SQL Server”,但本機驅動程序是更好的選擇(但缺點是這些驅動程序必須安裝在所有計算機上。“SQL Server”可以是一個不錯的選擇,因為它總是存在於每台計算機上)。

實際上,為此讓 go 與 SQL 服務器合二為一。

所以,這個:

在此處輸入圖像描述

那么這個(選擇一個名稱)作為連接。

在此處輸入圖像描述

接下來,然后完成,我們得到這個:

下拉列表應該顯示您擁有的 SQL 服務器列表。

在此處輸入圖像描述

然后選擇您的登錄。

在此處輸入圖像描述

不知道你用的是windows認證,還是SQL服務器密碼。

然后:

超級超級重要的一步!!!!!!!

確保您使用此下拉菜單選擇您的數據庫 - 不要跳過此!!!!

選中將默認數據庫更改為框,然后選擇我們創建的數據庫。

在此處輸入圖像描述

這我們可以點擊下一個 - 沒有什么可以改變的。

在此處輸入圖像描述

那么這個 - 你可以(應該)嘗試測試數據源按鈕。

在此處輸入圖像描述

現在我們一直回到最近的起始面板,你可以點擊確定

在此處輸入圖像描述

現在我們得到/可以 select 表鏈接到:

找到你的桌子 - select 它,並檢查保存密碼按鈕。

在此處輸入圖像描述

此時,您應該在 Access 中看到一個鏈接表。 如果我們打開它,我們會得到:

在此處輸入圖像描述

好的,還有第三個選項。

Access 2010 是最后一個具有內置 SQL 服務器遷移工具的 Access 版本。

所以我們在 12 年后的 2022 年!!!

但是,Access 2010,實際上是 Access 2007? 它有一個內置的遷移工具!!!

這是 2007 年的菜單:

在此處輸入圖像描述

因此,在 2010 年之后,強烈建議您使用 SSMAA - 單獨下載和安裝。

但是,Access 2003、2007 和 2010? 他們有一個內置的遷移工具到 sql 服務器。

我沒有 15 年前的 Access 版本了,但您可能很想嘗試使用該工具。 只要確保您不使用或選擇“ADP”選項即可。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM