PDA

View Full Version : ILE RPG, Berechnung extern definieren



Bau
05-12-02, 14:27
Hallo immer noch RPG-Fans !

Ist es möglich, eine EVAL-Anweisung extern zu definieren.
Das heisst ich möchte z.B. durch die Benutzer eine Formel eingeben lassen, die dann in einer PF-Datei gespeichert, und vorgängig auf ihre Gültigkeit geprüft wird.

Danach sollte ein RPG-Programm diese Formel
ausrechnen.

Also z.B. EVAL RESULTAT=FORMEL
(Wobei Formel das Feld mit der Formel aus der PF-Datei ist.)

(Ich könnte natürlich ein Programm (Source) mit der Formel erstellen lassen und danach umwandeln. Aber ich suche eine Möglichkeit,
dies direkt im Programm zu erledigen.)

Wer hat Vorschläge ?

Fuerchau
05-12-02, 15:40
Nun, da RPG immer noch kompiliert wird, also ein PGM-Objekt erstellt werden muss, ist ein dynamischer EVAL so nicht möglich.

Die einzige Möglichkeit ist hier dynamisches SQL !

Zwar kann die SQL-Anweisung SET nicht verwendet werden, aber ein SELECT ist immer möglich. Dieser kann auch mittles Prepare und Execute vorbereitet und ausgeführt werden.
Sicher, für einen Select brauch ich eine Datei, aber ich brauch keine Daten, kann also eine Pseudodatei nehmen.
Keine Daten ? Dann gibts ja keine Sätze !
Fast richtig, es gibt aber mindestens eine Funktion die IMMER ein Ergebnis liefert:

"Select count(*) from MyFile" ! ==> Ergebnis ist mindestens 0 !

Und was ist mit der Formel ?

"Select count(*), >Formel< from MyFile"

Die Syntaxprüfung wird automatisch durchgeführt, über die SQLCA bekomme ich auch die genaue Position der fehlerhaften Formel.
Habe ich keinen SQL-Fehler, kann ich mittels
"open ..."
"fetch ... using descriptor ..."
"close ..."
den dynamschen Select ausführen.

Wie ich nun dynamisches SQL benutze wird ziehmlich gut in den SQL-Handbüchern beschrieben und würde hier den Rahmen sprengen.

rmittag
05-12-02, 16:43
@Bau

die einfachste Möglichkeit ist ein 2. Job,in dem ein kleines Rexx Skript aktiv ist. Kommunikation über die RexxQ.

Alternativ gehts auch über QMQRY oder SQL.


@Fuerchau

IBM in ihrer Weisheit http://www.as400-forum.de/ubb/wink.gif stellt für diese Zwecke die Tabelle QSQPTABL zur Verfügung. Ist bei mir in QSYS2. (Darüber werden auch die "set" Anweisungen abgewickelt, weshalb die Tabelle manchmal unter den offenen Dateien auftaucht).


Gruß
Rolf

[Dieser Beitrag wurde von rmittag am 05. Dezember 2002 editiert.]