从 sql server 读取 2010 年的 Access 数据库中的数据

Posted

技术标签:

【中文标题】从 sql server 读取 2010 年的 Access 数据库中的数据【英文标题】:Read data from 2010's Access database from sql server 【发布时间】:2019-06-13 15:13:33 【问题描述】:

我要告诉你我的环境:Windows Server 2012 R2 64、ACCESS 2010 32、SQL SERVER 2008 R2 64 使用管理员帐户运行,AccessDatabaseEngine 32。我需要将 sql 连接到 2010 的 bbdd 访问。我尝试创建一个链接服务器并使用 OPENDATASOURCE 和 OPENROWSET 但总是出现错误

OLE DB 提供程序“Microsoft.ACE.OLEDB.12.0”不能用于 分布式查询,因为它被配置为以简单的方式运行 受控线程模式。

我一直在互联网上搜索,我按照所有步骤操作,但我仍然有同样的错误,我也使用管理员和 sa 帐户的 SSMS,但总是同样的错误。奇怪的是,安装 AccessDatabaseEngine 32 后,“Microsoft.ACE.OLEDB”并没有出现在 Server Objects 的提供程序中。

非常感谢和问候。

EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'AllowInProcess', 1
EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'DynamicParameters', 1
exec sp_configure 'Advanced', 1
RECONFIGURE
GO
exec sp_configure 'Ad Hoc Distributed Queries', 1
RECONFIGURE
GO
exec sp_configure 'xp_cmdshell', 1
RECONFIGURE
GO
sp_configure 'show advanced options', 1
RECONFIGURE
GO
sp_configure 'Ad Hoc Distributed Queries', 1
GO

EXEC sp_addlinkedserver   
   @server = N'DATOS',   
   @provider = N'Microsoft.ACE.OLEDB.12.0',   
   @srvproduct = N'OLE DB Provider for ACE',  
   @datasrc = N'C:\SERVIDOR\DATOS\BBDDs.accdb';  
GO


SELECT id From OpenRowset('Microsoft.ACE.OLEDB.12.0',';Database=C:\SERVIDOR\DATOS\BBDDs.accdb;','SELECT * from Productos') as B
GO

SELECT *  FROM OPENDATASOURCE('Microsoft.ACE.OLEDB.12.0','Data Source=C:\SERVIDOR\DATOS\BBDDs.accdb')...Productos
GO

【问题讨论】:

【参考方案1】:

尝试安装64bit version of OLEDB driver

【讨论】:

感谢 fededim。我已经尝试过这样做,但这是不可能的,因为在服务器 2012 上安装了 32 位的访问版本并且无法更改为 64 位版本,因为它用于维护仅以 32 位执行的访问 2010 应用程序。 嗯,如果存在 32 位驱动程序,您甚至无法安装 64 位驱动程序?我认为这两个驱动程序可以共存,我担心您在 Sql server 的提供程序中看不到驱动程序,因为它是 64 位的。 否则,如果这不可能,我担心您必须安装另一台具有 32 位 Sql Server 的机器才能访问 access 数据库并在两个实例之间配置链接服务器。【参考方案2】:

启用环境。

EXEC sp_configure 'show advanced options', 1;  
GO  
RECONFIGURE;  
GO  
EXEC sp_configure 'Ad Hoc Distributed Queries', 1;  
GO  
RECONFIGURE;  
GO

然后,检查这是否有效。

Insert Into database.schema.yourtable SELECT * FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0',
'Excel 12.0 Xml;HDR=YES;Database=E:\Data\test.xls','SELECT * FROM [sheet1$]');

【讨论】:

以上是关于从 sql server 读取 2010 年的 Access 数据库中的数据的主要内容,如果未能解决你的问题,请参考以下文章

帮助从 SQL Server 读取二进制图像数据到 PHP

SQL Server:仅获取过去一年的数据

SQL Server 2005 SSIS - 如何从文件的第一行获取特殊信息

SQL Server:从 Excel 导入,只需要新条目

SQL Server数据库进阶之表分区实战演练

无法从具有多个 SQL Server 版本的 SQL Server 读取 Excel 文件