从 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 数据库中的数据的主要内容,如果未能解决你的问题,请参考以下文章