[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    Apr 2005
    Beiträge
    385

    SQLRPGLE Problem mit SQL Communication Area

    Hallo zusammen,

    in einen SQLRPGLE Programm nutze ich sowohl in SubRoutinen und in SubProcedures SQL-Abfragen.
    Allerdings "versaut" mir die SubProcedure die SQLCA die um den Aufruf auch benutzt wird.

    Wenn in der Procedure der SQLCODE=100 auftritt und ich um den Aufruf rum den SQLCODE ebenfalls Abfrage bekomme ich das Problem!

    Wie kann ich das elegant umgehen?

    Danke an alle Helfenden!

    Kurzes Bsp.:
    Code:
    DOW SQLCODE > 0 AND SQLCODE <> 100 
    
    FETCH .... 
    
    EVAL   VAR = getWert(xxx) 
    
    
    ENDDO
    
    P getWert   B
    d...
    
    Exec-SQL Select SUM(sss) from FILE where xx;
    
    
    P getWert   E

  2. #2
    Registriert seit
    Aug 2003
    Beiträge
    1.508
    Speichere dir doch den SQLCODE in eine Variable damit du es später prüfen kannst.
    Oder mache sowas wie ...

    if (sqlcode <> 0);
    endeSchleife = *on;
    endif;

    Auf die SQLCA sollte auch nur gleich nach der SQL Anweisung zugegriffen werden.

    Und im übrigen hat deine Schleife Potential zu einer Endlos-Schleife.

    lg Andreas

  3. #3
    Registriert seit
    Feb 2001
    Beiträge
    20.243
    Ich mache das meist anders:

    dow 1=1;
    exec sql fetch ...;
    if sqlcode <> *zero;
    leave;
    endif;
    // tuwas (Hier kann SQLCOD ruhig verändert werden
    sqlcode = *zero;
    enddo;
    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
    Aug 2001
    Beiträge
    2.875
    Die SQLCA wird mit jedem (embedded) SQL Statement, das ausgeführt wird upgedated, sozusagen ein Ausgabe-Parameter aus dem SQL-API, das aufgerufen wird.
    Deshalb sollten Informationen aus der SQLCA, sofern diese verwendet werden müssen immer unmittelbar nach dem SQL-Statement entweder geprüft oder in ein eindeutig zuordenbares HilfsFeld umgeladen werden.

    Birgitta
    Birgitta Hauser

    Anwendungsmodernisierung, Beratung, Schulungen, Programmierung im Bereich RPG, SQL und Datenbank
    IBM Champion seit 2020 - 4. Jahr in Folge
    Birgitta Hauser - Modernization - Education - Consulting on IBM i

  5. #5
    Registriert seit
    Mar 2002
    Beiträge
    5.287
    Zitat Zitat von ExAzubi Beitrag anzeigen
    Wie kann ich das elegant umgehen?
    Für jede View ein eigenes Datenzugriffsmodul mit den entsprechenden Procedures für read/write/update/delete und den anderen benötigten Routinen.

    D*B
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

  6. #6
    Registriert seit
    Mar 2002
    Beiträge
    5.287
    Zitat Zitat von Fuerchau Beitrag anzeigen
    Ich mache das meist anders:

    dow 1=1;
    exec sql fetch ...;
    if sqlcode <> *zero;
    leave;
    endif;
    // tuwas (Hier kann SQLCOD ruhig verändert werden
    sqlcode = *zero;
    enddo;
    dow liesWas();
    machWas();
    endDo;

    P lieswas b
    d result n inz(FALSE)
    exec sqll fetch...
    if sqlcode = 0;
    result = TRUE;
    return result;
    p lieswas e

    Turnschuhprogrammierung (in Memoriam Dirk) ganz ohne leave, iter und rettSQLCODE!

    D*B
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

  7. #7
    Registriert seit
    Aug 2001
    Beiträge
    2.875
    Egal welche Methode Ihr wählt, Ihr solltet nicht auf SQLCODE = *Zeros oder SQLCODE <> *Zeros abfragen, sondern auf SQLCODE < *Zeros (für Fehler) und SQLCODE = 100 (für nicht gefunden).

    Der Grund dafür liegt darin, dass es vereinzelt Situationen gibt, in denen eine Warnung (SQLCODE > *Zeros und <> 100) ausgegeben wird. In diesen Fällen werden trotzem Daten, die verarbeitet werden ausgegeben. Zukünftig kann dies vielleicht noch häufiger als heute der Fall sein.

    Birgitta
    Birgitta Hauser

    Anwendungsmodernisierung, Beratung, Schulungen, Programmierung im Bereich RPG, SQL und Datenbank
    IBM Champion seit 2020 - 4. Jahr in Folge
    Birgitta Hauser - Modernization - Education - Consulting on IBM i

  8. #8
    Registriert seit
    Mar 2002
    Beiträge
    5.287
    Zitat Zitat von B.Hauser Beitrag anzeigen
    Egal welche Methode Ihr wählt, Ihr solltet nicht auf SQLCODE = *Zeros oder SQLCODE <> *Zeros abfragen, sondern auf SQLCODE < *Zeros (für Fehler) und SQLCODE = 100 (für nicht gefunden).

    Der Grund dafür liegt darin, dass es vereinzelt Situationen gibt, in denen eine Warnung (SQLCODE > *Zeros und <> 100) ausgegeben wird. In diesen Fällen werden trotzem Daten, die verarbeitet werden ausgegeben. Zukünftig kann dies vielleicht noch häufiger als heute der Fall sein.

    Birgitta
    ... davon rate ich ab!!! Ein warning darf nur ignoriert werden, wenn ich weiß, dass es unschädlich ist (z.B.: SQLCODE + 088 beim Update) ein unbekanntes warning ist immer Fehler! Ich empfehle einen Blick in TFM. Grundlage fast aller warnings ist ungenaue Programmierung (hat nur fast geklappt) oder Datenschrott (könnte vielleicht passen).

    D*B
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

Similar Threads

  1. SQL Problem
    By HoScHiE in forum IBM i Hauptforum
    Antworten: 4
    Letzter Beitrag: 03-06-02, 13:30
  2. SQL-Problem
    By chrisi in forum IBM i Hauptforum
    Antworten: 2
    Letzter Beitrag: 27-02-02, 08:46
  3. Intersystem Communication Function
    By delphix in forum IBM i Hauptforum
    Antworten: 1
    Letzter Beitrag: 14-02-02, 16:14
  4. Compilierung SQLRPGLE
    By B.Hauser in forum IBM i Hauptforum
    Antworten: 4
    Letzter Beitrag: 01-10-01, 17:31
  5. Passworteingabe für das Abonnenten-Area
    By Toni in forum NEWSboard load'n'go
    Antworten: 1
    Letzter Beitrag: 09-02-01, 10:41

Berechtigungen

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