私はこのフォーラムが初めてで、VBA と SQL もまったく初めてなので、質問が問題を適切に説明しているかどうかわかりません。数日間問題に取り組んできましたが、解決策を見つけることができません。エクセルのセルから顧客コード「k_kod」を設定したいのですが、うまくいきません。何も返しません。"k_kod = '275'" を SQL ステートメントに直接設定すると、正常に動作します。また、「vg_kod」や「pa_datum」などのパラメーター (?) でも問題なく動作します。また、はるかに単純なコード文字列を試してみたところ、「k_kod」のパラメーター入力で動作するようになりました。しかし、そのコードでは、ネストされた WHERE 句ではありませんでした。
「k_kod」が2つの「WHERE句」に入っているからでしょうか。
コードは次のとおりです。
Sub grunddata_salj()
Sheets("Summary").Select
Dim Conn1_res As ADODB.Connection
Dim Cmd1_res As ADODB.Command
Dim Param1_res As ADODB.Parameter
Dim Param2_res As ADODB.Parameter
Dim Rs1_res As ADODB.Recordset
On Error Resume Next
Set Conn1_res = New ADODB.Connection
Conn1_res.ConnectionString = "DSN=xxx AB;uid=;pwd=;"
Conn1_res.Open
Set Rs1_res = New ADODB.Recordset
Set Cmd1_res = New ADODB.Command
Cmd1_res.ActiveConnection = Conn1_res
Cmd1_res.CommandText = "SELECT art_artnr, pa_datum, pa_pris " & _
"FROM m.prisandring as A, m.artikel, m.kundart, m.kund " & _
"WHERE pa_datum = " & _
"( " & _
"SELECT max(pa_datum), FROM m.kund, m.prisandring AS B " & _
"WHERE a.pa_id = b.pa_id " & _
"AND pa_datum < '2012-01-01' " & _
"AND pa_kl_id = kund.k_id " & _
"AND k_kod = ? " & _
") " & _
"AND artikel.art_id = pa_id " & _
"AND pa_prislista = '-3' " & _
"AND kundart.art_id = artikel.art_id " & _
"AND kundart.k_id = kund.k_id " & _
"AND pa_kl_id = kund.k_id " & _
"AND vg_kod <> '1' " & _
"AND k_kod = ? " & _
"GROUP BY art_artnr, pa_datum, pa_pris " & _
"ORDER BY art_artnr"
Set Param1_res = Cmd1_res.CreateParameter(, adInteger, adParamInput)
Param1_res.Value = "275"
Cmd1_res.Parameters.Append Param1_res
Set Param2_res = Cmd1_res.CreateParameter(, adInteger, adParamInput)
Param2_res.Value = "275"
Cmd1_res.Parameters.Append Param2_res
Set Rs1_res = Cmd1_res.Execute()
artno = Rs1_res("art_artnr")
p_date = Rs1_res("pa_datum")
p_price = Rs1_res("pa_pris")
Conn1_res.Close
Rs1_res.Close
End Sub
私はこれについていくつかの助けに本当に感謝しています.