在Excel只读模式下运行Sql时,Excel Sql抛出的参数太少错误
我有一个excel工作表,通过ODBC将数据从oracle加载到“数据”工作表中。然后应用excelsql过滤一些数据 注意:我在服务器上工作,所以不能粘贴整个代码。但不管我说什么都是100%正确的在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...
'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)
这里有一个更深入报道的链接:我自己也经常遇到这个错误。如果您挂断了电话,请尝试以下方法:
query=
?query
,然后按Enter键您还可以尝试将SQL语句从即时窗口粘贴到数据库中并运行查询。有时,数据库会抛出更具体的错误消息,您可以相应地更正VBA代码。我自己也经常遇到此错误。如果挂断,请尝试以下操作:
query=
?query
,然后按Enter键您也可以尝试将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.我说过代码是在编辑模式下工作的,但不是在只读模式下。在阅读了您对问题的编辑之后,我不确定我的答案是否适用。在阅读了您对问题的编辑之后,我不确定我的答案是否适用