在Excel只读模式下运行Sql时,Excel Sql抛出的参数太少错误

在Excel只读模式下运行Sql时,Excel Sql抛出的参数太少错误,sql,vba,excel,Sql,Vba,Excel,我有一个excel工作表,通过ODBC将数据从oracle加载到“数据”工作表中。然后应用excelsql过滤一些数据 注意:我在服务器上工作,所以不能粘贴整个代码。但不管我说什么都是100%正确的 'Load Data Sheet Sql = Select * from oracleTable . . . set rs1 = commandData.Execute() 'record set 'Then code to store rs1 values in to Data Sheet...

我有一个excel工作表,通过ODBC将数据从oracle加载到“数据”工作表中。然后应用excelsql过滤一些数据

注意:我在服务器上工作,所以不能粘贴整个代码。但不管我说什么都是100%正确的

'Load Data Sheet
Sql = Select * from oracleTable
. . . 
set rs1 = commandData.Execute() 'record set
'Then code to store rs1 values in to Data Sheet...
.
.
'Apply filter in Excel 
query = select col1,col2,col3 from [Data$A1:IV100] where col1='10'
set rs = commandData.Execute() 'record set
在写入模式下打开时返回正确的结果。 但是,当我将工作表置于只读模式时,我的用户可以保护工作表的内容。 它可以从oracle加载数据,然后在第行执行筛选excel sql时显示错误

   set rs = commandData.Execute() ' Error at this line when opened in read only mode
错误:

[Microsoft][ODBC Excel驱动程序]参数太少。预期1


这是否类似于当excel以只读方式打开时,它会在临时目录中打开,因此在执行excel查询时,是否很难找到正确的工作表来应用sql?

您没有正确使用.Execute()函数

不返回行的语法:

commandobject.Execute RecordsAffected, Parameters, Options 
Set recordsetobject = commandobject.Execute (RecordsAffected, Parameters, Options) 
行返回的语法:

commandobject.Execute RecordsAffected, Parameters, Options 
Set recordsetobject = commandobject.Execute (RecordsAffected, Parameters, Options) 

这里有一个更深入的链接:

您没有正确使用.Execute()函数

不返回行的语法:

commandobject.Execute RecordsAffected, Parameters, Options 
Set recordsetobject = commandobject.Execute (RecordsAffected, Parameters, Options) 
行返回的语法:

commandobject.Execute RecordsAffected, Parameters, Options 
Set recordsetobject = commandobject.Execute (RecordsAffected, Parameters, Options) 

这里有一个更深入报道的链接:

我自己也经常遇到这个错误。如果您挂断了电话,请尝试以下方法:

  • 打开VBA编辑器
  • 按Ctrl+G(这将打开即时窗口)
  • 将查询分配给变量后,立即在代码中设置断点(在本例中,
    query=
  • 当代码在断点中断时,在即时窗口中键入
    ?query
    ,然后按Enter键
  • 这将把SQL语句写入即时窗口
  • 检查SQL语句是否有任何错误(缺少引号等)

  • 您还可以尝试将SQL语句从即时窗口粘贴到数据库中并运行查询。有时,数据库会抛出更具体的错误消息,您可以相应地更正VBA代码。

    我自己也经常遇到此错误。如果挂断,请尝试以下操作:

  • 打开VBA编辑器
  • 按Ctrl+G(这将打开即时窗口)
  • 将查询分配给变量后,立即在代码中设置断点(在本例中,
    query=
  • 当代码在断点中断时,在即时窗口中键入
    ?query
    ,然后按Enter键
  • 这将把SQL语句写入即时窗口
  • 检查SQL语句是否有任何错误(缺少引号等)

  • 您也可以尝试将SQL语句从即时窗口粘贴到数据库中并运行查询。有时,您的数据库会抛出更具体的错误消息,您可以相应地更正VBA代码。

    请显示实际代码,而不是伪代码。从您所拥有的信息中,我可以看出您没有使用
    Set
    when赋值
    rs
    @TimWilliams:我修改了我的查询。我使用Set。这不是问题所在。它显示错误。@TimWilliams:我的问题现在修改得非常清楚。我不能复制粘贴整个代码,因为我在服务器上工作。此外,我解释了我的问题,在写模式下工作,而不是在只读模式下。Logan我相信ve如果Excel是只读的,它会给出一个错误。为什么?我不确定。但另一种方法是将工作簿保存为CSV,然后使用查询与CSV进行交互。正如您所发现的,您不能对只读文件使用ADO。如果我对您正在做的事情有更多了解,我可能会提出一些建议。例如,它可能适合编写将您的数据输出到csv:请显示实际代码,而不是伪代码。从您的数据中我只能看出,在分配
    rs
    时,您没有使用
    Set
    。@TimWilliams:我修改了我的查询。我正在使用Set。这不是问题所在。它显示错误。@TimWilliams:我的问题现在修改得非常清楚。我无法复制粘贴整个code,因为我在服务器上工作。此外,我很好地解释了我的问题,在写模式下工作,而不是在只读模式下工作。Logan我相信如果Excel是只读的,它会给出一个错误。为什么?我不确定。但另一种方法是将工作簿保存为CSV,然后使用查询与CSV交互。您不能使用ADO进行读取-正如您所发现的,只有一个文件。如果我对您正在做的事情了解得更多,我可能会提出一些建议。例如,它可能适合将您的数据写入csv:我正在使用set。问题已正确更新。它显示错误。我说代码正在编辑模式下工作,但不是在只读模式下。我正在使用set。问题已正确更新。它显示error.我说过代码是在编辑模式下工作的,但不是在只读模式下。在阅读了您对问题的编辑之后,我不确定我的答案是否适用。在阅读了您对问题的编辑之后,我不确定我的答案是否适用