Sql-Server

如何讓 MS Access 訪問 MSSQL 上的連結伺服器

  • July 25, 2016

我們有一個在前端/後端配置中使用了 16 年的 MS Access 數據庫。它現在使用 ACCDB 文件在最新版本的 MS Access 下執行。從一開始,我們就添加了連接到遠端 MySQL 伺服器以訪問它的一些表 R/O 的元素。這工作正常。我們創建到遠端 MySQL 伺服器的 ODBC 連接,然後在 Access 中選擇 - 外部數據>>ODBC 數據庫>>連結到數據源,選擇 ODBC 驅動程序,然後選擇我們需要的表。然後它們顯示為帶有地球圖示的連結表。

由於篇幅太長,我們需要將 MS Access 後端移至 MSSQL 伺服器。所以我們在區域網路上設置了一個(SQL 2012)。它工作正常,我可以在 Access 中進行基本相同類型的 ODBC 連接,以訪問我們在該伺服器上創建的任何數據庫。

然後我們使用 SQL Server Management Studio 創建遠端 MYSQL 伺服器的 Linked Server。這也很好。使用 SSMS,我們可以看到 Linked 伺服器的所有表,甚至可以使用 OPENQUERY 方法查詢數據。我們似乎無法使用 4 部分名稱(“servername.databasename.schemaname.tablename”)來查詢數據。任何這樣做的嘗試都會返回與此類似的錯誤:

… 不包含可以選擇的列,或者目前使用者對該對像沒有權限。

但真正的問題是 - 我將在 MS Access 中做什麼才能訪問連結伺服器?當我創建到 MSSQL 伺服器的 ODBC 連接時,我所能看到的只是在那裡創建的數據庫。我看不到連結伺服器,因此我無法將它的任何錶鍊接到 MS Access。我已經在網上搜尋過,有些執行緒涉及到這一點,但還不夠清楚,我無法弄清楚。

提前感謝任何可以提供幫助的人。

經過進一步研究,我找到了自己對這個問題的答案。通過 Access,我可以創建到包含連結伺服器的 MS SQL Server 的 ODBC 連接。即使連結的數據庫未顯示為伺服器上可用的數據庫之一,如果我省略了第二和第三部分(例如 servername…tablename),我可以使用 4 部分命名約定。這只有在我首先轉到連結伺服器->提供程序(在 SQL 伺服器上)下的 MSDASQL 屬性時才有效。在那裡,必須檢查“僅零級”。

我知道通常我可以繼續通過 ODBC 與 MS SQL 伺服器分開訪問 MySQL DB,但是 MySQL DB 屬於另一家公司,它只允許我們在 1 個 IP 地址下訪問它,我們公司的辦公室 IP。由於我們想開始遠端使用 Access 程序,因此必須通過位於我們辦公室的 MS SQL 伺服器訪問它,因此所有請求都通過正確的 IP 地址進行。

不過感謝您的回饋。

正如 Sean Lange 所提到的,MS Access 不能使用只能從 SQL Server 內部訪問的連結伺服器。但是 MS Access 在 SQL Server 之外。

如果您將 MS Access 視為 2 層客戶端/伺服器項目中的客戶端,那麼應該清楚您可以使用 3 部分命名約定 (ServerName.Schema.Object) 來訪問 SQL Server。

如果您有足夠的權限,您可以通過常用的 T-SQL 操作 SQL Server 數據,從 MS Access 更新 SQL Server 中的數據。

如果您希望 SQL Server 本身從 MS Access 數據庫中獲取數據,那麼您可以在 SQL Server 中創建一個連結伺服器,該伺服器將通過提供程序從 MS Access 獲取數據。

https://msdn.microsoft.com/en-us/library/ms190479.aspx提供了來自Northwind數據庫的範例提供設置。

EXEC sp_addlinkedserver 
  @server = N'SEATTLE Payroll', 
  @srvproduct = N'',
  @provider = N'MSDASQL', 
  @datasrc = N'LocalServer';
GO

引用自:https://dba.stackexchange.com/questions/129320