PDA

View Full Version : Upload - Datei vom Webserver auf AS400



Seiten : [1] 2

padawan
01-03-10, 16:24
Hallo,
iSeries V5R3

Ich möchte gerne eine Datei, die auf dem WebServer (Intranet) liegt auf die AS400 hochladen. Wie stelle ich das an?
Bisher greife ich auf den lokalen PC auf das LW C zu über diesen Befehl:

CPYFRMIMPF FROMSTMF('QNTC/P4055/THYSSENEIN/hoet') +
TOFILE(SWDTA/THYS00H) MBROPT(*REPLACE) +
RCDDLM(*CRLF) STRDLM(*NONE) FLDDLM('#')

Wie kann ich denn jetzt eine Datei vom Webserver abgreifen (z.B. \\Web1\Freigegebener (file://\\Web1\Freigegebener) Ordner\Datei.txt)???

Vielen Dank für Eure Hilfe.

Gruss
Tobias

Fuerchau
01-03-10, 18:01
Wenn der Webserver lokal erreichbar ist, kannst du auch per MKDIR einen QNTC-Zugriff definieren.
Allerdings gilt auch hier, dass USER und PASSWORD auf dem Server vorhanden ist.
Ansonsten funktioniert meist auch FTP.

padawan
02-03-10, 07:19
...ich befinde mich im Intranet auf dem Webserver (also Webserver ist nicht lokal auf meinem Rechner). Die hochzuladende Textdatei liegt jetzt auf dem Webserver, also nicht mehr lokal auf meinem Rechner.

Frage: Wie muß der Pfad im u.g. Codesegment jetzt aussehen, damit die Textdatei auf dem Werbserver abgegriffen wird.

Ich habe derzeit dieses kleine Codesegment, wenn die Textdatei lokal auf meinem Rechner liegt (das funktioniert):

/* WRKLNK QNTC FÜR VERBINDUNG */
/* */
MKDIR DIR('/QNTC/P4055')
MONMSG MSGID(CPF0000)
/* */
CPYFRMIMPF FROMSTMF('QNTC/P4055/THYSSENEIN/hoet') +
TOFILE(SWDTA/THYS00H) MBROPT(*REPLACE) +
RCDDLM(*CRLF) STRDLM(*NONE) FLDDLM('#')

Name des Webserver ist: Web1
Virtuelles Verzeichnis ist: Intranet

Danke.

prsbrc
02-03-10, 07:41
Das Codesegment ist genau das gleiche nur muss eben der Name von P4055 durch die IP-Adresse oder den Namen (Hosttabelle) des Webservers ausgetauscht werden.

ZB:

/* WRKLNK QNTC FÜR VERBINDUNG */
/* */
MKDIR DIR('/QNTC/Web1')
MONMSG MSGID(CPF0000)
/* */
CPYFRMIMPF FROMSTMF('/QNTC/Web1/Intranet/blabla/etc') +
TOFILE(SWDTA/THYS00H) MBROPT(*REPLACE) +
RCDDLM(*CRLF) STRDLM(*NONE) FLDDLM('#')

Grüße!

padawan
02-03-10, 11:46
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.

prsbrc
02-03-10, 12:05
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?

Fuerchau
02-03-10, 12:15
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 ?

Fuerchau
02-03-10, 12:52
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".

padawan
02-03-10, 13:19
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...

Fuerchau
02-03-10, 13:36
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 ?