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

时间:2014-06-18 23:37:34

标签: sql-server sql-server-2008 excel-vba linked-server openrowset

我在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实例中没有定义链接服务器
  • AdHocRemoteQueriesEnabled的Surface Area Configuation facet为TRUE
  • 在我的服务器计算机上,注册表项HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Microsoft SQL Server \ MSSQL10.MSSQLSERVER \ Providers \ SQLNCLI10有一个名为DisallowAdhocAccess的条目,其中0

所以我的SQL服务器没有向我显示我过去可能做过的任何线索,以使插件能够从我的XP客户端计算机中激活sProc。

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

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

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提供程序将继续工作。 enter image description here

但是,从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)".

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

1 个答案:

答案 0 :(得分: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的不同客户端计算机上运行!