全部,
我已经在许多运行 x64 Windows 7 的计算机上为 SQL Server 2008 R2 (Service Pack 1) 设置了 Access 数据库引擎,以“管理员”身份运行(并将 SQL Server 设置为“sa”)没有任何问题。我还在运行 Windows 7 和 SQL Server 2008 R2 Express Edition (x86) 的 x86 计算机上安装了 Access 数据库引擎,同样没有问题。但是,当我尝试在 x86 Windows 7 下使用 SQL Server 2008 R2 的开发人员版设置 Access 数据库引擎时,它不起作用!?它适用于 Express,但不适用于 Developer。我尝试完全重新安装 SQL,但仍然不起作用,并抛出以下错误:
OLE DB provider "Microsoft.Ace.OLEDB.12.0" for linked server "(null)" returned message "Unspecified error".
Msg 7303, Level 16, State 1, Line 1
Cannot initialize the data source object of OLE DB provider "Microsoft.Ace.OLEDB.12.0" for linked server "(null)".
机器信息是(从运行‘systeminfo’的命令行获得):
OS Name: Microsoft Windows 7 Professional
OS Version: 6.1.7601 Service Pack 1 Build 7601
OS Configuration: Standalone workstation
System Type: X86-based PC
Processor(s): 1 Processor(s) Installed.
[01]: x64 Family 6 Model 42 Stepping 7 GenuineIntel ~2501Mhz
为了设置已成功安装 32 位版本的 Access Engine,我进入管理工作室并运行以下查询:
EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'AllowInProcess', 1
GO
EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'DynamicParameters', 1
GO
-- Then each of the following separately.
EXEC sp_configure 'show advanced options',1
reconfigure
EXEC sp_configure 'Ad Hoc Distributed Queries', 1
reconfigure
我通常运行的一个查询来确定链接服务器是否配置正确:
SELECT * FROM OPENROWSET('Microsoft.Ace.OLEDB.12.0', 'J:\Data\thisDir\thatDir\someAccessFile.mdb'; 'admin';'',thisTable);
GO
此过程适用于所有配置,包括 SQL Express 2008 R2(x86 和 x64)和 Access 数据库引擎(分别为 x86 和 x64),但对于 x86 Windows 7 上的开发人员版本则不适用,为什么?
有谁遇到过这个问题并且可以给我一些关于如何解决这个问题的建议吗?
非常感谢你花时间陪伴。
答案1
在这个帖子问题在于 Temp 文件夹的权限:
我的解决方案是使用 SQL Server 的服务帐户登录服务器一次。此后一切立即生效,我在第二台服务器上进行了复制。
我在其他地方读到,Ace 和 Jet 引擎都需要访问 Temp 文件夹才能工作。我怀疑登录一次是“连接”Temp 文件夹访问权限所必需的。
答案2
发生这种情况是因为 SQL Server 用于链接服务器设置的“网络服务”文件夹的权限问题。为了使用另一个帐户访问链接服务器(假设您已正确设置服务器权限),您需要执行以下操作:
打开 Windows 资源管理器并导航到以下文件夹(请仔细执行后续步骤,因为您现在正在处理系统文件)“C:\Windows\ServiceProfiles\NetworkService\AppData\Local”。此目录包含一个名为“Temp”的文件夹,右键单击该文件夹并选择“属性”。在以下对话框中,单击“安全”选项卡。如果您可以看到要设置为使用 Access 数据库引擎的标准用户帐户,则意味着它已经对该文件夹拥有一些权限,如果它不在“用户名组:”列表中,则需要添加它。无论哪种方式,单击“用户名组:”列表下方的“编辑...”按钮,这将启动“Temp 的权限”对话框。如果您需要将标准用户添加到权限组,请使用“添加...”按钮进行添加,并确保在以下“选择用户或组”对话框中正确拼写帐户名称。当标准用户出现在权限列表中时,选择该用户,并在“标准用户的权限”选择菜单中选中“允许”列下的“完全控制”框。单击“确定”;再次单击“确定”退出此菜单。
现在,您应该能够以以这种方式提供权限的任何用户的身份运行访问查询。
您还必须确保已在 Management Studio 中运行以下查询以正确配置 Access Engine
-- These can be run as one batch.
EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'AllowInProcess', 1
GO
EXEC master.dbo.sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0',
'DynamicParameters', 1
GO
-- Run each of the following queries individually.
EXEC sp_configure 'show advanced options',1
reconfigure
EXEC sp_configure 'Ad Hoc Distributed Queries', 1
Reconfigure
我希望这有帮助。