求教一个烦人的ACE 12.0的问题

cloverlay 2018-02-05 10:41:48
问题描述:本地机器,Windows身份验证方式登录;
1、首先安装好ACE 12.0的驱动,然后打开调用的开关:
exec sp_configure 'show advanced options',1 reconfigure
go
exec sp_configure 'Ad Hoc Distributed Queries',1 reconfigure
go
2、执行:
select * from OpenRowSet('Microsoft.ACE.OLEDB.12.0','Excel 8.0;HDR=Yes;IMEX=1;
Database=D:\query\test.xlsx',[sheet1$])
有正确的结果:
a b
1 2
3、执行:
select * from OpenRowSet('Microsoft.ACE.OLEDB.12.0','Excel 8.0;HDR=Yes;IMEX=1;
Database=D:\佣金制作\固网_201801\A_数据准备_2_业务数据\BSS融合群组信息.xlsx',[成员$])
报错:
链接服务器"(null)"的 OLE DB 访问接口 "Microsoft.ACE.OLEDB.12.0" 返回了消息 "Unexpected error from external database driver (1)."。
消息 7311,级别 16,状态 2,第 1 行
无法获取链接服务器 "(null)" 的 OLE DB 访问接口 "Microsoft.ACE.OLEDB.12.0" 的架构行集 "DBSCHEMA_COLUMNS"。该访问接口支持该接口,但使用该接口时返回了失败代码。

(说明:此表数据仅13万行,摘取前3行制作测试表格可以正常调用)

4、再次执行:
select * from OpenRowSet('Microsoft.ACE.OLEDB.12.0','Excel 8.0;HDR=Yes;IMEX=1;
Database=D:\query\test.xlsx',[sheet1$])
报错:
消息 7399,级别 16,状态 1,第 2 行
链接服务器 "(null)" 的 OLE DB 访问接口 "Microsoft.ACE.OLEDB.12.0" 报错。提供程序未给出有关错误的任何信息。
消息 7303,级别 16,状态 1,第 2 行
无法初始化链接服务器 "(null)" 的 OLE DB 访问接口 "Microsoft.ACE.OLEDB.12.0" 的数据源对象。
5、在不重启机器的情况下,反复尝试:关闭SQL重开、释放SQL内存、注销重登陆、重新安装MDAC驱动等多种方法均无效果,均为报错。
6、重启机器,从第2步开始执行,仍然有正确结果,继续往下,仍然报错,始终无法将目标数据导入。

说明:因为涉及到一个复杂的佣金核算系统,大量的Excel数据需要反复多次导入,因此不考虑手工处理Excel数据为Txt文本格式的解决方法(此例仅为抽取其中一表说明问题而已);只考虑找到问题根结之所在,彻底解决后,仍然走带参调用存储过程
实现Excel数据导入的方案。

请高手指点,谢谢了~
...全文
989 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
cloverlay 2019-10-21
  • 打赏
  • 举报
回复
现在问题已经解决。这期间我换了机器,重装了系统,换了Excel2016版本,安装2016版AccessDatabaseEngine_64.exe后仍然报错;最后安装2007版AccessDatabaseEngine_64.exe后解决了问题。自己标记一下,也希望能为其他碰到这个问题的人提供一点参考。
cloverlay 2018-02-06
  • 打赏
  • 举报
回复
另外,有个细节是我在上面忘记了说的:
4、再次执行:
select * from OpenRowSet('Microsoft.ACE.OLEDB.12.0','Excel 8.0;HDR=Yes;IMEX=1;
Database=D:\query\test.xlsx',[sheet1$])
报错:
消息 7399,级别 16,状态 1,第 2 行
链接服务器 "(null)" 的 OLE DB 访问接口 "Microsoft.ACE.OLEDB.12.0" 报错。提供程序未给出有关错误的任何信息。
消息 7303,级别 16,状态 1,第 2 行
无法初始化链接服务器 "(null)" 的 OLE DB 访问接口 "Microsoft.ACE.OLEDB.12.0" 的数据源对象。

如果执行第3步报错后,第一次这步,会报错:
链接服务器"(null)"的 OLE DB 访问接口 "Microsoft.ACE.OLEDB.12.0" 返回了消息 "System resource exceeded."。
消息 7320,级别 16,状态 2,第 1 行
无法对链接服务器 "(null)" 的 OLE DB 访问接口 "Microsoft.ACE.OLEDB.12.0" 执行查询"SELECT `Tbl1002`.`a` AS `Col1004`,`Tbl1002`.`b` AS `Col1005` FROM `sheet1$` `Tbl1002`"。
这个也是我尝试释放内存的原因。
cloverlay 2018-02-06
  • 打赏
  • 举报
回复
我自己分析: 1、不是任何的设置和开关的问题,因为第一次执行对[test.xlsx]的调用可以执行成功,得到正确的结果; 2、在执行实际应用数据时,出现问题;这个问题导致了SQL系统或机器某个其他子系统的某个错误,而且这个错误会影响到某个状态?某个开关?堆栈?(未知),然后这个错误仅会在重启机器的情况下被纠正。 3、机器重启之后,可以不做任何设置或者修改,成功执行对[test.xlsx]的调用
cloverlay 2018-02-06
  • 打赏
  • 举报
回复
引用 2 楼 OrchidCat 的回复:
参考这个看一下。 http://blog.csdn.net/orchidcat/article/details/7480680
谢谢,类似的文章早已搜索和尝试了多次。这两个开关早已打开。 可是结果还是报错。
Mr_Nice 2018-02-06
  • 打赏
  • 举报
回复
Mr_Nice 2018-02-06
  • 打赏
  • 举报
回复
USE [master]  
GO  
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
看一下这个配置做了没有。 没做的话,先执行一下。

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧