Was den IBMDA400 angeht hast du leider recht !

Ich verwende auch nicht den {{CALL ...}}, sondern erstelle mir eine Prozedur:

myConn.Execute "CREATE PROCEDURE QTEMP.QCMDEXC (IN :PARM1 CHAR (512), IN :PARM2 DEC(15, 5)) LANGUAGE CL NOT DETERMINISTIC NO SQL EXTERNAL NAME QSYS.QCMDEXC PARAMETER STYLE GENERAL", , adExecuteNoRecords

(Fehler kann ignoriert werden, wenn Prozedur schon da)

Mein Command-Objekt:

With cCallCmd
.Name = "CallCmd"
Set .ActiveConnection = cConnect
.CommandText = "{CALL QTEMP.QCMDEXC (?, ?)}"
.CommandType = adCmdText
.Prepared = True
End With

Der Aufruf erfolgt dann analog:

cCallCmd.Execute(,Array(Cmd, Len(Cmd)))

Der 2. Paramter des Execute kann ein Parameter-Array enthalten.

Dieses Verfahren kannst du bestimmt auf dein Programm umsetzen.