3

我们的大部分用户群通过使用 Microsoft Query 在 Excel 2003 中构建 ODBC 查询来访问公司数据。对于更复杂的事情,他们经常让我参与其中。

在很多情况下,我决定提取某些数据的最合乎逻辑的方法是使用内联表值函数来实现参数化视图的功能。从查询分析器调用时,这工作正常:

SELECT * FROM fn_AverageRecovery('2009-07','2009-10')

Sequence    Process Centre                                     Process Centres_Description                        Input Qty                                             Output Qty                                            Recovery                                              
----------- -------------------------------------------------- -------------------------------------------------- ----------------------------------------------------- ----------------------------------------------------- ----------------------------------------------------- 
10          GM                                                 Green Mill                                         12345.678                                             11223.344                                             11
11          LYR                                                Log Yard Report                                    98765.432                                             55443.322                                             99   
20          MB                                                 MultiBand Resaw                                    5555.666                                              5555.444                                              50                

但是在 MS Query 中输入相同的 SELECT 子句会导致错误:无法添加表 'fn_AverageRecovery('2009-07''。

不仅如此,我真正想做的是从电子表格中获取 Period 参数,但是如果我用问号替换文字 MS Query 会给我一个可怕的错误:在不能的查询中不允许使用参数以图形方式显示。

现在,我过去有时通过使用输入一些简单 SQL 语句的相当不雅的方法,单击 Excel 中结果集中的任何单元格,然后切换到 VBA 并在即时窗口中手动设置 CommandText 属性来设法避免这种情况:

ActiveCell.QueryTable.CommandText="select * from fn_AverageRecovery(?,?)"

没有来自 VBA 的投诉。但是当我切换回 Excel 并右键单击单元格并选择刷新数据时,我收到两个错误:

[Microsoft][ODBC SQL Server Driver]参数号无效

[Microsoft][ODBC SQL Server Driver]无效的描述符索引

每次我遇到这个问题时,我都会花一个小时左右的时间试图让它工作,但总是不得不求助于另一种方式来解决它。我很想知道是否有人征服了这个。

谢谢

韦恩象牙

4

1 回答 1

1

您可以尝试将其放入存储过程中,并让 Excel 工作表运行该存储过程。我认为它能够处理这个问题。然后只需让存储过程针对表函数运行查询。

于 2009-10-15T07:33:30.603 回答