PDA

View Full Version : VBA: Variable an DSPF übergeben



padawan
24-06-10, 11:34
Hallo, ich benötige dringend Hilfe.
Version V5R3

Ich möchte per VBA Variablen an ein CL übergeben. Diese Variablen werden in zwei DSPF abgefragt.

Ablauf auf AS400:
1. CALL TTRC --> ENTER



2. erstes DSPF fordert Eingabe eines Buchstabens (W oder S) --> ENTER
3. zweites DSPF fordert drei Eingaben: ein Datum_von und ein Datum_bis --> ENTER sowie einen Buchstaben als Eingabeprüfung für die Datumsfelder, z.B. J oder N --> ENTER

Das möchte ich per VBA durchführen, d.h. einen CALL absetzen und die Variablen dem CL übergeben und evt ENTER-Befehle. Derzeit habe ich nur Ansätze:

Bsp:
CallCmd = New ADODB.Command
CallCmd = "RUNQRY QRY(OBJLIB/TTRQ)" --> funktioniert
VAR1 = TextBox1.Text
CallCmd = "STRQMQRY QMQRY(OBJLIB/TTRQ) OUTPUT(*OUTFILE) OUTFILE(OBJLIB/TTRQ) ALWQRYDFN(*YES) SETVAR((VAR1 0512079))" ' --> funktioniert
CallCmd = "STRQMQRY QMQRY(OBJLIB/TTRQ) OUTPUT(*OUTFILE) OUTFILE(OBJLIB/TTRQ) ALWQRYDFN(*YES) SETVAR((VAR1 &VAR1))"
CallCmd.CommandText = "CALL OBJLIB.TTRC"
CallCmd.ActiveConnection = cnn
CallCmd.Execute(cnn)

Bitte um Hilfe. Hoffe ich habe das verständlich erklärt.
Vielen Dank.
Gruss Tobias

Fuerchau
24-06-10, 13:37
Per ODBC/SQL kann kein Dialog-Programm aufgerufen werden.
Es scheitert bereits daran, dass ein Batch-Programm ja keine DSPF öffnen kann.

Hierfür benötigst du eine SQL-Procedure mit INOUT-Parametern oder eine SQL-Function mit einem Returnwert und n IN-Parametern.

padawan
24-06-10, 13:53
...wenn ich das jetzt richtig verstehe, starte ich per vba eine Funktion auf der AS400, die wiederum das CL startet und den DSPF's die entsprechenden Parameter übergibt?

Da bin ich nicht genug eingelesen, hast Du evt. einen kleinen Beispielcode, den ich dann anpassen kann?

Danke.
Gruss Tobias

andreaspr@aon.at
24-06-10, 14:06
Nein du kannst via ODBC überhaupt kein DSPF aufrufen. Der Datenstrom eines DSPFs kann nur in einer 5250 Emulation verarbeitet werden. (Oder WebFacing).
Was Fürchau meinte war, dass du das ganze OHNE DSPF machen musst.

Spateneder
25-06-10, 08:33
Erst einmal solltest Du klären, was das CLP "TTRC" überhaupt macht. Ruft es ein oder mehrere andere Programme auf? Häufig bereitet ein CL nur eine bestimmte Umgebung vor und ruft dann die Programme auf, die die eigentliche Verarbeitung durchführen. Unter Umständen steht in Deinem Fall dahinter ein Programm für die Parametereingabe (2 mal Datum und irgendwelche Kennzeichen), das dann wieder ein Verarbeitungsprogramm aufruft (oder zur Batchverarbeitung submittet). Dann musst Du nur wissen, was das CL vorbereitet (z.B. LIBL und Drucker-Overrides) und nach diesen Vorbereitungen dieses eigentliche Verarbeitungsprogramm mit den entsprechenden Parametern aufrufen.
Falls wirklich alles in dem CL passiert, brauchst Du eine angepasste Version, der Du die Werte direkt übergeben kannst.
Die Rolle der DSPFs sollte jedenfalls Dein VBA-Code übernehmen.

padawan
25-06-10, 11:30
Hallo, die Antwort von Andreas hatte mich schon auf die richtige Fährte gebracht und prima, Du bestätigst mir das.

Tatsächlich ist das so, daß das CL wiederum Programme aufruft. Somit ist es klar, daß ich die DSPF umgehen kann indem ich dem aufrufenden Programm die Parameter mitgebe und diese den CL's und RPG's durchreiche. Damit hat es funktioniert.

Danke für die Unterstützung.