[NEWSboard IBMi Forum]

Thema: SQLRPGLE

Hybrid View

  1. #1
    Registriert seit
    May 2002
    Beiträge
    1.121

    SQLRPGLE

    Habe da mal eine weitere Frage.
    Bei folgenden Code bekomme ich beim 1. Aufruf ein Ergebnis.
    Beim 2. Aufruf habe ich keine Werte mehr.
    Im JOBLOG steht
    Verbindung zum SYSTEM_B besteht bereits
    MYFILE in MYLIB nicht gefunden


    PHP-Code:
    c/exec sql                                             
    c
    +  set option commit = *none                          
    c
    /end-exec                                             
    c
    /exec sql                                             
    c
    Connect To SYSTEM_B                                 
    c
    /end-exec                                             
    c
    /exec sql                                             
    c
    +  Select Feld1Feld2Feld3  into :Sum1Sum2Sum3 
    c
    +    from MyLib/MyFile                                
    c
    +   where Feld4 = :wert4                              
    c
    /end-exec                                             
    c
    /exec sql                                             
    c
    Connect To SYSTEM_A                                 
    c
    /end-exec 
    Ich vermute mal, das ich da irgendwas falsch mache, beim HIN- und HER- schalten zwischen den beiden Systemen A und B.
    Was muss ich ändern, damit es geht ?

    Gruß
    Ronald

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    Leider kann RPG nur 1 Verbindung zu einer Zeit verarbeiten.
    Beim Start ist man automatisch mit LOCAL verbunden.
    Beim Connect wird zum Zielsystem verbunden.
    Mittels "Connect Reset" verbindet man sich wieder lokal, so dass ein neuer Connect zu einem anderen System wieder möglich ist.

    Aber Achtung:
    Macht man das sehr häufig in einem Programm führt das unweigerlich zu Performance-Einbußen!

    Successful connection:
    If the CONNECT statement is successful:

    v
    All open cursors are closed, all prepared statements are destroyed, and all locks

    are released from the current connection.

    v
    The activation group is disconnected from all current and dormant connections,

    if any, and connected to the identified application server.


    Ich habe mir damal mit 2 Programmen und jeweils eigenen ACTGRP's beholfen.
    Jede ACTGRP führt nur einen Connect durch und hält diese Verbindung bis zum Ende.
    Funktionsaufrufe zwischen den beiden gehen sehr schnell.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  3. #3
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    Ergänzung:
    Man kann also nicht innerhalb eines Programmes per Select Daten aus Maschine A lesen und dann in Maschine B oder Local schreiben.

    Ergänzung 2:
    Wenn dein Programm keine eigene ACTGRP hat, zerstört der Connect natürlich die Verbindung für übergeordnete Programme.
    Erfolgt also von einem SQL-Programm ein CALL auf dein Programm, zerstörst du offene Cursor des übergeordneten Programmes.
    Verlässt du nun ohne CONNECT RESET (oder auch beim Absturz) diese Ebene, gilt diese Verbindung nun für alle nachfolgenden SQL's, die keinen expliziten Connect lokal durchführen.
    Ganz vertrakt wird es dann bei Verwendung von SQL-Serviceprogrammen mit ACTGRP(*CALLER).
    Diese arbeiten dann natürlich auch mit deiner aktuellen Verbindung wenn du keinen Reset machst.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  4. #4
    Registriert seit
    Mar 2002
    Beiträge
    5.365
    Das Zauberwort heißt SET CONNECTION...
    - lokal bist du im SQLRPGLE automatisch verbunden
    - mit connect to system_b verbindest Du Dich remote und diese Verbindung ist automatisch aktiv
    - jetzt geht der select auf die remote
    - mit set connection wechselst Du die aktive Verbindung
    - jetzt geht ein select oder wasAuchImmer auf die lokale DB
    - mit Performance und Cursor schließen und ACTGRP hat das alles nix zu tun
    - da werden auch keine Cursor zugemacht, oder ähnliches
    - in einem SQL Statement kaannst Du immer nur eine DB ansprechen

    D*B

    PS: der zentrierte Text sieht ja wirklich besch... aus
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • You may not post attachments
  • You may not edit your posts
  •