PDA

View Full Version : VB und PRG-Programm starten



HPKahn
02-04-07, 14:10
Hallo AS400-Gemeinde,

folgendes Problem stellt sich:

Ich möchte ein CL-Programm aus einer VB-Applikation starten.

Dies ist ein Steuerungs-Programm aus dem weitere verschiedene CL's und RPG-Programme aufgerufen werden.

Im Batch mit Job-Description und Bibliotheksliste läuft es einwandfrei.

Bei Aufruf aus VB wird es zwar gestartet kann jedoch die aufzurufenden Programme nicht finden.

****Aufruf aus VB
Dim cmd As New ADODB.Command
Set cmd.ActiveConnection = dba.GetConnection

cmd.CommandText = "{{CALL /QSYS.LIB/EDVKAHN1.LIB/GETPRJMAIN.PGM}}"
cmd.Prepared = True
cmd.CommandType = adCmdText

cmd.Execute

Set cmd = Nothing
*****

hier das CL
/******************** PM-NUTZER VERARBEITEN **************/
CHGVARVAR(&RETVAL)VALUE('0')
CALLPGM(GETPMNTZ)PARM(&RETVAL)
IFCOND(&RETVAL='0')THEN(DO)
GOTOCMDLBL(ABBRUCH)
ENDDO

jetzt kann ich natürlich den Aufruf ändern
in
CALLPGM(EDVKAHN1/GETPMNTZ)

was ja auch funktionieren würde, allerdings nur im Develpoment und Test.

Produktiv müsste allerdings wieder alles verändert werden , da die Bibliothek eine andere ist (Flexibilität).

Was kannn, muss ich ändern damit der VB-Aufruf funktioniert?


Grüsse
HP Kahn

GeorgG
02-04-07, 14:45
mach ein rtvobjd auf ein objekt das sich in beiden systemen befindet der returnwert &lib liefert dir die bibliothek (test oder Echt)

gruß Georg

Fuerchau
02-04-07, 16:12
Bei der ODBC-Verbindung über CA musst du die Bibliotheksliste setzen.
In der ODBC-Konfig führst du einfach die Lib's mit Leerzeichen getrennt auf.

Dominik Meyer
04-04-07, 21:18
Hallo HPKahn,

ich habe ein ähnliches Problem so gelöst
( mit CA Express von V5R2):
- User auf iSeries anlegen mit passender JOBD, sodass die LIBL passt
- in ODBC Quelle 'Namenskonvention' auf *SYS, 'SQL Standard Bibliothek' leer-lassen, 'Bibliotheksliste' auf *USRLIBL ( lies mal die Hilfe dazu).

Wenn du jetzt beim ODBC Zugriff mit dem obigen User anmeldest, hat dein Zugriff die LIBL aus der JOBD. Du musst den CALL dann noch ohne Pfad angeben, damit die LIBL greift. Genauso evtl. SELECT's etc.; alles ohne LIB angeben.

Fuerchau
05-04-07, 08:59
Hier hast du den kleinen Nachteil, dass du immer 2 Ebenen ändern musst, wenn sich an der Anwendung was ändert.
Allerdings gibts auch den Vorteil, dass du je User eine andere LIBL definieren kannst.

Namenskonventionen *SYS sind eigentlich von Nachteil, da man bei unqualifizierten SQL's nie weiß, in welcher Tabelle man landet.
Qualifizierungen müssen dann mit "/" statt "." erfolgen.

Um es mit Dieters Worten zu sagen:
Sicher ist nur *SQL und explizite Steuerung durch die Clientanwendung.