Title: RE: Consulta de SQL

Gracias, Jesús.

Es más o menos lo mismo que tuve que hacer yo a mano pero puesto en un programa. La única diferencia es que yo el SQLRPG lo tengo compilado como un módulo y el programa que llama a ese módulo es otro. Así que el CRTSQLPKG hay que hacerlo sobre el programa que invoca al módulo y no sobre el propio módulo.

Saludos.

Juan Carlos.

    -----Mensaje original-----
    De:     [EMAIL PROTECTED] [SMTP:[EMAIL PROTECTED] En nombre de Arbués Sanz, Jesús
    Enviado el:     viernes, 17 de marzo de 2006 12:30
    Para:   [email protected]
    Asunto: RE: Consulta de SQL

    Ya Juan Calos, me refería precisamente al primer SQLRPG para una BD externa, perdona que no concretara, que has hecho algún que otro SQLRPG ya me imaginaba......, no te ofenda la pregunta..... ¡es broma!

     

    No recordaba lo que dices, nosotros tenemos un programa para compilar te mando el fuente por si te sirve.

     

    /* PROGRAMA PARA COMPILAR FUENTES TIPO SQLRPGLE   CON SQL INCRUSTADO        */

    /* PARA TRABAJAR CON TABLAS DB2 DE LA BASE DE DATOS DE SIEBEL.             */

    /*                                                                         */

                  PGM         PARM(&LIB &PGM )                                    

    /*                                                                         */

                  DCL         VAR(&PGM)   TYPE(*CHAR) LEN(10)                      

                  DCL         VAR(&LIB)   TYPE(*CHAR) LEN(10)                      

    /*                                                                         */

                  QSYS/CHGJOB CCSID(37)                                           

    /*                                                                         */

    /* PARA PODER SOMETER EN BATCH LOS PROGRAMAS SQLRPGLE, HAY QUE COMPILAR    */

    /* EN DOS PASOS: EN EL PRIMERO, CRTSQLRPGI, SE USA LA BASE DE DATOS        */

    /* RDB(*LOCAL); CON ESTE PARAMETRO, SE NECESITA CREAR UN SQLPKG APARTE     */

    /* MEDIANTE EL SEGUNDO MANDATO, DÓNDE SE ESPECIFICA LA BASE DE DATOS       */

    /* EXTERNA, EL USUARIO Y LA PASSWORD.                                      */

    /*                                                                         */

    /*                                                                         */

                  CRTSQLRPGI OBJ(&LIB/&PGM) SRCFILE(&LIB/QILESRC) +                    

                               COMMIT(*CS) RDB(*LOCAL) OPTION(*XREF +                  

                               *SQL) CLOSQLCSR(*ENDACTGRP) DATFMT(*ISO) +              

                               TIMFMT(*ISO) DBGVIEW(*SOURCE)                           

    /*                                                                         */      

                  CRTSQLPKG   PGM(&LIB/&PGM) RDB(SIEBEL) USER(DB2ADMIN) +               

                               PASSWORD(xxxxxxxxx)                                     

    /*                                                                         */      

    /* EN LA CODIFICACION DEL PROGRAMA SQLRPGLE:                               */      

    /* EN LA HOJA H SE DEFINE EL GRUPO DE ACTIVACIÓN QUE NO SE PUEDE */               

    /* DEFINIR EN EL MANDATO DE COMPILACIÓN                           */               

    /*                                                                */               

    /* HDFTACTGRP(*NO) ACTGRP(*CALLER)                                */               

    /*                                                                         */      

                  QSYS/CHGJOB CCSID(65535)                                             

    /*                                                                         */      

     

    Ya te digo las tortas al principio fueron buenas.

     

    Un saludo,

     

    Jesús

     

       _____ 

    De: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED]] En nombre de Juan Carlos Paredes
    Enviado el: viernes, 17 de marzo de 2006 9:30
    Para: [email protected]
    Asunto: RE: Consulta de SQL

     

    Buenos días, Jesús:

    No es el primer SQLRPG, pero sí la primera vez que accedo a una base de datos externa al iSeries. De todas maneras, investigando esta mañana (se ve que por las mañanas viene uno más despierto), he encontrado la solución.

    Os la cuento por si le sirve a alguien:

    Al acceder a una base de datos DB2 externa al iSeries, es necesario compilar el módulo con COMMIT(*CS), además en las opciones del pre-compilador hay que añadir la opción *SQL.

    Una vez compilado el módulo, es necesario crear paquetes SQL para todos los programas que lo vayan a utilizar:

    CRTSQLPKG PGM(biblioteca/programa) RDB(nombre de la base de datos externa) USER(usuario) PASSWORD(contraseña)

    De esta manera, funciona perfectamente. Lo que sí es preciso tener en cuenta, es que al compilar el módulo con control de compromiso, es necesario comprobar después de cada sentencia SQL si el resultado fue correcto (SQLCODE y SQLSTATE) para ejecutar un COMMIT o un ROLLBACK.

    Saludos.
    Juan Carlos.

    -----Mensaje original-----
    De:     [EMAIL PROTECTED] [SMTP:[EMAIL PROTECTED] En nombre de Arbués Sanz, Jesús
    Enviado el:     viernes, 17 de marzo de 2006 9:03
    Para:   [email protected]
    Asunto: RE: Consulta de SQL

    Hola Juan Carlos.

              No se si es el primer SQLRPG que intentas, no se si tendrá que ver pero en la primer línea por temas de grupos de activación, etc. Tuve que incorporar esto:

     

    _____________________________________________
    De: [EMAIL PROTECTED] [HYPERLINK "HYPERLINK "mailto:[EMAIL PROTECTED]"mailto:[EMAIL PROTECTED]"HYPERLINK "mailto:[EMAIL PROTECTED]"mailto:[EMAIL PROTECTED]] En nombre de Juan Carlos Paredes
    Enviado el: jueves, 16 de marzo de 2006 18:36
    Para: Forum Help 400
    Asunto: Consulta de SQL

    Buenas tardes, foro:

    Estoy tratando de acceder desde un programa RPG a una base de datos DB2 en un servidor windows. La base de datos está en el directorio de bases de datos relacionales correctamente creada. De hecho, si ejecuto una select desde interactivo contra esa base de datos, funciona correctamente. Sin embargo, cuando esa mismo select está incluida en un programa me da un error que dice:

    ID de mensaje    . . . . :     SQL0805         Gravedad . . . . . . :     30        

    Tipo de mensaje    . . . :     Diagnóstico                                        

    Fecha envío    . . . . . :     16/03/06        Hora envío . . . . . :     18:20:44  

                                                                                  

    Mensaje .. . . . :     No se ha encontrado el paquete SQL @COLART 0X en EVE60PGM

        en el servidor DRDA.                                                        

    Causa . .. . . . :     Se ha intentado una petición remota a *N para el paquete  

        SQL @COLART 0X en EVE60PGM El paquete SQL no se ha encontrado. Si está     

        utilizando SQL Interactivo o el Gestor de Consultas, ha fallado el intento  

        de crear un paquete en el sistema remoto (vea la causa más frecuente más    

        adelante en este mensaje) y el paquete solicitado no existe.                

    Recuperación    . :     La causa más frecuente de este problema en una sesión SQL

        interactiva con un servidor que no es iSeries es que la conexión no se puede

        actualizar. En tal caso, el paquete no se puede crear automáticamente. Para

        garantizar que la conexión pueda actualizarse, ejecute un mandato RELEASE   

        ALL seguido de una operación COMMIT antes de conectarse a la base de datos  

    relacional.                                                                

        En otros casos, el paquete SQL puede crearse utilizando el mandato       

    CRTSQLPKG. Además, al precompilar un programa SQL con el parámetro RDB     

    especificado se creará un paquete SQL en el sistema. Cree o restaure el    

    paquete SQL. Vuelva a ejecutar la aplicación.                              

        Si está utilizando SQL Interactivo o el Gestor de Consultas o la Interfaz

    de Nivel de Llamada SQL, salga del producto y especifique un mandato CL    

    COMMIT o ROLLBACK. Esto le permitirá seguir procesando en el sistema local.

    Determine por qué ha fallado la creación del paquete examinando las        

    anotaciones de trabajo. Corrija el problema e intente de nuevo la sesión de

    SQL Interactivo o Gestor de Consultas.                                     

                                                                               

    @COLART es un módulo con un único procedimiento que ejecuta una serie de sentencias SQL (en concreto, conectarse, ejecutar la select en cuestión y desconectarse de la base de datos remota) y devuelve el valor obtenido de la select.

    Ya he probado a compilar con y sin el parámetro RDB(nombre de base de datos), he probado a poner la select en SQL estático y dinámico y nada.

    He intentado crear el paquete SQL con CRTSQLPKG y recibo el siguiente error:

    MSJ ID    GRV    REG       TEXTO                                                   

    SQL5027    50            OPTION(*SYS) sólo es válido si la base de datos         

                           relacional ARTICULO (identificación de producto         

                           SQL08020) es un iSeries.                                

    SQL5056                Ha resultado anómala la creación del paquete SQL para el

                           módulo @COLART. El nombre del paquete iba a ser @COLART

                           en EVE60PGM de ARTICULO.                                

    El caso es que no encuentro ningún parámetro OPTION(*SYS) ni en la compilación del módulo, ni en el CRTSQLPKG ni en el CRTPGM.

    ¿Alguna ayuda?

    Gracias y un saludo.

    Juan Carlos.

     

    --
    No virus found in this outgoing message.
    Checked by AVG Anti-Virus.
    Version: 7.1.385 / Virus Database: 268.2.4/282 - Release Date: 15/03/2006
      

     

    --
    No virus found in this incoming message.
    Checked by AVG Anti-Virus.
    Version: 7.1.385 / Virus Database: 268.2.4/283 - Release Date: 16/03/2006
      

    --
    No virus found in this outgoing message.
    Checked by AVG Anti-Virus.
    Version: 7.1.385 / Virus Database: 268.2.4/283 - Release Date: 16/03/2006
      


    --
    No virus found in this incoming message.
    Checked by AVG Anti-Virus.
    Version: 7.1.385 / Virus Database: 268.2.4/283 - Release Date: 16/03/2006
     

--
No virus found in this outgoing message.
Checked by AVG Anti-Virus.
Version: 7.1.385 / Virus Database: 268.2.4/283 - Release Date: 16/03/2006
 

Responder a