2

私はこのフォーラムが初めてで、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

私はこれについていくつかの助けに本当に感謝しています.

4

0 に答える 0