|
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 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. -----Mensaje original----- 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: _____________________________________________ 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. -- -- -- |
Title: RE: Consulta de SQL
- Consulta de SQL Juan Carlos Paredes
- RE: Consulta de SQL Arbués Sanz , Jesús
- RE: Consulta de SQL Arbués Sanz , Jesús
- RE: Consulta de SQL Tecnico
- RE: Consulta de SQL Juan Carlos Paredes
- RE: Consulta de SQL Arbués Sanz , Jesús
- RE: Consulta de SQL Juan Carlos Paredes
