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
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
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
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.