PDA

View Full Version : AS400 CALL's aus Mircrosoft Access



Franz.Rung
18-08-15, 14:47
Hallo zusammen,

bisher kenne ich aus dem Forum nur folgene Technik um ein einfaches CL aus MS-Access mittels eine Pass-Through Abfrage auf der AS400 Seite aufzurufen.

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

Wie kann ich so ein AS-Programm aus Access z.B. auch mit Parameter aufrufen - der CALL wäre z.B. dieser.

CALL MOBITEST.F_VLKW_VEREINIGEN('0000AFFF1,0000BFFF2,00 00CFFF3', 'K-XY')


Danke Franz

mk
18-08-15, 15:07
Hallo Franz,

das kann so aber kein Call auf ein IBM i Programm sein.

Kann es sein das Du eine SQL Procedure aufrufen möchtest ? Das funktioniert
natürlich nur im SQL Kontext.

Gruß
Michael

Fuerchau
18-08-15, 15:27
Das Problem ist, dass du tatsächlich nicht so einfach Parameter mit angeben kannst.
Am Besten du lässt dir eine Prozedur auf der AS/400 definieren, dann kannst du die mittels Passthru-Abfrage "call MyLib.MyProc(?, ?, ...?)" ausführen.
Jedes "?" bestimmt genau einen Parameter.

Ansonsten hilft dir nur VBA.
Hier kannst du eine Funktion mit Parametern entwickeln, die den eigentlichen AS/400-CALL kapselt und dann selber per SQL durchführt.

Franz.Rung
18-08-15, 16:03
Hallo Michael.

bisher wie gesagt habe ich nur kleine CL's mittls diesem Befehl in einer Access Pass Throuh-Abfrage aufgerufen - könnte auch genauso weiter laufen.

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


Ja du hast recht dieses mal stellt mir ein Entwickler eines Systems auf der AS400 genau eine SQL Procedue zur Verfügung

F_VLK00001 *PGM MOBITEST CLE SQL PROCEDURE F_VLKW_VEREIN

die wie folgt aufgerufen werden könnte :

CALL MOBITEST.F_VLKW_VEREINIGEN('0000AFFF1,0000BFFF2,00 00CFFF3', 'K-XY')

Nur wie mache ich das eben aus Access heraus ?


Wenn ich wie bisher die CL's die ich von dort aufrufe (klappt seit Jahren super) so übergebe,

CALL QSYS.QCMDEXC ('CALL MOBITEST/F_VLKW_VEREINIGEN('0000AFFF1,0000BFFF2,0000CFFF3', 'K-XY 456') ', 0000000076.00000)

bekomme ich erstmals die Meldung SQL0103 - Numerische Konstante 0000AFFF1 ungültig (#103)

Das ist erstmals mein Problem.

Gruss
Franz

Fuerchau
18-08-15, 16:13
Den 2. Aufruf kannst du vergessen, da nun mal eine SQL-Prozedur kein Programm ist.
AS/400-Programmnamen sind max. 10-stellig, Prozedurnamen können 128 Stellen haben.
An deiner Stelle würde ich eine Passthru-Abfrage definieren:
CALL MOBITEST.F_VLKW_VEREINIGEN(?, ?)
Dann kannst du zur Laufzeit die Parameter der Abfrage mit deinen Werten vervollständigen (nun ohne Hochkomma) und ausführen.
Benannte Parameter (also per eckige Klammer und Name) wird nicht unterstützt.