[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    Sep 2006
    Beiträge
    132

    SQL wiederaufrufen des Programmes

    Hallo,

    ich habe mir ein kleines SQL Prog geschrieben um festzustellen ob es die Eingabe des Users auch wirklich gibt. Beim 1. Aufruf des Prog. klappt alles wunderbar nur wenn ich beim 1. Aufruf einen falchen Wert eingebe und danach einen Richtigen, der funktioniert wenn ich ihn zuerst eingebe, bekomme ich wieder SQLCOD=100 obwohl es den Wert ja gibt. Was mache ich falsch?

    Mein Code:
    PHP-Code:
    H DftActGrp(*NOActGrp(*CALLER)                        
    H alwnull(*USRCTL)                                      
                                                            
     /
    COPY LIB/FILE,DAVCOPY                            
                                                            
    DAUFNEHM          PR                  EXTPGM
    ('DAVSQL01')
    D PARM1                               likeds(DAV)       
    D PARM2                          1A                     
    D PARM4                               like
    (SQLCOD)      
    D PARM5                               LIKE(SQLSTT)      
                                                            
    DAUFNEHM          PI                                    
    D DAVDS                               likeds
    (DAV)       
    D fcall                          1A                     
    D SQLC                                LIKE
    (SQLCOD)      
    D SQLS                                LIKE(SQLSTT)      
                                                            
    C                   eval      SQLCOD=0                  
    C                   
    eval      fcall='J'                 
    C/EXEC SQL                                                             
    C
    + Declare MyCsr Cursor for                                            
    CSelect FIRKEN From LIB/FILE Where FIRKEN = :DAVDS.FIRKEN       
    C
    /End-Exec                                                             
                                                                           
    C
    /EXEC SQL                                                             
    C
    Open MyCsr                                                          
    C
    /END-EXEC                                                             
    C                                                                      
    C
    /EXEC SQL                                                             
    C
    Fetch MyCsr                                                         
    C
    +       into :DAVDS                                                   
    C
    /END-EXEC                                                             
    C                   
    if        SQLCOD 100                             
    C                             
    or SQLCOD < *ZEROS                       
    C                   
    eval      fcall='E'                                
    C                   eval      *inlr=*on                                
    C                   
    return                                             
    C                   elseif    SQLCOD<>AND SQLCOD<>100 AND SQLCOD<>326
    C                   
    eval      fcall='F'                                
    C                   eval      SQLC=SQLCOD
    C                   
    eval      SQLS=SQLSTT
    C                   
    eval      *inlr=*on  
    C                   
    return               
    C                   endif                
    C/EXEC SQL                               
    C
    Close MyCsr                           
    C
    /END-EXEC                               
    C                   
    eval      *inlr=*on  
    C                   
    return 
    Gruß Martin

  2. #2
    Registriert seit
    Jun 2004
    Beiträge
    69
    Hallo Martin,

    ich vermute, dass der Fehler darin liegt, dass der SQL-Cursor nicht geschlossen wird. Durch den Return-Befehl in der if-Bedingung wird die close-Bestimmung für den Cursor nicht ausgeführt.
    Du solltest den Cursor schliessen und das Problem sollte behoben sein.

    Gruß
    Alexander

  3. #3
    Registriert seit
    Jun 2004
    Beiträge
    69

    Cursor in diesem Fall überflüssig?

    Hallo Forum,

    ist der SQL-Cursor in diesem Fall nicht überflüssig? Da es sich um einen single-row-fetch handelt, kann Martin doch auf den Cursor verzichten und sein Problem tritt auch nicht mehr auf, oder?

    Gruß
    Alexander

  4. #4
    Registriert seit
    Sep 2006
    Beiträge
    132
    Zitat Zitat von zannaleer
    Hallo Martin,

    ich vermute, dass der Fehler darin liegt, dass der SQL-Cursor nicht geschlossen wird. Durch den Return-Befehl in der if-Bedingung wird die close-Bestimmung für den Cursor nicht ausgeführt.
    Du solltest den Cursor schliessen und das Problem sollte behoben sein.

    Gruß
    Alexander
    Ohje manchmal sieht man die einfachsten Dinge nicht. Danke!

  5. #5
    Registriert seit
    Jun 2004
    Beiträge
    69
    Hallo Martin,

    ich habe gerade mal ein paar unserer Sourcen durchgesucht. Du kannst, wenn sichergestellt ist, dass nur ein Satz beim select gefunden wird, auf den Cursor verzichten.
    Müsste dann so aussehen:
    Code:
    Select FIRKEN into :DAVDS From LIB/FILE Where FIRKEN = :DAVDS.FIRKEN

    Dann brauchst Du Dir keine Gedanken über einen offenen oder geschlossenen Cursor machen.

    Gruß
    Alexander

  6. #6
    Registriert seit
    Sep 2006
    Beiträge
    132
    Hallo Alexander

    danke für die Information, das Programm läuft jetzt auch gut, seitdem der Fehler mit dem Cursor entdeckt wurde. Aber es ist gut zu Wissen das sowas auch geht.

    Gruß Martin

Similar Threads

  1. RPGLE - SQL
    By christian_lettner in forum NEWSboard Programmierung
    Antworten: 2
    Letzter Beitrag: 16-11-06, 10:15
  2. SQL - Cursor vernichten ?!?
    By FNeurieser in forum NEWSboard Programmierung
    Antworten: 3
    Letzter Beitrag: 11-10-06, 14:53
  3. SQL - Fehler
    By Kaufmann in forum IBM i Hauptforum
    Antworten: 11
    Letzter Beitrag: 28-06-06, 14:11
  4. SQL .. for update of (RPG embedded SQL)
    By loeweadolf in forum NEWSboard Programmierung
    Antworten: 2
    Letzter Beitrag: 01-06-06, 09:43
  5. SQL: Suchen des Sonderzeichens %
    By ZakOyten in forum IBM i Hauptforum
    Antworten: 2
    Letzter Beitrag: 19-04-06, 11:49

Berechtigungen

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