PDA

View Full Version : ADO: Call mit Parametern



padawan
28-06-10, 12:47
Hallo,
V5R4 und VBA (dotnet)

Dieser Call-Befehl funktioniert auf der AS400, wenn ich dieses in der Befehlszeile eingebe:

CALL PGM(TTR/TTRENOMAC) PARM('W' X'012062010C' X'019062010C')

Genau diesen Call möchte ich per VBA starten, läuft aber auf Fehler:
[IBM][iSeries Access ODBC-Treiber][DB2 UDB]SQL0104 - Token X'012062010C' ungültig. Gültige Token: ) ,.


cnn.Open(con_str)
CallCmd = New ADODB.Command
CallCmd.CommandText = "CALL TTR.TTRENOMAC('W' X'012062010C' X'019062010C')"
CallCmd.ActiveConnection = cnn
CallCmd.Execute(cnn)
cnn.Close()

Auch diese zwei Aufrufe laufen auf Fehler:

'CallCmd.CommandText = "CALL TTR.TTRENOMAC('W' datv datb)"
'CallCmd.CommandText = "CALL TTR.TTRENOMAC('W' 'X'012062010C'' 'X'019062010C'')"

Das CL, das ich damit starte, erwartet drei Parameter und der zweite und dritte Parameter muss hexadecimal übergeben werden.

Wie formuliere ich das richtig?

Danke.
Gruss
Tobias

Fuerchau
28-06-10, 12:52
Bei SQL müssen die Parameter mit Komma getrennt werden:

call XXX ('X', x'0001')

padawan
28-06-10, 13:58
danke, hat geklappt.

padawan
28-06-10, 14:50
Hallo Herr Fuerchau,

wie muss ich das machen, damit die zwei Parameter die in Hexadecimal übergeben werden müssen, als Variable übergeben kann:

CallCmd.CommandText = "CALL TTR.TTRENOMAC('W' datv datb)"

anstatt

'CallCmd.CommandText = "CALL TTR.TTRENOMAC('W', X'012062010C' 'X'019062010C'')"


Die Variablen datv und datb sind im CL als:

PGM PARM(&OPTION &DATV &DATB)
DCL VAR(&OPTION) TYPE(*CHAR) LEN(1)
DCL VAR(&DATV) TYPE(*DEC) LEN(8 0)
DCL VAR(&DATB) TYPE(*DEC) LEN(8 0)

deklariert.

Danke und Gruss
Tobias

andreaspr@aon.at
28-06-10, 15:13
Wenn du im CL Dec(8, 0) definiert hast, warum musst du dann Hex übergeben?

In Sql gibts auch die Hex()-Funktion, falls dir das weiter hilft. Wobei ich fürcht, dass dies erst ab V7R1 geht.


CallCmd.CommandText = "CALL TTR.TTRENOMAC('W', hex(datv), hex(datb))"

Fuerchau
28-06-10, 16:38
Die Hexfunktion liefert die den expandierten Hexcode als Zeichenkette, was dir hierbei allerdings nicht hilft, da der Call Parameter in Hexform mit X'....' dann selber umwandelt.