PDA

View Full Version : AS400 Programm per VBA starten



Seiten : [1] 2

padawan
22-02-10, 17:53
Hallo,
iServer V5R3.
Ist es möglich per VBA ein Programm auf der AS400 anzustossen und wie? Wie muss der SQL-Call aussehen, damit ich ein Programm (Name: TESTC)auf der AS400 anstossen kann? Mehr muss nicht passieren.

Danke.

Gruss
padawan

Fuerchau
22-02-10, 18:18
Ganz einfach per "CALL MYLIB.MYPGM".
Allerdings kehrt SQL erst nach Ende des Programmes zurück.
Ggf. wird das Programm abgebrochen, wenn es zu lange dauert.
Soll das Programm einfach nur im Batch laufen, kannst du auch ein CLP schreiben, dass dein Programm ber SBMJOB übergibt und direkt zurückkehrt.
Das CLP rufst du wie oben auf.

padawan
23-02-10, 10:49
Hast Du einen kurzen Beispielcode, wie ich von ASP.NET heraus das Programm TESTC auf der AS400 starten kann? Die Verbindung zur AS400 ist über ODBC realisiert.

Danke.

Gruss
Tobias

Fuerchau
23-02-10, 11:09
Hab ich doch oben schon gesagt:

MyConnection.Execute("CALL MYLIB.MYPGM")

padawan
23-02-10, 15:48
Programm auf der AS400 erwartet zwei Eingaben: Datumsparameter (PADATV und PADATB) im Format ttmmjjjj und die Eingaben werden anschließend mit Enter bestätigt, aber trotzdem ruft u.g. Code das Programm nicht auf und führt es aus (Fehlermeldung kommt auch keine). Was mache ich evt falsch? Würden Sie mal drüber schauen?
Danke.


Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim AS400Name As String = "AS400Server"
Dim AS400User As String = "USER"
Dim AS400Password As String = "PWD"
Dim AS400Pgm = "TTRRENOMR"
Dim AS400Lib = "TRUMPFH"
Dim AS400 As New cwbx.AS400System
Dim program As New cwbx.Program
On Error Resume Next
AS400.Define(AS400Name)
'AS400.Connect("CALL DTALIB/RENOMAC")
program.system = AS400
program.system.UserID = AS400User
program.system.Password = AS400Password
program.LibraryName = AS400Lib
program.ProgramName = AS400Pgm
'************************************************* ********
'Parameter
Dim stringConverter As New cwbx.StringConverterClass()
Dim packedConverter As New cwbx.PackedConverterClass()
packedConverter.DecimalPosition = 0
packedConverter.Digits = 8
Dim parameters As New cwbx.ProgramParametersClass()
'parameters.Append("Parameter1Name", cwbx.cwbrcParameterTypeEnum.cwbrcInout, 1)
'stringConverter.Length = 1
'parameters("Parameter1Name").Value = stringConverter.ToBytes("W".PadRight(1, " "c)) '
parameters.Append("PADATV", cwbx.cwbrcParameterTypeEnum.cwbrcInout, 8)
stringConverter.Length = 8
parameters("PADATV").Value = stringConverter.ToBytes("01012010".PadRight(8, " "c)) '
parameters.Append("PADATB", cwbx.cwbrcParameterTypeEnum.cwbrcInout, 8)
stringConverter.Length = 8
parameters("PADATB").Value = stringConverter.ToBytes("13022010".PadRight(8, " "c)) '

parameters.Append("PADATV", cwbx.cwbrcParameterTypeEnum.cwbrcInout, 8)
parameters("PADATV").Value = packedConverter.ToBytes("8") '

AS400.Signon()
AS400.Connect(cwbcoServiceEnum.cwbcoServiceRemoteC md)
program.Call(parameters)

End Sub

AS400.lehrling
23-02-10, 15:59
Versuche es mal mit Datenfreigabe, Enter klingt nach Feldexit:)

Gruß AS400.lehrling

padawan
24-02-10, 07:56
...kann mir bitte jemand helfen. Benötige dringend Hilfe.
Danke.

Fuerchau
24-02-10, 08:04
Du kannst per CALL keine Dialog-Programme aufrufen!
D.h., wenn dein Programm auf eine Eingabe wartet bzw. eine DSPF enthält, gibt es einen CPF-Fehler beim Aufruf.

Was also genau macht dein Programm ?

padawan
24-02-10, 08:39
beim start des AS400 Programms kommt eine DSPF und erwartet eine Datum-von und eine Datum-bis Eingabe, um damit eine Tabelle (Datei) mit Daten zu füllen, d.h. ich muss beim call zwei Datumsparameter übergeben.

andreaspr@aon.at
24-02-10, 08:50
wie baldur schon gesagt hat, du kannst über sql kein pgm aufrufen, welches ein dspf ausgibt.
jetzt musst du ein neues pgm ohne dspf schreiben, welches die parameter über dein call übergeben bekommt.