PDA

View Full Version : Scott Klement - RPG-Zugriff auf SQL-Server



Seiten : [1] 2

JIM
08-07-08, 11:09
Guten Tag zusammen!

Vor einiger Zeit habe ich von Scott Klement eine Beschreibung gefunden, wie man von RPG aus auf einen SQL-Server zugreifen kann. Die Quellen habe ich für meine Anforderungen angepasst (nur den RPG-Teil!) und es funktioniert einwandfrei.... wenn der benötigte Server mal gerade da ist....
Spaß beiseite: Es geht darum, dass zwar im Programm abgefragt wird, ob denn die Verbindung erfolgreich aufgebaut werden konnte, aber trotzdem erscheint eine sehr "unansehliche" Fehlermaske. Diese möchte ich nun gerne loswerden, schaffe es aber nicht.

Kann mir hier jemand helfen?

Diese "seltsame" Anzeige wollte ich im Anhang dieses Beitrags beifügen. Allerdings bekomme ich immer die Meldung, dass das Hochladen fehlgeschlagen ist für die angegebene JPG-Datei.


Vielen Dank, Gruß, JIM

Fuerchau
08-07-08, 11:24
In welcher Sprache ist Scott's Zugriff ?
Hast du mal einen Link zur Quelle ?

JIM
08-07-08, 11:56
Hallo Fuerchau,

ja, Entschuldigung. Das hatte ich ganz vergessen.
Hier zum Beispiel:
http://www.pentontech.com/IBMContent/Documents/article/52433_137_RpgAndJdbc.zip

Ich dachte, dass bei der Erwähnung Scott Klements jeder gleich weiß, was ich meine...

gue_br
08-07-08, 13:07
Hallo!

Das wird die Java-Fehlerconsole sein.
Ich habe das bereits erfolgreich mit einer Oracle-DB und jetzt auch mit SQL-Server umgesetzt.

Es wird für den Zugriff auf die JDBC-Connection zugegriffen. Dazu werden Service-Programme verwendet.

Man kann aber in dem RPG auf Fehlercodes abfragen.
Es gibt da einen Funktionsaufruf JDBC_ConnProp und der liefert bei verbunden 6 zurück, sonst 0 (bei Oracle).

Ich denke beim SQL-Server ist es ähnlich. Da fragen wir nur auf *NULL ab.

Gruß,
Günter

JIM
08-07-08, 13:14
Hallo Günter,

JAVA-Fehlerconsole... hmmm, das klingt gut, so sieht das Ding auch aus...

Das Problem ist nur, dass der Fehler in dem Serviceprogramm auftritt und ein Nullwert als Returnwert zurückkommt. Das kann ich dann in meinem RPG-Programm auch abfragen, dass das Programm dann beendet wird, aber die (naja, nennen wir sie weiterhin) JAVA-Fehlerconsole kommt trotzdem, bleibt ein paar Sekunden stehen und dann endet das Ganze normal. Nur die Benutzer fallen vom Stuhl wenn dieses Window erscheint und fangen hektisch an mit F3 oder anderem die Anzeige verschwinden zu lassen und im Extremfall --- wird rechts oben einfach die Session geschlossen. Darum wollte ich diese Anzeige gerne loswerden.

Trotzdem danke für Deine Antwort!
JIM

JIM
08-07-08, 13:31
Hallo Günter,

da bin ich nochmal. Jetzt habe ich mir das mal im Debug angeschaut. Wenn die connection steht, ist der von Dir angesprochene Funktionswert 12. Aber (tut mir leid, aber ich bin ein dinosaurierartiges Relikt der reinen AS400-Programmierung vergangener Tage) WIE bitte kann ich den Wert abfragen? Das klappt weder alphanumerisch noch numerisch. Fragen über Fragen...

Wäre für einen Hinweis echt dankbar.
JIM

gue_br
08-07-08, 14:13
Hallo Jim!

Ich gehe mal davon aus, auch wenn du ein Dino bist ;)
daß du in ILE-RPG programmierst.

Also hier ein paar Code-Schnipsel:

conn = JDBC_ConnProp( 'oracle.jdbc.OracleDriver'
: %trim( DB_Conn_Info )
: prop );
JDBC_freeProp( prop ) ;

und dann für den Fehlerfall:
If conn = *NULL
....

bzw. wenn Verb. steht:
If conn <> *NULL
lesen, schreiben, etc.

mehr machen wir auch nicht.

Müßte mal probieren, ob die Java-Konsole kommt, wenn ich keine Verb. habe.
Unsere Programme laufen aber auch nicht interaktiv sondern im Batch. Vielleicht bringt es was, den Zugriff in ein eigenes Programm auszulagern.

Naja, will nicht zu weit ausholen,

Gruß,
Günter

JIM
08-07-08, 14:20
Hallo Günter,

danke für die schnelle Antwort --- aber genau so sieht mein (ILE-RPG !!!) Code auch aus! Und trotzdem kommt die JAVA-Konsole.
Sollte die Lösung wirklich darin liegen, dass ich diese Aktion im Batch mache? Das werde ich morgen gleich mal testen.

Dino-Grüße,
JIM

Fuerchau
08-07-08, 15:54
Um die Javaconsole auszuschalten musst du diese beim Starten der JVM umleiten.

Ggf. hilft hier ein
OVRDBF FILE(STDOUT) TOFILE(QPRINT)
OVRDBF FILE(STDERR) TOFILE(QPRINT)

Wenn das nicht hilft, da ja Java in einem eigenen Job gestartet wird musst du Ausgabeumleitungen einbauen.
Da ich Java nicht in RPG direkt starte sondern mit der QSH geht das in der Form:
QSH CMD('java ... >/dev/null 2>/dev/null')

Ggf. geht das auch irgendwie aus RPG.

JIM
09-07-08, 05:30
Guten Morgen Fuerchau!

Super Tipp! Es scheint zu funktionieren mit den beiden OVRDBF-Befehlen. Da ja pro Job nur eine JVM gestartet werden kann, würde ja genügen, diese beiden Befehle einmal, z.B. gleich im Startprogramm, abzusetzen.

Das sieht echt gut aus. Vielen Dank Dir Fuerchau und auch an Günter!

Schönen Tag, Gruß,
JIM