当社のユーザー ベースの大部分は、Microsoft Query を使用して Excel 2003 内で ODBC クエリを作成することにより、企業データにアクセスしています。より複雑なものについては、彼らはしばしば私を巻き込みます。
特定のデータを抽出する最も論理的な方法は、インライン テーブル値関数を使用してパラメーター化されたビューの機能を実現することであると判断する機会が何度もありました。これは、Query Analyzer から呼び出されたときに正常に機能します。
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''.
それだけでなく、本当にやりたいことは、ピリオド パラメーターをスプレッドシートから取得することですが、リテラルを疑問符に置き換えると、MS Query で恐ろしいエラーが表示されます。グラフィカルに表示されます。
さて、私は過去に、いくつかの単純な SQL ステートメントを入力し、Excel 内の結果セット内の任意のセルをクリックし、VBA に切り替えて、イミディエイト ウィンドウで CommandText プロパティを手動で設定するというかなり洗練されていない方法を使用して、この状況を回避することができました。 :
ActiveCell.QueryTable.CommandText="select * from fn_AverageRecovery(?,?)"
VBA からの苦情はありません。しかし、Excel に戻ってセルを右クリックし、[データの更新] を選択すると、次の 2 つのエラーが発生します。
[Microsoft][ODBC SQL Server Driver]無効なパラメーター番号
[Microsoft][ODBC SQL Server Driver]無効な記述子インデックス
これに遭遇するたびに、それを機能させるために1時間ほど費やしましたが、常に別の方法で解決する必要がありました. 誰かがこれを克服したかどうか知りたいです。
ありがとう
ウェイン・アイボリー