前提・実現したいこと
ExcelのVBAからストアドプロシージャ経由でCLコマンドを実行し、結果を戻り値として取得したい。
パラメータを含めて実行すると、実行はされるのですが戻り値が返ってきません。
エラー無く動いてしまっている為、特定できず困っているのですが、戻り値を取得する場合に下記コードで不足している箇所はありますでしょうか。
INは出来ているので処理は動くのですが、結果件数が得られず困っております。
ご教示のほどよろしくお願いいたします。
VBA
1Dim con As ADODB.Connection 2Dim cmd As ADODB.Command 3Dim ReturnField As String 4 5Set con = New ADODB.Connection 6Set cmd = New ADODB.Command 7 8con.Open "Provider=IBMDA400; Data Source=xxx.xxx.xxx.xxx", "user", "pass" 9 10Set cmd.ActiveConnection = con 11 12With cmd 13 .CommandText = "CALL TESTLIB.TESTCL(?,?)" 14 .Prepared = True 15 .Parameters.Append cmd.CreateParameter("Parm1", adChar, adParamInput, 2) 16 .Parameters.Append cmd.CreateParameter("Parm2", adChar, adParamInputOutput, 2) 17End With 18 19With cmd 20 .Parameters(0).Value = "A1" 21 .Parameters(1).Value = "" 22End With 23 24'*-- IBM i 処理実行 --* 25cmd.Execute ' Rcds, Parms, adCmdText 26 ' ↑参考URLに記載があったが、エラーが出るのでコメントアウト 27 28'*-- 戻り値の取得 --* 29ReturnField = cmd.Parameters(1).Value 30 31Cells(1, 1) = ReturnField 32 33'*-- connectionのクローズ、開放 --* 34cmd.ActiveConnection.Close 35Set con = Nothing 36 37End Sub
StoredProcedure
1CREATE PROCEDURE TSTLBS/TESTS1(IN P1 CHAR ( 2), INOUT P3 CHAR ( 2)) 2LANGUAGE CL NOT DETERMINISTIC MODIFIES SQL DATA EXTERNAL NAME 3TESTLIB/TESTCL PARAMETER STYLE GENERAL
CL
10001.00 PGM PARM(&IN1 &OUT1) 20002.00 DCL VAR(&IN1) TYPE(*CHAR) LEN(2) 30003.00 DCL VAR(&OUT1) TYPE(*CHAR) LEN(2) 40004.00 CHGVAR VAR(&OUT1) VALUE('11') 50005.00 ENDPGM 6
試した・確認したこと
・AS/400単体でCLを実行すると正常に戻り値が返ってくることを確認。
・追加仕様のCLに変えた所、ExcelからINするパラメータ値はDBに登録されていた。
・INOUT値なので値'10'をセットして実行すると、変更の無いまま'10'が表示される。
・ストアドプロシージャの記述に問題があるのかと、ストアド記述で一通り考えられる組み合わせを試してみたのですが上手く行くことはありませんでした。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/02/27 03:24
2022/02/27 03:40 編集
2022/02/27 03:42
2022/02/27 03:47
2022/02/27 07:11
2022/02/27 07:17