[NEWSboard IBMi Forum]

Hybrid View

  1. #1
    Registriert seit
    Sep 2006
    Beiträge
    132
    Habe die Fehler oben mittlerweile alle behoben. Bin wieder bei programmiertechnischen, diesmal syntactischen Fehlern angelangt.

    PHP-Code:
     C/EXEC SQL
         C
    whenever SQLERROR goto SQLABEND
         C
    /END-EXEC
          
    *
         
    C/EXEC SQL
         C
    +  connect to :Database user :UserId using :Password
         C
    /END-EXEC
         C
    /EXEC SQL
         C
    + Declare MyCsr Cursor for
         
    CSelect From TABLE where NAME = :NAME
         C
    /End-Exec

         C
    /EXEC SQL
         C
    Open MyCsr
         C
    /END-EXEC
         C
         C                   
    do        *HIVAL
         C
    /EXEC SQL
         C
    Fetch Next from MyCsr
         C
    +             into :NAME,
         
    C+                  :RECORD,
         
    C+                  :DESC
         C
    /END-EXEC
         C
    /EXEC SQL
         C
    Close MyCsr
         C
    /END-EXEC
         C
    /EXEC SQL
         C
    +  connect reset
         C
    /END-EXEC 
    Ich bekomme jedoch beim Fetch einen Fehler:
    PHP-Code:
         CFetch Next from MyCsr
    RNV8526E Anweisung 
    /EXEC SQL enthält FehlerSQL0104N  Auf "<Kennung>" folgte das unerwartete Token "FROM".  Zu den m&#8221;glichen Token geh”ren: "INTO". 
    Ich habe das so aber schon öfter gesehen. Also Fetch Next from CURSOR into :VAR1, :VAR2
    Wo liegt mein Fehler?

    Vielen Dank.

    Gruß Martin

    EDIT: Ich kann auch keinen Qualifizierten Namen angeben im Format LIB/FILE. Da bekomme ich die Fehlermeldung das:
    PHP-Code:
    Ursache  . . . . :  Einer der folgenden Fehler trat auf:                       
        -- Die 
    für den qualifizierten Objektnamen verwendete Syntax ist für die    
      
    angegebene Benennungsauswahl nicht gültigBei der Systembenennung ist die   
      
    qualifizierte Form eines Objektnamens Schemaname/ObjektnameBei der         
      SQL
    -Benennung ist die qualifizierte Form eines Objektnamens                  
      Berechtigungsname
    .Objektname.                                                
        -- Die 
    für den qualifizierten Objektnamen verwendete Syntax ist nicht      
      zulässig
    Benutzerdefinierte Datenarten können in der Systemnamenskonvention 
      in Parametern und SQL
    -Variablen einer SQL-Prozedur oder -Funktion nicht mit  
      dem Schema qualifiziert werden

    Wenn ich mir nur ein SQLRPGLE Programm schreibe funktioniert beides wunderbar.

  2. #2
    Registriert seit
    Sep 2006
    Beiträge
    132
    Nochmal wegen dem oben. Habe versucht eine Verbindung via ODBC aufzubauen, was auch funktionierte aber ich sah nur die Systemtabellen nicht die normalen Libraries. Könnte das jetzt nicht auch der Fall sein? Das würde erklären warum es nicht funktioniert.

    Ich habe die Verbindung zum Server über DB2 UDB-Steuerzentrale getestet. Das funktioniert aber nur über den "Standart". als ich dann in der normalen Steuerzentralensicht auf die tabellen zugreifen wollte, will er sich mit CLI verbinden was aber nicht funktioniert. Wie kann ich die Verbindung auf "Standart" umstellen bzw was muss ich tun damit es mit CLI funktioniert?

    EDIT: CLI-Verbindung ist fehlgeschlagen.

    SQL30082N Die Verbindung konnte auf Grund der Sicherheitsbedingung "24" ("USERNAME AND/OR PASSWORD INVALID") nicht hergestellt werden. SQLSTATE=08001.
    - Aber Pwd und Userid müssen stimmen weil die normale "Standartverbindung" funktioniert.

    Bei der Steuerzentrale bekomme ich die Fehlermeldung wenn ich die Tabellen abrufen will:

    PHP-Code:
    [IBM][CLI Driver][AS] SQL0805N  Paket "NULLID    .SYSSH200" nicht 
    gefunden
    .  SQLSTATE=51002




    Erklärung


     Die 
    Anweisung kann nicht beendet werdenda das erforderliche 
    Paket im Katalog nicht gefunden wurde
    .  

     
    Das Paket "<name-des-pakets>" weist eines der folgenden Formate 
    auf


    o   'paketschema.paketname 0Xkontoken'wobei das Konsistenztoken 
        in hexadezimaler Form angegeben wird
    .  

    o   'paketschema.paketname.paketversion'.  Wenn die Paketversion  
        eine leere Zeichenfolge ist
    fällt der Teil '.paketversion'   
        
    weg.  

    o   '%.paketname'.  Wenn für den Parameter CURRENT PACKAGE PATH   
        ein Wert festgelegt wird
    .  Die Gruppe mit Schemanamen im      
        Parameter CURRENT PACKAGE PATH wird durch das Prozentzeichen  
        
    ('%'festgelegt.  

     

    Mögliche Ursachen für den (SQLCODEdieser Nachricht

    o   Das Paket wurde nicht gebunden oder es wurde gelöscht.  

    o   Für die Ausführung eines DB2-Dienstprogramms oder einer       
        CLI
    -Anwendung kann es erforderlich sein, die               
        
    DB2-Dienstprogramme erneut an die Datenbank zu binden.  

    o   '%.paketname'.  Wenn für den Parameter CURRENT PACKAGE PATH   
        ein Wert festgelegt wird
    jedoch in keinem Schema im          
        Parameter CURRENT PACKAGE PATH ein Paket mit dem Namen       
        
    'paketname' gefunden wurde.  

     

     
    Wenn die Versions-IDs für paketschema.paketname bereits 
    verwendet werden
    können Pakete vorhanden seinderen Schema und 
    Name übereinstimmen
    Das korrekte Paket wird jedoch nicht 
    gefunden
    da die vorhandenen Pakete nicht mit der erforderlichen 
    Version bzw
    dem erforderlichen Konsistenztoken übereinstimmen
    Für ein Paket müssen alle drei Bestandteile des Paketnamens 
    übereinstimmen
    Bei Verwendung mehrerer Versionen kann diese 
    Nachricht auch aus den folgenden Gründen ausgegeben werden


    o   Die Version der ausgeführten Anwendung wurde vorkompiliert,   
        
    kompiliertund es wurde eine Verbindung hergestellt.  Die    
        
    Anwendung wurde jedoch nicht gebundenoder sie wurde         
        gebunden
    aber diese Version des Pakets wurde gelöscht.  

    o   Die Anwendung wurde zwar vorkompiliert und gebundenaber sie 
        wurde nicht kompiliert
    und/oder es wurde keine Verbindung    
        hergestellt
    .  Deshalb ist die ausgeführte Anwendung nicht   
        aktuell
    .  

    o   Das Paket wurde anhand einer Bindedatei gebunden, die durch   
        eine andere Vorkompilierung der Quellendatei generiert wurde  
        als 
    die Vorkompilierungaus der die geänderte Quellendatei   
        hervorging
    , die kompiliert und mit der ausführbaren Datei der 
        Anwendung verbunden wurde
    .  

    o   Eine neue Anwendung wurde mit dem Namen (und der Version)     
        
    eines bereits vorhandenen Pakets gebundenso dass das        
        vorhandene Paket ersetzt wurde
    .  Wenn die dem ersetzten Paket 
        zugeordnete Anwendung ausgeführt wird
    kommt es zu diesem   
        Fehler
    .  

    In allen genannten Fällen entspricht das Konsistenztoken der 
    Anforderung nicht dem Konsistenztoken der vorhandenen Version

    Deshalb wird das Paket nicht gefunden.  

     Die 
    Anweisung kann nicht verarbeitet werden.  

    Benutzeraktion

    Korrigieren Sie den Namen des Paketsoder binden Sie das 
    Programm
    .  Wenn die ausgeführte Anweisung nicht an die Datenbank 
    gebunden ist
    bitten Sie den Datenbankadministrator, die 
    erforderlichen Bindeoperationen durchzuführenStellen Sie sicher,
    dass es sich bei der ausgeführten Anwendung bzwdem ausgeführten 
    Objektmodul um den kompilierten und verbundenen geänderten 
    Quellcode handelt
    der dem Befehl PRECOMPILE und BIND zugeordnet 
    wurde
    der das Paket generiert hat.  

     
    Wenn für den Parameter CURRENT PACKAGE PATH ein Wert festgelegt 
    wird
    stellen Sie sicherdass das Schemain dem das Paket 
    enthalten ist
    im Parameter CURRENT PACKAGE PATH angegeben 
    wird
    .  

     Die 
    folgenden SQL-Anweisungen können zur Abfrage des Katalogs 
    verwendet werden
    um festzustellenob unterschiedliche 
    Paketversionen vorhanden sind
    .  

      
      
    SELECT PKGSCHEMAPKGNAMEPKGVERSIONUNIQUE_ID
      FROM SYSCAT
    .PACKAGES
      WHERE PKGSCHEMA
    ='paketschema' und PKGNAME='paketname'.
      
    Beachten Siedass die Spalte UNIQUE_ID dem Konsistenztoken 
    entspricht
    .  

     
    Falls die DB2-Dienstprogramme erneut an die Datenbank gebunden 
    werden müssen
    kann der Datenbankadministrator dies mit einem der 
    folgenden CLP
    -Befehle vom Unterverzeichnis bnd des Exemplars aus 
    vornehmen
    während er mit der Datenbank verbunden ist

    o   "DB2 bind @db2ubind.lst blocking all grant public" für die   
        
    DB2-Dienstprogramme 

    o   
    "DB2 bind @db2cli.lst blocking all grant public" für CLI.  

     

     
    Benutzer eines Systems zusammengeschlossener Datenbanken
    Stellen Sie sicherdass die für den Server mit 
    zusammengeschlossenen Datenbanken erforderlichen Pakete in den 
    entsprechenden Datenquellen gebunden werden
    Weitere 
    Informationen zum Binden von Paketen enthält das Handbuch Systeme 
    zusammengeschlossener Datenbanken 
    .  

     
    sqlcode :  -805 

     sqlstate 
    :  51002 
    EDIT2: Teilweise scheint CLI zu funktonieren. Beim Test des Assistenten sagt er "CLI-Verbindung erfolgreich getestet" aber auf Tabellen kann ich trotzdem nicht zugreifen.

  3. #3
    Registriert seit
    Sep 2006
    Beiträge
    132
    Bin mittlerweile weitergekommen. Das Programm spring mit einem Status "51002" aus dem Programm wenn ich den Cursor öffnen will. Dh. "SQL package &1; in &2; not found."
    Ich habe herausgefunden das bei ILE RPG Programmen beim Compilieren wichtige Variablen gesetzt werden.
    PHP-Code:
    *
          *
          *  
    To compile:
          *
          *             
    CRTSQLRPGI PGM(XXX/SQL001RGSRCFILE(XXX/QRPGLESRC)
          *
          *
          * 
    COMPILINGIn order to compile this program you will need
          
    *            to use options which allow it to work correctly
          
    *            between machinesThese options are---
          *
          *               
    COMMIT = *NONE
          
    *               RDB    Machine name that you will connect to.
          *               
    DLYPRP = *YES
          
    *               SQLPKG The name library that you want to
          
    *                        use for the packageThis will put the
          
    *                        package on the RDB machine that you
          
    *                        specify.
          * 
    Die Frage ist nur wie ich SQLPKG bei VARPG setze, denn darin liegt anscheinend mein Fehler.

    Gruß Martin

  4. #4
    Registriert seit
    Aug 2004
    Beiträge
    923

    CRTSQLPKG

    Boh ej,

    Dein Tempo ist ja der pure Wahnsinn...

    Ich bin mir nicht sicher, aber hast Du Dir schon mal CRTSQLPKG angesehen?

    k.

  5. #5
    Registriert seit
    Sep 2006
    Beiträge
    132
    Zitat Zitat von kuempi von stein
    Boh ej,

    Dein Tempo ist ja der pure Wahnsinn...

    Ich bin mir nicht sicher, aber hast Du Dir schon mal CRTSQLPKG angesehen?

    k.
    Danke aber deinen Sarkasmus kannst du behalten.
    CRTSQLPKG bringt mir nichts da es nur für AS400 Programme ist. Da mein VARPG Programm nicht auf der AS400 liegt bringt mir das nichts.

    Gruß Martin

  6. #6
    Registriert seit
    Aug 2004
    Beiträge
    923
    Nö, ich hab das gut gemeint. Nix Sarkasmus.

    Bin wirklich beeindruckt.

    gruss zurück

    kuempi

  7. #7
    Registriert seit
    Sep 2006
    Beiträge
    132
    Zitat Zitat von kuempi von stein
    Nö, ich hab das gut gemeint. Nix Sarkasmus.

    Bin wirklich beeindruckt.

    gruss zurück

    kuempi
    Sorry hatte sich für mich so angehört. Und normalerweise ist SQL auch bei keiner Programmiersprache ein Ding. Aber langsam verstehe ich warum mir überall geraten wird SQL in ILERPG Programm auszulagern. Das ist dort ja ganz einfach.

    Gruß Martin

    EDIT: Habe gerade einen alten Thread hier gefunden wo jm genau dasselbe Problem wie ich hat/hatte. Dort wurde anscheinend auch keien Lösung gefunden, bzw nicht gepostet. ;(

    EDIT2: Hab es geschafft das BND File an die DB zu binden(über eine db2 console: connect to; bind pfad\file bindmember(owner, sqlerror...); connect reset), der Fehlerstatus 51002 besteht jedoch weiterhin. Hat jm eine Idee? Vtl noch etwas mit dem Paket bei den Erstellungsoptionen?

  8. #8
    Registriert seit
    Sep 2006
    Beiträge
    132
    Mittlerweile funktioniert Emb. SQL.
    Man muss Binde- und Packetnamen angeben und der User der sich auf die DB connected braucht eine Collection/Schema dort.

    PS: Aber die Fehlermeldung mit "Package not found" war ja wohl ein Witz. Es war eine Collection die gefehlt hatte nichts anderes...

  9. #9
    Registriert seit
    Sep 2006
    Beiträge
    132
    Hallo,

    ich hätte noch eine Frage bzgl. DB2/Connect. Das ist ja das (mindeste)
    was man braucht um auf die i5 UDB zugreifen zu können, richtig?
    Da dieser DB2 ja auch bei jedem User installiert sein muss, wollte ich
    fragen welche Edition(
    http://www-306.ibm.com/software/info/ecatalog/de_DE/D.html?&S_TACT=none&S_CMP=no\
    ne

    ) ihr mir dafür empfehlen würdet und warum. Also zb.: Für Entwickler
    Edition: Xyz weil ... und für User Edition: ABC weil...

    Danke!

    Gruß Martin

  10. #10
    Registriert seit
    Feb 2001
    Beiträge
    20.696
    Eigentlich muss es auch sowas wie eine Kopierlizenz geben, also im Rahmen der Anwendung eine kostenlose Installation des reinen DB2/Clients für embedded SQL.
    Ich kann mir nicht vorstellen, dass jemand bereit ist pro PC eine eigene DB2/Connect-Lizenz zu erwerben nur weil die Anwendung mit embedded SQL arbeitet.
    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

  11. #11
    Registriert seit
    Sep 2006
    Beiträge
    132
    Zitat Zitat von Fuerchau
    Eigentlich muss es auch sowas wie eine Kopierlizenz geben, also im Rahmen der Anwendung eine kostenlose Installation des reinen DB2/Clients für embedded SQL.
    Ich kann mir nicht vorstellen, dass jemand bereit ist pro PC eine eigene DB2/Connect-Lizenz zu erwerben nur weil die Anwendung mit embedded SQL arbeitet.
    Es sollte soetwas geben aber bislang habe ich nichts gefunden und für IBM ist es ein gefundenes Fressen, da verdienen sie sich ne goldene Nase dran.

Similar Threads

  1. embedded SQL in RPG
    By muadeep in forum IBM i Hauptforum
    Antworten: 5
    Letzter Beitrag: 03-08-06, 13:25
  2. RPG mit Embedded SQL, JOIN ..
    By loeweadolf in forum NEWSboard Programmierung
    Antworten: 3
    Letzter Beitrag: 18-06-06, 12:14
  3. SQL .. for update of (RPG embedded SQL)
    By loeweadolf in forum NEWSboard Programmierung
    Antworten: 2
    Letzter Beitrag: 01-06-06, 09:43
  4. Character verbinden in Embedded SQL
    By e_sichert in forum NEWSboard Programmierung
    Antworten: 3
    Letzter Beitrag: 03-05-06, 10:47
  5. Embedded SQL - Datenbankoptionen in VARPG
    By woki in forum NEWSboard Programmierung
    Antworten: 2
    Letzter Beitrag: 13-04-04, 12:09

Berechtigungen

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