PDA

View Full Version : AS400 Jobs /CL) unter Access starten



Seiten : [1] 2

Franz Karl
29-04-11, 09:42
Hallo,

gibt es eine Möglichkeit ein CL Programm auf der AS400 auch durch eine Access-prozedur aufzurufen ?

Z.B.

SBMJOB CMD(CALL PGM(LIB_CL/SISCON100))

Danke für die Hilfe
Franz - Karl

Fuerchau
29-04-11, 12:04
Das kannst du mittels einer Passthru-Abfrage per

CALL QSYS.QCMDEXC ('Kommando' 1234567890.00000)

Wobei der Zahlwert im Format 10.5 die Länge des Strings sein muss.

Franz Karl
29-04-11, 13:49
Vielen Dabnk für die Info,

d.h. der genau Systax wäre dann

CALL QSYS.QCMDEXC
('SBMJOB CMD(CALL PGM(LIB_CL/SISCON100)) '

1234567890.00000)

bzw. ich verstehe das nicht ganz mit dem Zahlenstring)

Bitte nochmals um kurzes Beispiel
Vielen Dank

Fuerchau
29-04-11, 14:29
Da ich zu faul zum zählen bin, Beispiel:

CALL QSYS.QCMDEXC
('ABCDEFGH', 0000000008.00000)

SQL übersetzt eine Zahl in das passende Format, hier also Packed(15, 5).

Man kann sich das auch noch etwas einfache machen:

CALL QSYS.QCMDEXC
(cast('Irgend ein Kommando' as char(256), cast(256 as decimal(15, 5)))

Wichtig ist ja nur zu wissen, dass QCMDEXC genau 2 Parameter braucht:
1. Character
2. Packed(15, 5) mit der Länge des Parameters 1

Wobei eben Leerzeichen am Ende egal sind.

Wichtig ist allerdings noch, wenn du Hochkommatas innerhalb des Kommandos brauchst, so musst du diese verdoppeln, sonst bekommst du einen SQL-Syntaxfehler !

Franz Karl
29-04-11, 15:52
Hallo,

habe jetzt also eine PassThrough Abfrage erstellt auf die Bibliothek wo das CL liegt

Danach in der Abfrage den Befehl

CALL QSYS.QCMDEXC (cast('SBMJOB CMD(CALL PGM(LIB_CL/SISCON100)) ' as char(256), cast(256 as decimal(15, 5)))

eingefügt.

Erhalte beim ausführen aber die Meldung

SQL0104 - Token , ungültig . Gültige Token : FOR CCSID . (#-104)

Was fehlt mir noch ?

Gruss
Franz

Franz Karl
29-04-11, 15:52
Hallo,

habe jetzt also eine PassThrough Abfrage erstellt auf die Bibliothek wo das CL liegt

Danach in der Abfrage den Befehl

CALL QSYS.QCMDEXC (cast('SBMJOB CMD(CALL PGM(LIB_CL/SISCON100)) ' as char(256), cast(256 as decimal(15, 5)))

eingefügt.

Erhalte beim ausführen aber die Meldung

SQL0104 - Token , ungültig . Gültige Token : FOR CCSID . (#-104)

Was fehlt mir noch ?

Gruss
Franz

Fuerchau
29-04-11, 15:54
Eine Klammer nach dem CHAR(256).

Franz Karl
29-04-11, 16:09
OK,

jetzt kommt

SQL0104 - Token Cast ungültig. Gültige Token <INTEGER><CHARSTRING> DLVALUE DATE TIME TIMESTAMP . (#104)

Gruss

Franz Karl
29-04-11, 16:20
So gehts super

CALL QSYS.QCMDEXC ('CALL LIB_CL/SISTEST)', 0000000019.00000)


Vielen Dank für die Hilfe

Pikachu
29-04-11, 16:23
So gehts super

CALL QSYS.QCMDEXC ('CALL LIB_CL/SISTEST)', 0000000019.00000)

Das sind aber nicht 19 sondern 20 Zeichen.