-
genauso umgesetzt,
wenn ich aber das jetzt absetze:
Dim cnn As ADODB.Connection
Dim CallCmd As String
cnn = New ADODB.Connection
cnn.Open("Provider=IBMDA400;" & _
"Data Source=SERVERNAME;" & _
"User ID=USER;" & _
"Password=PW;")
CallCmd = "CALL PGM(TRUMPFH/THYS00CWEB)"
cnn.Execute("CALL QSYS.QCMDEXC ('" & CallCmd & "', " & Format(Len(CallCmd), "0000000000.00000") & ")")
cnn.Close()
werden die Daten nicht in die PF-Datei geschrieben.
-
Wie schauts aus wenn du das CL-Programm direkt auf der Befehlszeile der AS/400 aufrufst?
Wird dann deine PF gefüllt oder auch nicht?
-
Wenn du den IBMDA400 verwendest, gibt es unterscheidungen in der CALL-Syntax.
Wobei ich i.M. nicht weiß, welche IBMDA400 wann verwendet (muss man mal nachlesen).
CALL ohne Klammern entspricht meines Wissens dem Call einer SQL-Prozedur.
Ansonsten
{CALL ...}
oder
{{CALL ...}}
das bleibt auszuprobieren.
Ausserdem kannst du dir den Aufruf des QCMDEXC sparen, du kannst dein programm auch direkt aufrufen:
{CALL MYLIB.MYPGM}
Hatten wir das nicht schon mal ?
Was gibt denn der Execute für eine Fehlermeldung zurück ?
Wie siehts mit der Bibliotheksliste aus, braucht da dein CLP noch was in *LIBL ?
-
In folgendem Beitrag siehst du die Lösung (ganz am Ende), dass der IBMDA400 mit den CALL's sehr spezifisch umgeht.
Man sollte in diesem Fall doch besser den ODBC-Treiber verwenden, wie das gemacht wird, steht auch in dem Beitrag.
Suche mal nach "IBMDA400 CALL".
-
bibliothek ist in libl vorhanden.
auch der copy befehl scheint nicht zu funktionieren
nichts funktioniert, bin am verzweifeln...
vielleicht seht Ihr einen Fehler:
CLP (TRUMPFH/THYS00CWEB):
PGM
/* */
/* */
/* WRKLNK QNTC FÜR VERBINDUNG */
/* */
MKDIR DIR('/QNTC/WEB1')
MONMSG MSGID(CPF0000)
/* */
CPYFRMIMPF FROMSTMF('QNTC/WEB1/THYSSENEIN/hoericht') +
TOFILE(SWDTA/THYS00H) MBROPT(*REPLACE) +
RCDDLM(*CRLF) STRDLM(*NONE) FLDDLM('#')
Visual Basic:
Dim cnn As ADODB.Connection
Dim CallCmd AsString
cnn = New ADODB.Connection
cnn.Open("Provider=IBMDA400;" & _
"Data Source=SERVER;" & _
"User ID=USER;" & _
"Password=PWD;")
CallCmd = "{CALL TRUMPFH.THYS00CWEB}"
cnn.Execute(CallCmd)
cnn.Close()
Arbeite hier mit strpdm, also auf /400 Basis
Auch doppelte geschweifte Klammern beim Call blieb ohne Erfolg...
-
Gibt der execute einen Fehler zurück (Err-Objekt)?
Wenn nicht, wird dein Programm wohl ausgeführt.
Funktioniert dein CLP denn beim Aufruf auf der AS/400 ?
Verwendest du auf der AS/400 den selben User wie per ODBC ?
Ist der User auf dem Server WEB1 mit dem selben Kennwort als lokaler User registriert ?
-
Wenn der Copy schon nicht funktioniert sollte der JobLog was dazu sagen (DSPJOBLOG ... wenn du das CL direkt auf der Befehlszeile aufgerufen hast).
-
--> kein Error, VBA-Programm wird ausgeführt.
Funktioniert dein CLP denn beim Aufruf auf der AS/400 ?
-->Getestet - einwandfrei -->
auf der AS400 per: CALL THYS00CWEB
Verwendest du auf der AS/400 den selben User wie per ODBC ?
--> ja (auf der AS400, WEB1 und ODBC alle gleich)
Ist der User auf dem Server WEB1 mit dem selben Kennwort als lokaler User registriert ?
-->Ja
es kann nur noch an diesen Befehlen liegen:
CallCmd = "{{CALL PGM(TRUMPFH/THYS00CTTR)}}"
'cnn.Execute("{{CALL QSYS.QCMDEXC PARM('" & CallCmd & "', " & Format(Len(CallCmd), "0000000000.00000") & ")}}")
cnn.Execute(CallCmd)
cnn.Close()
-
Dann würde ich dir doch lieber den ODBC-Treiber empfehlen. Der IBMDA400 arbeitet da wohl irgendwo nicht ganz sauber.
Per ODBC kannst du dann ganz einfach
"CALL MYLIB.MYPGM" ausführen und in der ODBC-Konfig ggf. auch noch ein Joblog erzeugen lassen.
Ich persönlich mochte den IBMDA400 noch nie.
-
wie sieht es denn mit diesem Treiber aus:
con_str = "Driver={iSeries Access ODBC Driver};System=my_system_name;Uid=myUsername;Pwd=m yPassword;"
cnn.Open(con_str)
Ist es dann die selbe Syntax:
Dim cnn As ADODB.Connection
Dim con_str AsString
Dim CallCmd As ADODB.Command
'Dim VAR1 As String
cnn = New ADODB.Connection
con_str = "Driver={iSeries Access ODBC Driver};System=SERVERNAME;Uid=USER;Pwd=PW;"
cnn.Open(con_str)
CallCmd = New ADODB.Command
CallCmd.CommandText = "CALL TRUMPFH.THYS00CTTR"
CallCmd.Execute(cnn)
cnn.Close()
-
Für direkte Aufrufe benötigst du kein Command-Objekt, "cnn.execue" reicht da auch.
Ansonsten hast du Recht, "{}" kennt der ODBC-Treiber nicht.
Beim CallCmd fehlt noch
set CallCmd.ActiveConnection=cnn
-
...bedanke mich für die Hilfe und die Geduld.
***Jetzt funktionierts***
Tausend Dank - an ALLE.
Similar Threads
-
By hs in forum IBM i Hauptforum
Antworten: 15
Letzter Beitrag: 07-11-06, 19:28
-
By cc in forum NEWSboard Linux
Antworten: 5
Letzter Beitrag: 09-08-06, 11:37
-
By stephanr1 in forum NEWSboard Drucker
Antworten: 7
Letzter Beitrag: 20-07-06, 14:00
-
By hs in forum IBM i Hauptforum
Antworten: 3
Letzter Beitrag: 25-10-05, 08:33
-
By NixWisserin in forum NEWSboard Server Job
Antworten: 0
Letzter Beitrag: 15-02-05, 17:51
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- You may not post attachments
- You may not edit your posts
-
Foren-Regeln
|
Erweiterte Foren Suche
Google Foren Suche
Forum & Artikel Update eMail
AS/400 / IBM i
Server Expert Gruppen
Unternehmens IT
|
Kategorien online Artikel
- Big Data, Analytics, BI, MIS
- Cloud, Social Media, Devices
- DMS, Archivierung, Druck
- ERP + Add-ons, Business Software
- Hochverfügbarkeit
- Human Resources, Personal
- IBM Announcements
- IT-Karikaturen
- Leitartikel
- Load`n`go
- Messen, Veranstaltungen
- NEWSolutions Dossiers
- Programmierung
- Security
- Software Development + Change Mgmt.
- Solutions & Provider
- Speicher – Storage
- Strategische Berichte
- Systemmanagement
- Tools, Hot-Tips
Auf dem Laufenden bleiben
|
Bookmarks