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

    Embedded SQL in VARPG

    Hallo,

    ich wollte gerade embedded SQL in VARPG ausprobieren und bin auf einige Sachen gestoßen zu denen ich einige Fragen hätte.

    1. Ich hab gehört man muss für den Zugriff auf die Datenbank etwas in den Erstellungsoptionen angeben. Was muss man dort genau angeben?

    2. Laut: http://www.systeminetwork.com/isnetf...p?t-26497.html
    muss auf jedem Client die DB2 UDB & SDK installiert werden. Braucht man diese nur zum Entwickeln oder müssen diese später auch bei jedem User installiert werden?
    Bzw was brauche ich zum entwickeln und was braucht der User zum ausführen des Programmes?

    3. Soweit ich weiß gibt es eine Trial Version für UDB und SDK aber die richtigen Versionen sind dann kostenpflichtig. Gibt es dort auch unterschiedliche Versionen?

    4. Reicht für die Benutzung von Emb. SQL "C+ connect to atabase user :UserId using :Password" oder muss man sich nochmal oder irgendwie anders an der Maschine anmelden?

    Vielen Dank schonmal im Vorraus!

    Gruß Martin

  2. #2
    Registriert seit
    Jan 2001
    Beiträge
    833
    Hallo Martin,

    alle Fragen kann ich leider nicht beantworten, da ich
    in VARPG kein SQL benutzte.

    Wenn SQL verwendet wird muss auch später bei der
    Installation auf den Clients die DB2 installiert sein.
    Die Version müsste aber bei dem CD Satz dabei sein.

    Wenn in meinen VARPG Programmen SQL benötigt
    wird, dann benutzte ich immer ein Serverprogramm.
    Damit entfällt die Installation für die Clients.

    Gruss
    Michael

  3. #3
    Registriert seit
    Sep 2006
    Beiträge
    132
    An das Auslagern des SQLs hatte ich auch schon gedacht aber ich wollte erstmal schaun wie es mit VARPG funktioniert, wie groß der Aufwand ist und wieviel das dann kostet. Weil auf jedem Client die DB2 UDB zu installieren wird bestimmt einiges an Kosten verursachen.

  4. #4
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    Die UDB selber ist nicht nötig sondern nur DB2/Connect.
    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

  5. #5
    Registriert seit
    Sep 2006
    Beiträge
    132
    Ok danke. Um die Kosten scheints aber keinen Weg herum zu geben.

  6. #6
    Registriert seit
    Sep 2006
    Beiträge
    132
    Kann mir evtl. jemand sagen was ich bei den Erstellungsoptionen eintragen muss? Bzw ob die 2 DB2 Reiter genug sind und was man bei "DB2-Datenbankname" eintragen muss?
    Sind ja nur 8 Zeichen dh. IP, qualifizierter Name oder irgendein Name einer Lib oder eines Files sind es nicht, da diese bis 10 Zeichen lang sein können. Was muss also dort hinein?

    Danke!

    Gruß Martin

    Edit: Ich glaub ich habs. Bei strsql steht ja "Verbindung zur relationalen Datenbank xyz hergestellt." Beim Kompilieren bekomme ich jetzt allerdings den Fehler: "
    RNV8539E Das Produkt DB2 wurde während der SQL-Initialisierung nicht gefunden; die Umwandlung wird beendet." Hat jm eine Idee?

  7. #7
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    Auf der AS/400 kann man mittels WRKRDBDIRE einen Datenbanknamen festlegen. Dieser ist max. 8-Stellig und entspricht meist dem Systemnamen (DSPNETA), der wiederum nur 8-Stellig sein kann.

    Wird ein fixer DB-Name eingetragen, schlägt die Verbindung fehl, wenn der angegebene Name nicht identische mit dem RDB-Namen der AS/400 ist.

    Das Feld kann freibleiben, da der Systemname zum Verbindungsaufbau vollkommen ausreicht.

    Mittels WRKRDBDIRE können andere DB's, die das DRDA-Protokoll unterstützen angebunden werden (meist andere AS/400er).
    Beim Connect kann ich also mittels Systemnamen und RDB-Namen dann durchrouten zu einer anderen DB (was nur sinn macht, wenn die anderen DB's nicht direkt erreichbar sind).
    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

  8. #8
    Registriert seit
    Sep 2006
    Beiträge
    132
    Zitat Zitat von Fuerchau
    Auf der AS/400 kann man mittels WRKRDBDIRE einen Datenbanknamen festlegen. Dieser ist max. 8-Stellig und entspricht meist dem Systemnamen (DSPNETA), der wiederum nur 8-Stellig sein kann.

    Wird ein fixer DB-Name eingetragen, schlägt die Verbindung fehl, wenn der angegebene Name nicht identische mit dem RDB-Namen der AS/400 ist.

    Das Feld kann freibleiben, da der Systemname zum Verbindungsaufbau vollkommen ausreicht.

    Mittels WRKRDBDIRE können andere DB's, die das DRDA-Protokoll unterstützen angebunden werden (meist andere AS/400er).
    Beim Connect kann ich also mittels Systemnamen und RDB-Namen dann durchrouten zu einer anderen DB (was nur sinn macht, wenn die anderen DB's nicht direkt erreichbar sind).
    Ich habe gerade nachgeschaut, der RDB Name auf der As400 ist derselbe den ich angegeben habe. Damit sollte der Fehler nichts zu tun haben. Kann es sein das der Fehler zustande kommt weil ich zz nur eine Trialversion der DB2 UDB habe? Da der Fehler mit nicht zu findenden DLLs zusammenhängt, fehlen in der Trialversion vtl DLLs?

    EDIT: Mittlerweile scheint er die DLLs zu finden. jetzt mag er jedoch meinen DB2-Datenbanknamen nicht mehr.

    RNV8533E Nicht behebbarer Fehler während SQL-Initialisierung aufgetreten: SQL1013N Der Aliasname der Datenbank oder der Datenbankname "ABCDEFGH" wurde nicht gefunden. SQLSTATE=42705

    Das ist aber genau der der bei "WRKRDBDIRE" auch steht.

    Und anscheinend muss ich das bei den Erstellungsoptionen angeben da er sonst meckert das ich dort etwas einstellen soll.

    EDIT2: MUss man evtl bei der Db2 Udb noch etwas einstellen?

  9. #9
    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.

  10. #10
    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.

  11. #11
    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

  12. #12
    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.

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
  •