複数のパラメータを使用して Excel (VBA) 経由で SQL ストアド プロシージャを実行する

複数のパラメータを使用して Excel (VBA) 経由で SQL ストアド プロシージャを実行する

ご協力ありがとうございます、@FreeMan。

しかし、私はまだこれについて迷っています。

最初から始めましょう。

これが私の質問の要約です(明確であることを願います)

SELECT DISTINCT Q1,Q2,Q3

from(SELECT A,B,C) Q1

full outer join

(SELECT A,B,C

from tblA as a

join tblB as b

on a.aID = b.bID

join tblC as c

on b.bID = c.cID

where (a,b, cdate <= ?

group by c) Q2

ON Q1.A = Q2.B

WHERE Convert(DATETIME, Q1.[B], 103) <= ?

order by Q1.[A]

When I try to refresh my table, I get the following error message

"[Microsoft][ODBC SQL Server Driver]Invalid Parameter number" and then

"[Microsoft][ODBC SQL Server Driver]Invalid Descriptor Index"

指定されたセル、つまりセル C3 のパラメータを使用してこのクエリを実行できるメソッドが必要です。

これで少しは状況が明確になると思いますが、私は VBA に精通していないため、上でアドバイスされているコマンドはすべて私にとってはわかりにくいです。

元の質問

*[私は VBA に関しては初心者なので、クエリを複数のパラメータで実行するのに苦労しています。このマクロを使用していますが、実行すると 2 番目のパラメータが指定されていないというメッセージが表示されます。

Sub RefreshQuery()

With ActiveWorkbook.Connections("MYSERVER").OLEDBConnection
    .CommandText = "EXECUTE dbo.Tng_Market_Feed '" & Range("B2").Value & "'"
End With
ActiveWorkbook.Connections("MYSERVER").Refresh

End Sub

質問は次のとおりです:- 1. 変数を日付形式に設定するにはどうすればいいですか? 特定の日付 (変数パラメータ) 以前のすべての取引を表示するレポートが必要です。 2. スプレッドシートのセル b2 の変数の位置は、両方のパラメータで同じままです。 たとえば、2014 年 12 月 31 日以前のすべての取引のリストと、同じ日付 2014 年 12 月 31 日の不良債権引当金の値/合計が必要です。]*

答え1

コード内からパラメータを作成して設定する簡単なサンプルを次に示します。

Sub CreateParam()

     Dim oQuery As QueryTable
     Dim oParam As Parameter

     Set oQuery = Sheet3.QueryTables(1)

     oQuery.CommandText = Replace(oQuery.CommandText, "='Berlin'", "=?")

     Set oParam = oQuery.Parameters.Add("CityParam")

     oParam.SetParam xlRange, Sheet3.Range("J1")
     oParam.RefreshOnChange = True

     oQuery.Refresh

End Sub

すぐにコピーされたコード当サイトについて

基本的に、ストアド プロシージャ内の各パラメーターに対して行を実行するだけで済みます。そのために全体を記述する必要はなく、既存のコードに行を追加するだけで.Parameter.Add()よいことに注意してください。Sub()Set oParam = oQuery.Parameters.Add()

OUT送信されるデータのタイプを指定したり、クエリから返されるデータを受け入れるためのパラメータを設定したりすることもできるので、オプションを少し詳しく調べる必要があるかもしれません。

関連情報