PDA

View Full Version : SQl-Server 2005 Funktion mit RPG starten



Seiten : [1] 2

LindnerSpezial
15-12-08, 10:51
Hallo!

Ich will eine Funktion auf einem SQL-Server 2005 starten und die zurückkommenden Daten in eine Datei in der QTEMP schreiben.
Was ist denn da wohl die beste Lösung, RPG mit ebbeded JAVA?
Das Problem ist auch, das ich mich mit JAVA auf der iSeries nicht wirklich gut auskenne.

Danke im voraus
Henning

Fuerchau
15-12-08, 12:53
Ich gehe da einen anderen Weg:

- Lokale Kopie der Datei auf der AS/400
- Transfer der Datei mit Dieter Bender's Transferprogramm

Inzwischen hat Dieter auch eine modernere Lösung zur Verfügung.
Snippets (http://www.bender-dv.de/Snippets.html)
und da
"Datenübertragung mit Java zwischen beliebigen Datenbanken"

LindnerSpezial
15-12-08, 13:30
Erstmal danke für die Antwort!

Eine Kopie der Datenbank ist nicht sinnvoll, da der SQL-Server die Datenbank unseres Datawarehouses (BI-System) ist. Vorher lief dieses auf der AS. Jetzt gibt es aber noch Programme, die auch weiter auf der AS laufen sollen(Warenwirtschaftssystem) , aber die Daten von dem SQL-Server holen sollen.
Deshalb muss ich es irgendwie schaffen, eine Verbindung mit dem SQL Server zu erstellen und die ermittelten Daten in eine bestimmte QTEMP Datei zu schreiben.
Auf dem SQL Server wird eine Prozedur aufgerufen, welche mir ein Recordset zurückgibt.

Mit freundlichem Gruß
Henning

Fuerchau
15-12-08, 13:33
Dann hilft dir wahrscheinlich nur folgender Link (bevor du alles selber entwickelst):
Application Server für RPG (http://www.bender-dv.de/AppServer4RPG.html)

LindnerSpezial
15-12-08, 13:40
Kann ich bei diesem Beispielcode (unten nicht als Submitjob) einen String mitgeben, und ein Resultset zurückbekommen?

PGM
DCL &CMD *CHAR (256)
CHGVAR &CMD ( +
'java -classpath ' !! +
/* Beispiel Applikationsverzeichnis */+
'/home/bender/java:' !! +
/* hier ist meist der native Treiber */+
'/QIBM/ProdData/OS400/java400/ext/db2_classes.jar:' !! +
/* hier ist meist der Toolbox Treiber */+
'/QIBM/ProdData/HTTP/Public/jt400/lib/jt400.jar' !! +
/* qualifizierter Name der main Klasse */+
/* de/bender_dv/transfer/TransferData,class */+
/* muss im Classpath liegen */+
' de.bender_dv.transfer.TransferData ' !! +
/* properties als Parameter */+
'ConnectFrom ConnectTo' +
)
SBMJOB CMD( +
QSH CMD( +
&CMD +
) +
) +
JOB(TRANSFER)
ENDPGM

Fuerchau
15-12-08, 14:06
Per SBMJOB funktioniert das ganze überhaupt nicht da du quer über Jobs nichts zurückgeben kannst.
Was du benötigst ist tatsächlich ein Batchjob, der dir z.B. über eine DTAQ die Daten übergibt. Mit QTEMP geht das so auch leider nicht.

TransferData von Dieter hat noch den Nachteil, dass immer erst die Verbindung aufgebaut, die Daten kopiert und die Verbindung wieder getrennt wird.
Antwortzeiten kannst du da vergessen.

Versuch das Application-Server-Projekt (dazu kann ich allerdings nichts sagen, ggf. kann Dieter dir weiterhelfen).

LindnerSpezial
15-12-08, 14:54
Die "Arbeit" macht ja der SQL-Server!
Es kommen so ca. 20 000 Sätze von der Prozedur zurück.
Das Java Programm, welches die Prozedur aufruft und die Daten in einem Recordset zurückbekommt funktioniert ja auch so weit auf meiner PC Entwicklungsumgebung.
Das Problem ist nur, das ich das Programm mit dem SQL String als Parameter von RPG aufrufen müsste und das Recordset ins RPG zurückbekommen will, um in die QTEMP zu schreiben.

Gruß
Henning

Fuerchau
15-12-08, 17:26
Dann ruf das Java direkt auf, erstelle die Tabelle vorher in deiner QTEMP.
Wenn der Transfer dann durch ist, müsstest du die Datein in deiner QTEMP haben und mit RPG direkt auslesen können.

BenderD
16-12-08, 14:53
Hallo,

von den Java Einsprenkelungen in RPG würde ich eindeutig abraten, das ist technisch hakelig implementiert und die resultierenden Programme sind unwartbar.
QTEMP geht in jedem Fall schon mal nicht, zumindest, wenn es sich um interaktive Jobs handelt, das ist dann selbst bei Java Aufrufen aus RPG per JNI Unterstützung des RPG Compilers in den Wind geschossen, da der BCI Job eine eigene QTEMP hat.
Das sieht mir alles vom Aufbau viel zu kompliziert aus, warum nicht Satzweise direkt aus der SQL Server Datei lesen und an den RPG Ham weitergeben, wozu brauchts da die QTEMP?

D*B


Hallo!

Ich will eine Funktion auf einem SQL-Server 2005 starten und die zurückkommenden Daten in eine Datei in der QTEMP schreiben.
Was ist denn da wohl die beste Lösung, RPG mit ebbeded JAVA?
Das Problem ist auch, das ich mich mit JAVA auf der iSeries nicht wirklich gut auskenne.

Danke im voraus
Henning

LindnerSpezial
02-01-09, 10:51
Hallo!

Der Benutzer soll ein Programm in unserem Warenwirtschaftssystem aufrufen, welches die Daten aus der SQL Server 2005 Datenbank in ein bestimmtes Member in der QTEMP schreibt. Mit der QTEMP ist es möglich, das mehrere Benutzer gleichzeitig diese Abfrage ausführen können.

Gruß
Henning