在不同客户端计算机上尝试VBA插件后,“对OLEDB提供程序的临时访问被拒绝”

问题描述 投票:0回答:1

我在SQL 2008中有一个存储过程已使用多年没有问题。这是一个相关的片段(INSERT INTO表SELECT块的一部分,只显示了几列):

INSERT INTO dbo.myTemp_Excel
SELECT 
'PropertyState'     = [Property State] ,
'PropertyCounty'    = [Property County] 
FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0',
    'Excel 8.0;Database=D:\RawData_MDS\Book1.xls;HDR=Yes;IMEX=1', 
    'SELECT
         [Property State] ,
         [Property County]
     FROM [Sheet1$]')

上面的代码仍然可以工作 - 我一直在调用这个sProc从一个VBA插件启动来处理在我的WindowsXP机器上打开的Excel 2003工作簿,但我正在从XP迁移....

所以,这是问题所在:

我已将此VBA插件复制到另一台计算机(WinServer2003)并加载它以使用Excel 2010处理相同的工作簿。插件运行正常,直到调用存储过程。然后我收到这条消息:

对OLE DB提供程序“Microsoft.Jet.OLEDB.4.0”的临时访问被拒绝。您必须通过链接服务器访问此提供程序。

搜索我发现的那条消息:

  • 我的SQL Server 2008实例中没有定义链接服务器
  • AdHoc RemoteQueries Enabled的表面区域配置方面为TRUE
  • 在我的服务器计算机上,注册表项HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Microsoft SQL Server \ MSSQL10.MSSQLSERVER \ Providers \ SQLNCLI10有一个名为DisallowAdhocAccess的条目,其中0

所以我的SQL服务器向我展示了我过去可能没有做过的任何线索,以使插件能够从我的XP客户端机器启动sProc。

有什么想法来解决这个问题吗?唯一真正不同的是“客户端”机器(即SQL实例,sproc和addin代码都是相同的)。

编辑更新:尝试在下面更改每个评论的提供者导致错误消息(即,这是一个不同的问题):

Msg 7403, Level 16, State 1, Procedure _Job_ConvertRawFHADataV3_PrepareStep, Line 59
The OLE DB provider "Microsoft.ACE.OLEDB.12.0" has not been registered.

如上所述,当从其他客户端计算机调用时,此处显示的Jet提供程序将继续工作。

但是,从Excel 2010打开时,JET提供程序可能无法处理完全相同的工作簿.OPENROWSET上的语法显示Excel 8.0,我认为它与Excel 2003相对应,因为它可以工作。我尝试将sProc更改为Excel 12.0并得到了这个:

OLE DB provider "Microsoft.Jet.OLEDB.4.0" for linked server "(null)" returned message "Could not find installable ISAM.".
Msg 7303, Level 16, State 1, Procedure _Job_ConvertRawFHADataV3_PrepareStep, Line 59
Cannot initialize the data source object of OLE DB provider "Microsoft.Jet.OLEDB.4.0" for linked server "(null)".

所以,显然我正在追逐我真的不知道的东西。在此先感谢您的继续帮助。

sql-server sql-server-2008 excel-vba linked-server openrowset
1个回答
0
投票

Rory上面的评论提供了一个很好的线索。这是我几年未读过的一个领域。简而言之,使用新的客户机并因此使用Excel 2010(与Excel 2003相比)意味着我需要一个新的“提供者”来处理数据。文章http://www.excel-sql-server.com/excel-import-to-sql-server-using-distributed-queries.htm非常好。我不得不安装提供程序,更新注册表,运行一些特殊的系统存储过程(所有这些调整都不明显但在文章中很好地解释)。最后,我必须修改OPENROWSET parm以使用ACE.OLEDB提供程序而不是JET.OLEDB和Excel 12.0而不是Excel 8.0。没有什么需要改变。在此之后,它甚至可以在运行Excel 2007的不同客户端计算机上运行!

© www.soinside.com 2019 - 2024. All rights reserved.