RE: Registro externo en procedimiento Solucion

2018-12-14 Por tema Javier Mora
Respondiendo a tu pregunta del TEMPLATE en las DS. Esta es una palabra clave 
que apreció en 6.1 (si no recuerdo bien) y se utiliza para declarar "un tipo 
nuevo", aunque en RPG no existe la posibilidad de crear nuevos tipos al estilo 
de C, Java, etc. Cuando definimos DS el compilador siempre reserva le espacio 
en memoria. Eso está muy bien.

Pero, ¿qué ocurre si lo que quiero es declarar una estructura que funcione como 
plantilla (o tipo nuevo) para definir otras estructuras? Si la defino como 
TEMPLATE ocurren, por lo menos, dos cosas:


1.   El compilador no le reserva espacio de memoria.

2.   La estructura sólo puede aparecer en definiciones del tipo LIKEDS o 
LIKE.

Y la pregunta ahora es ¿y toda esta parafernalia para qué sirve? Yo siempre que 
defino una DS es para cargarle valores, sino no la necesito. ¡Puest tienes 
razón! ¿O no?

En el pequeño ejemplo que te envié yo defino dos TEMPLATE: una con la 
estructura de campos de un fichero (MAECLI_T) y otra para almacenar el 
resultado de un SELECT de SQL (SqlFila_T). Si te fijas, esta segunda define sus 
campos en función de algunos campos definidos en la primera. Todo esta 
estructura es más una cuestión de estilo y de ordenar las cosas. Si quiero 
definir varias variables cuyo tipo es el mismo que el de un campo de fichero lo 
defino en función del tipo de éste, en lugar de codificarlo con su tipo real 
(empaquetado, numérico con zona, alfanumérico, etc.).

Si necesito definir parámetros de suprocecimientos que son DS, siempre utilizo 
LIKEDS de un TEMPLATE.

Este estilo me ofrece algunas ventajas, en cada momento sé el "tipo" de cada 
variable o estructura. La localización de estas variables se simplifica. El 
cambio en la estructura o tipo, se realiza en un solo sitio, en el TEMPLATE.

Por comparar, lenguajes como C, C++ o Java (entre otros) la única forma que 
tiene de definir nuevos tipos es con "struct" o "class" y las nuevas variables 
u objetos se definen en función de esos tipos. Yo hago algo parecido con los 
TEMPLATE y LIKEDS.

Pero, ¿es necesario hacer todo esto en RPG? ¡NO! Pero a mí, me ha dado buenos 
resultados esta técnica.

Respecto al tema del ARRAY sobre campos de un fichero o estructura. Se me 
ocurre, al menos, una alternativa si no quieres copiar los valores de los 
campos a un array a parte. Esta técnica sólo funciona si los campos que 
conforman cada elemento del arrary aparecen de forma consecutiva en el registro 
o DS.

Estudia este ejemplo (ojo, no lo he compilado):

D Tipo_T  DS  Template Qualified
D   alfa 3A
D   nume 5P 2

 * CAMPOS DEL FICHERO:
 *
 *   alfa1   3A
 *   nume1   5P 2
 *   alfa2   3A
 *   nume2   5P 2
 *   alfa3   3A
 *   nume3   5P 2

D registro  E DS  ExtName( FICHERO )

D array   DS  LikeDs( Tipo_T )
D Dim( 3 )
D Based( ptrArray )
 /FREE

  *InLR = *ON;

  ptrArray = %Addr( alfa1 );  // El primer campo del array

  array( 1 ).alfa = 'XXX';  // alfa1 = 'XXX'
  array( 1 ).nume = 3,7;// nume1 = 3,7


Saludos,

Javier


De: forum.help400-boun...@listas.combios.es 
[mailto:forum.help400-boun...@listas.combios.es] En nombre de alberto
Enviado el: viernes, 14 de diciembre de 2018 11:18
Para: forum.help400
Asunto: Re: Registro externo en procedimiento Solucion

Pues ya está.
No deja definir un array dentro de una DS definida con LIKEDS.
Entonces lo he definido así:
 D@RegDS E DS  extname(FESDTO)
 D qualified
 DCliexclos  107601  0 DIM(99)
 D @Registro E DS  Extname(Fesdto)
Todo como Extname.
Una curiosidad: tampoco me deja definir @regDS dentro del procedimiento.
Lo tengo que definir en el principal, porque si no, me dice que no existe el 
campo @regds.Cliexclos.
Serán tonterías de la V6R1?
Por cierto, Javier Mora. Para qué usas el template en la deficición de la DS?
Salu2





De:"alberto" 
Para:"forum.help400" 
Fecha:    14/12/2018 10:17
Asunto:    ** Newsletter ** Re: Registro externo en procedimiento
Enviado por:forum.help400-boun...@listas.combios.es




Hola
Creo que ya se cual es el problema(que no la solución).
De hecho son dos problemas. SQL y procedimiento, porque en un programa con 
subrutinas y sin SQL funciona desde siempre.
El problema lo tengo al definir que una parte de los campos del registro son un 
array. No tanto en la definición de la DS
D @RegDS  DS  likeDS(@registro)
d Cliexclos 107601s 0 DIM(99)
Si defino el array  en la misma DS que recibe los datos:
Exec SQL Fetch Next From @cursor into :@reg;
directamente el SQL no me lo reconoce como variable.
Digo: vale, pues la defino sin array y muevo los dat

Re: Registro externo en procedimiento Solucion

2018-12-14 Por tema alberto
Pues ya está.
No deja definir un array dentro de una DS definida con LIKEDS.
Entonces lo he definido así:
 D@RegDS E DS  extname(FESDTO) 
 D qualified
 DCliexclos  107601  0 DIM(99)
 D @Registro E DS  Extname(Fesdto) 
Todo como Extname.
Una curiosidad: tampoco me deja definir @regDS dentro del procedimiento. 
Lo tengo que definir en el principal, porque si no, me dice que no existe 
el campo @regds.Cliexclos.
Serán tonterías de la V6R1?
Por cierto, Javier Mora. Para qué usas el template en la deficición de la 
DS?
Salu2





De: "alberto" 
Para:   "forum.help400" 
Fecha:  14/12/2018 10:17
Asunto: ** Newsletter ** Re: Registro externo en procedimiento
Enviado por:forum.help400-boun...@listas.combios.es



Hola 
Creo que ya se cual es el problema(que no la solución). 
De hecho son dos problemas. SQL y procedimiento, porque en un programa con 
subrutinas y sin SQL funciona desde siempre. 
El problema lo tengo al definir que una parte de los campos del registro 
son un array. No tanto en la definición de la DS 
 D @RegDS  DS  likeDS(@registro) 
 d Cliexclos 107601s 0 DIM(99)   
Si defino el array  en la misma DS que recibe los datos: 
Exec SQL Fetch Next From @cursor into :@reg; 
directamente el SQL no me lo reconoce como variable. 
Digo: vale, pues la defino sin array y muevo los datos a otra que tenga 
array. 
pues aquí está el problema. 
 Desde el momento que defino el array y el programa tiene un sólo 
procedimiento, ya no me compila, porque los procedimientos por lo que veo 
no me están reconociendo un array de 99 elementos, sino un campo numérico 
de más de 63 dígitos. 
Esto me pasa tanto definiendo el array dentro del procedimiento como 
fuera. Tanto si la hago servir como si no. 
 Me sigue faltando el compilar en 7.1 que no he podido. 
Salu2 
  




De:"Juan Carlos Paredes"  
Para:"forum.help400"  
Fecha:12/12/2018 18:00 
Asunto:    ** Newsletter ** Re: Registro externo en procedimiento 
Enviado por:forum.help400-boun...@listas.combios.es 



Me suena haberme encontrado con ese problema en alguna ocasión. Y creo 
recordar que lo solucioné definiendo el fichero en una hoja F específica 
del procedimiento, como Input y UsrOpn, haciendo una apertura en falso 
(para que no se queje el compilador de que no hay operación de apertura) 
y definiendo la DS como LikeRec(NombreRegistro)

Un saludo.

Juan Carlos

---
https://paredes.info
juancar...@paredes.info

> 2018 09:20:04 +0100
> From: "alberto" 
> Subject: Registro externo en procedimiento
> To: "forum.help400" 
> Message-ID:
> 
> 
> Content-Type: text/plain; charset="iso-8859-1"
> 
> Hola Foro.
> Me ha surgido una cosa nueva, que a ver cómo lo resolvéis vosotros:
> tengo definido dos registros externos como tal:
>  D  @regext  E DS  EXTNAME(FESDTO)  ?
>  D  Cliexclos107601s 0 DIM(99)  ?
>  D   E DS  EXTNAME(LARTTF1)  ?
>  D  TARE  10405P 3 DIM(99)
> 
> El segundo lo hago servir en el cuerpo principal del programa, y el
> primero @regext lo hago servir en un procedimiento, para me de el
> resultado de un Select *  y me cree un array con los campos que hay en
> 
> esas posiciones.
> En el procedimiento lo tengo definido así:
>  d@REG DS  lIKEDS(@REGEXT)
>   ..
>Exec SQL Fetch Next From @cursor into :@reg;
> Supongo que esto lo habéis hecho servir muchos de vosotros.
> El caso es que al compilar me da error en el que paso como parámetro.
> Del
> que hay en el cuerpo principal no se queja, pero con el otro no me
> deja
> compilar.
> En el procedimiento lo tengo definido como he dicho antes, pero vamos,
> que
> ya he probado varias combinaciones diferentes y no hay manera.
> Como muy poco, me da un error de nivel 20.pero no voy a aburrir con
> los
> errores diferentes que me da al compilar.
> Alguien se ha encontrado con algo parecido?
> Supongo que lo más rápido es pasar del procedimiento y hacer una
> subrutina
> de las de toda la vida, pero seguro que IBM ha resuelto esto y no me
> lo ha
> dicho.
> Saludos
> 
> El mié., 12 dic. 2018 a las 5:01,
>  escribió:
> 
>> Envíe los mensajes para la lista Forum.help400 a
>> forum.help400@listas.combios.es
>> 
>> Para subscribirse o anular su subscripción a través de la WEB
>> 
>> http://listas.combios.es/cgi-bin/mailman/listinfo/forum.help400
>> 
>> O por correo electrónico, enviando un mensaje con el texto "help"
>> en
>> el asunto (subject) o en el cuerpo a:
>> forum.hel

Re: Registro externo en procedimiento

2018-12-14 Por tema alberto
Hola
Creo que ya se cual es el problema(que no la solución).
De hecho son dos problemas. SQL y procedimiento, porque en un programa con 
subrutinas y sin SQL funciona desde siempre.
El problema lo tengo al definir que una parte de los campos del registro 
son un array. No tanto en la definición de la DS
 D @RegDS  DS  likeDS(@registro)
 d Cliexclos 107601s 0 DIM(99) 
Si defino el array  en la misma DS que recibe los datos:
Exec SQL Fetch Next From @cursor into :@reg; 
directamente el SQL no me lo reconoce como variable.
Digo: vale, pues la defino sin array y muevo los datos a otra que tenga 
array.
pues aquí está el problema.
 Desde el momento que defino el array y el programa tiene un sólo 
procedimiento, ya no me compila, porque los procedimientos por lo que veo 
no me están reconociendo un array de 99 elementos, sino un campo numérico 
de más de 63 dígitos.
Esto me pasa tanto definiendo el array dentro del procedimiento como 
fuera. Tanto si la hago servir como si no.
 Me sigue faltando el compilar en 7.1 que no he podido.
Salu2
 
 



De: "Juan Carlos Paredes" 
Para:   "forum.help400" 
Fecha:  12/12/2018 18:00
Asunto: ** Newsletter ** Re: Registro externo en procedimiento
Enviado por:forum.help400-boun...@listas.combios.es



Me suena haberme encontrado con ese problema en alguna ocasión. Y creo 
recordar que lo solucioné definiendo el fichero en una hoja F específica 
del procedimiento, como Input y UsrOpn, haciendo una apertura en falso 
(para que no se queje el compilador de que no hay operación de apertura) 
y definiendo la DS como LikeRec(NombreRegistro)

Un saludo.

Juan Carlos

---
https://paredes.info
juancar...@paredes.info

> 2018 09:20:04 +0100
> From: "alberto" 
> Subject: Registro externo en procedimiento
> To: "forum.help400" 
> Message-ID:
> 
> 
> Content-Type: text/plain; charset="iso-8859-1"
> 
> Hola Foro.
> Me ha surgido una cosa nueva, que a ver cómo lo resolvéis vosotros:
> tengo definido dos registros externos como tal:
>  D  @regext  E DS  EXTNAME(FESDTO)  ?
>  D  Cliexclos107601s 0 DIM(99)  ?
>  D   E DS  EXTNAME(LARTTF1)  ?
>  D  TARE  10405P 3 DIM(99)
> 
> El segundo lo hago servir en el cuerpo principal del programa, y el
> primero @regext lo hago servir en un procedimiento, para me de el
> resultado de un Select *  y me cree un array con los campos que hay en
> 
> esas posiciones.
> En el procedimiento lo tengo definido así:
>  d@REG DS  lIKEDS(@REGEXT)
>   ..
>Exec SQL Fetch Next From @cursor into :@reg;
> Supongo que esto lo habéis hecho servir muchos de vosotros.
> El caso es que al compilar me da error en el que paso como parámetro.
> Del
> que hay en el cuerpo principal no se queja, pero con el otro no me
> deja
> compilar.
> En el procedimiento lo tengo definido como he dicho antes, pero vamos,
> que
> ya he probado varias combinaciones diferentes y no hay manera.
> Como muy poco, me da un error de nivel 20.pero no voy a aburrir con
> los
> errores diferentes que me da al compilar.
> Alguien se ha encontrado con algo parecido?
> Supongo que lo más rápido es pasar del procedimiento y hacer una
> subrutina
> de las de toda la vida, pero seguro que IBM ha resuelto esto y no me
> lo ha
> dicho.
> Saludos
> 
> El mié., 12 dic. 2018 a las 5:01,
>  escribió:
> 
>> Envíe los mensajes para la lista Forum.help400 a
>> forum.help400@listas.combios.es
>> 
>> Para subscribirse o anular su subscripción a través de la WEB
>> 
>> http://listas.combios.es/cgi-bin/mailman/listinfo/forum.help400
>> 
>> O por correo electrónico, enviando un mensaje con el texto "help"
>> en
>> el asunto (subject) o en el cuerpo a:
>> forum.help400-requ...@listas.combios.es
>> 
>> Puede contactar con el responsable de la lista escribiendo a:
>> forum.help400-ow...@listas.combios.es
>> 
>> Si responde a algún contenido de este mensaje, por favor, edite la
>> linea del asunto (subject) para que el texto sea mas especifico que:
>> "Re: Contents of Forum.help400 digest...". Además, por favor,
>> incluya
>> en la respuesta sólo aquellas partes del mensaje a las que está
>> respondiendo.
>> 
>> Asuntos del día:
>> 
>> 1. Registro externo en procedimiento (alberto)
>> 2. Re: Registro externo en procedimiento (Alex Martínez)
>> 3. RE: Registro externo en procedimiento (Javier Mora)
>> 4. Registro externo en procedimiento (alberto)
>> 
>> 
> --

RE: Registro externo en procedimiento

2018-12-13 Por tema alberto
Probaré por curiosidad pero haciendo un programa expresamente para probar.
 Precisamente lo que quiero es ahorrarme definir los campos del fichero, 
porque es de esos antiguos y tiene 130 campos.
Tambien pasa que si no los meto en un arrai, me cambia la lógica del 
programa porque tengo que llamarlos uno por uno en vez de hacer un bucle 
con un %lookup dentro
Igualmente,  quiero probarlo en una 7.1 a ver si compila.
Éstos son los problemas del dia a dia que nos encontramos cuando queremos 
modernizar aplicaciones. A veces el tema se complica.
El caso es que me ha tocado meterle mano a un programa de más de 20 años, 
una modificación me llevaba a otra(por ej, quitar un GOTO)y he dicho, pues 
nada, vamos a hacerlo todo nuevo. 
Seguramente hoy en dia a nadie se le ocurriría hacer un fichero con 130 
campos. 
Ya iré informando.
Salu2




De: "Javier Mora" 
Para:   "forum.help400" 
Fecha:  12/12/2018 19:06
Asunto: ** Newsletter ** RE: Registro externo en procedimiento
Enviado por:forum.help400-boun...@listas.combios.es



Sólo por probar:
 
1.   Define una DS externa para utilizarla como “diccionario” de los 
diferentes “tipos” de cada campo.
D MAECLI_T  E DS  ExtName( MAECLI ) 
D Template Qualified
2.   Define la DS con los campos que devolverá del cursor (esto no es 
estrictamente necesario):
D SqlFila_T   DS  Template 
D Qualified 
D   clcodiLike( MAECLI_T.clcodi )
D   clnombLike( MAECLI_T.clnomb )
D   cldni Like( MAECLI_T.cldni )
3.   Define la DS donde almacenarás el resultado del Fetch:
D filaDS  LikeDs( SqlFila_T )
4.   Realiza la lectura del cursor:
Exec Sql FETCH csr INTO :fila;
 
Hasta donde yo sé, la estructura que utilices en el FETCH debe ser global 
al programa. Creo recordar que en PTFs recientes se podían utilizar DS 
locales (seguro que en 6.1 no está esta opción).
 
Todas las estructuras de datos que definas directamente como LIKEDS de 
otro estructura (aunque sea externa) creo que el precompilador no la va a 
tener en cuenta. Sólo si te defines un DS con campos definidos en función 
de otro campo (LIKE) o directamente poniendo su tipo funcionará con SQL 
incrustado.
 
A mí esta técnica me funciona desde versión 5.4. Revisaré si en 7.2 (donde 
estoy) se puede usar directamente el LIKEDS o LIKEREC y DS locales con el 
SQL incrustado (estoy al último nivel de PTF).
 
Ya nos cuentas.
 
Javier Mora
De: forum.help400-boun...@listas.combios.es [
mailto:forum.help400-boun...@listas.combios.es] En nombre de alberto
Enviado el: miércoles, 12 de diciembre de 2018 11:00
Para: forum.help400
Asunto: Registro externo en procedimiento
 
Alex, Javier, os respondo a los dos en el mismo email: 
Este es mi AS de desarrollo, que está en V6r1(espero que por poco tiempo). 

 Luego si puedo me pasaré el fuente al de producción (V7R1) y lo intentaré 
compilar. 
Alex: no, con qualified me da el mismo error, ya lo había probado.  :( 
tampoco me deja ponerlo despues del LikeDS. 
Javier: Pues el error depende, porque he probado varias combinaciones. En 
el caso del ejemplo que he enviado, el error es directamente de SQL 
diciendo que la variable @Reg no existe, 
cuando ya véis que la estoy definiendo como Likeds. 
Si por ejemplo defino el array dentro del procedimiento,  tal que así: 
d@REG DS  lIKEDS(@REGEXT) 
D  Cliexclos107601s 0 DIM(99)   
me da estos 3 errores: 
*RNF0503 20  1 La longitud del elemento numérico es de más de 63 
dígitos; 
   toma el valor por omisión de 63.
*RNF3602 20  1 La entrada no está en blanco para una definición de 
campo; 
   toma el valor por omisión de blancos.  
*RNF3703 20  1 No se ha especificado el subcampo o la definición de

   parámetro en un grupo.




De:"Javier Mora"  
Para:"forum.help400"  
Fecha:12/12/2018 10:06 
Asunto:    ** Newsletter ** RE: Registro externo en procedimiento 
Enviado por:forum.help400-boun...@listas.combios.es 




¿Puedes poner el mensaje de error de compilación y en qué sentencia? ¿En 
qué versión de sistema operativo estás? 
  
El precompilador de SQL para ILE RPG no anda muy fino y depende de cómo 
estén definidos los campos y estructuras te genera errores del tipo “no 
utilizable”. Creo (de memoria) que en las últimas versiones del compilador 
(PTFs) este tema está solucionado, aunque no estoy muy seguro. 
  
Javier Mora 
  
De: forum.help400-boun...@listas.combios.es [
mailto:forum.help400-boun...@listas.combios.es] En nombre de alberto
Enviado el: miércoles, 12 de diciembre de 2018 9:20
Para: forum.help400
Asunto: Registro externo en procedimiento 
  
Hola Foro. 
Me ha surgido una cosa nueva, que a ver cómo lo resolvéis

RE: Registro externo en procedimiento

2018-12-12 Por tema Javier Mora
Sólo por probar:


1.   Define una DS externa para utilizarla como “diccionario” de los 
diferentes “tipos” de cada campo.

D MAECLI_T  E DS  ExtName( MAECLI )

D Template Qualified

2.   Define la DS con los campos que devolverá del cursor (esto no es 
estrictamente necesario):

D SqlFila_T   DS  Template

D Qualified

D   clcodiLike( MAECLI_T.clcodi )

D   clnombLike( MAECLI_T.clnomb )

D   cldni Like( MAECLI_T.cldni )

3.   Define la DS donde almacenarás el resultado del Fetch:

D filaDS  LikeDs( SqlFila_T )

4.   Realiza la lectura del cursor:

Exec Sql FETCH csr INTO :fila;

Hasta donde yo sé, la estructura que utilices en el FETCH debe ser global al 
programa. Creo recordar que en PTFs recientes se podían utilizar DS locales 
(seguro que en 6.1 no está esta opción).

Todas las estructuras de datos que definas directamente como LIKEDS de otro 
estructura (aunque sea externa) creo que el precompilador no la va a tener en 
cuenta. Sólo si te defines un DS con campos definidos en función de otro campo 
(LIKE) o directamente poniendo su tipo funcionará con SQL incrustado.

A mí esta técnica me funciona desde versión 5.4. Revisaré si en 7.2 (donde 
estoy) se puede usar directamente el LIKEDS o LIKEREC y DS locales con el SQL 
incrustado (estoy al último nivel de PTF).

Ya nos cuentas.

Javier Mora
De: forum.help400-boun...@listas.combios.es 
[mailto:forum.help400-boun...@listas.combios.es] En nombre de alberto
Enviado el: miércoles, 12 de diciembre de 2018 11:00
Para: forum.help400
Asunto: Registro externo en procedimiento

Alex, Javier, os respondo a los dos en el mismo email:
Este es mi AS de desarrollo, que está en V6r1(espero que por poco tiempo).
 Luego si puedo me pasaré el fuente al de producción (V7R1) y lo intentaré 
compilar.
Alex: no, con qualified me da el mismo error, ya lo había probado.  :(  tampoco 
me deja ponerlo despues del LikeDS.
Javier: Pues el error depende, porque he probado varias combinaciones. En el 
caso del ejemplo que he enviado, el error es directamente de SQL diciendo que 
la variable @Reg no existe,
cuando ya véis que la estoy definiendo como Likeds.
Si por ejemplo defino el array dentro del procedimiento,  tal que así:
d@REG DS  lIKEDS(@REGEXT)
D  Cliexclos107601s 0 DIM(99)
me da estos 3 errores:
*RNF0503 20  1 La longitud del elemento numérico es de más de 63 dígitos;
   toma el valor por omisión de 63.
*RNF3602 20  1 La entrada no está en blanco para una definición de campo;
   toma el valor por omisión de blancos.
*RNF3703 20  1 No se ha especificado el subcampo o la definición de
   parámetro en un grupo.




De:"Javier Mora" 
Para:"forum.help400" 
Fecha:12/12/2018 10:06
Asunto:    ** Newsletter ** RE: Registro externo en procedimiento
Enviado por:forum.help400-boun...@listas.combios.es




¿Puedes poner el mensaje de error de compilación y en qué sentencia? ¿En qué 
versión de sistema operativo estás?

El precompilador de SQL para ILE RPG no anda muy fino y depende de cómo estén 
definidos los campos y estructuras te genera errores del tipo “no utilizable”. 
Creo (de memoria) que en las últimas versiones del compilador (PTFs) este tema 
está solucionado, aunque no estoy muy seguro.

Javier Mora

De: forum.help400-boun...@listas.combios.es 
[mailto:forum.help400-boun...@listas.combios.es] En nombre de alberto
Enviado el: miércoles, 12 de diciembre de 2018 9:20
Para: forum.help400
Asunto: Registro externo en procedimiento

Hola Foro.
Me ha surgido una cosa nueva, que a ver cómo lo resolvéis vosotros:
tengo definido dos registros externos como tal:
D  @regext  E DS  EXTNAME(FESDTO)  ?
D  Cliexclos107601s 0 DIM(99)  ?
D   E DS  EXTNAME(LARTTF1) ?
D  TARE  10405P 3 DIM(99)

El segundo lo hago servir en el cuerpo principal del programa, y el primero 
@regext lo hago servir en un procedimiento, para me de el resultado de un 
Select *  y me cree un array con los campos que hay en esas posiciones.
En el procedimiento lo tengo definido así:
d@REG DS  lIKEDS(@REGEXT)
 ..
  Exec SQL Fetch Next From @cursor into :@reg;
Supongo que esto lo habéis hecho servir muchos de vosotros.
El caso es que al compilar me da error en el que paso como parámetro. Del que 
hay en el cuerpo principal no se queja, pero con el otro no me deja compilar.
En el procedimiento lo tengo definido como he dicho antes, pero vamos, que ya 
he probado varias combinaciones difere

Re: Registro externo en procedimiento

2018-12-12 Por tema Juan Carlos Paredes
Me suena haberme encontrado con ese problema en alguna ocasión. Y creo 
recordar que lo solucioné definiendo el fichero en una hoja F específica 
del procedimiento, como Input y UsrOpn, haciendo una apertura en falso 
(para que no se queje el compilador de que no hay operación de apertura) 
y definiendo la DS como LikeRec(NombreRegistro)


Un saludo.

Juan Carlos

---
https://paredes.info
juancar...@paredes.info


2018 09:20:04 +0100
From: "alberto" 
Subject: Registro externo en procedimiento
To: "forum.help400" 
Message-ID:


Content-Type: text/plain; charset="iso-8859-1"

Hola Foro.
Me ha surgido una cosa nueva, que a ver cómo lo resolvéis vosotros:
tengo definido dos registros externos como tal:
 D  @regext  E DS  EXTNAME(FESDTO)  ?
 D  Cliexclos107601s 0 DIM(99)  ?
 D   E DS  EXTNAME(LARTTF1)  ?
 D  TARE  10405P 3 DIM(99)

El segundo lo hago servir en el cuerpo principal del programa, y el
primero @regext lo hago servir en un procedimiento, para me de el
resultado de un Select *  y me cree un array con los campos que hay en

esas posiciones.
En el procedimiento lo tengo definido así:
 d@REG DS  lIKEDS(@REGEXT)
  ..
   Exec SQL Fetch Next From @cursor into :@reg;
Supongo que esto lo habéis hecho servir muchos de vosotros.
El caso es que al compilar me da error en el que paso como parámetro.
Del
que hay en el cuerpo principal no se queja, pero con el otro no me
deja
compilar.
En el procedimiento lo tengo definido como he dicho antes, pero vamos,
que
ya he probado varias combinaciones diferentes y no hay manera.
Como muy poco, me da un error de nivel 20.pero no voy a aburrir con
los
errores diferentes que me da al compilar.
Alguien se ha encontrado con algo parecido?
Supongo que lo más rápido es pasar del procedimiento y hacer una
subrutina
de las de toda la vida, pero seguro que IBM ha resuelto esto y no me
lo ha
dicho.
Saludos

El mié., 12 dic. 2018 a las 5:01,
 escribió:


Envíe los mensajes para la lista Forum.help400 a
forum.help400@listas.combios.es

Para subscribirse o anular su subscripción a través de la WEB

http://listas.combios.es/cgi-bin/mailman/listinfo/forum.help400

O por correo electrónico, enviando un mensaje con el texto "help"
en
el asunto (subject) o en el cuerpo a:
forum.help400-requ...@listas.combios.es

Puede contactar con el responsable de la lista escribiendo a:
forum.help400-ow...@listas.combios.es

Si responde a algún contenido de este mensaje, por favor, edite la
linea del asunto (subject) para que el texto sea mas especifico que:
"Re: Contents of Forum.help400 digest...". Además, por favor,
incluya
en la respuesta sólo aquellas partes del mensaje a las que está
respondiendo.

Asuntos del día:

1. Registro externo en procedimiento (alberto)
2. Re: Registro externo en procedimiento (Alex Martínez)
3. RE: Registro externo en procedimiento (Javier Mora)
4. Registro externo en procedimiento (alberto)



--


Message: 1
Date: Wed, 12 Dec 2018 09:20:04 +0100
From: "alberto" 
Subject: Registro externo en procedimiento
To: "forum.help400" 
Message-ID:





Content-Type: text/plain; charset="iso-8859-1"

Hola Foro.
Me ha surgido una cosa nueva, que a ver cómo lo resolvéis
vosotros:
tengo definido dos registros externos como tal:
D  @regext  E DS  EXTNAME(FESDTO)  ?
D  Cliexclos107601s 0 DIM(99)  ?
D   E DS  EXTNAME(LARTTF1)  ?
D  TARE  10405P 3 DIM(99)

El segundo lo hago servir en el cuerpo principal del programa, y el
primero @regext lo hago servir en un procedimiento, para me de el
resultado de un Select *  y me cree un array con los campos que hay
en
esas posiciones.
En el procedimiento lo tengo definido así:
d@REG DS  lIKEDS(@REGEXT)
..
Exec SQL Fetch Next From @cursor into :@reg;
Supongo que esto lo habéis hecho servir muchos de vosotros.
El caso es que al compilar me da error en el que paso como
parámetro. Del
que hay en el cuerpo principal no se queja, pero con el otro no me
deja
compilar.
En el procedimiento lo tengo definido como he dicho antes, pero
vamos, que
ya he probado varias combinaciones diferentes y no hay manera.
Como muy poco, me da un error de nivel 20.pero no voy a aburrir con
los
errores diferentes que me da al compilar.
Alguien se ha encontrado con algo parecido?
Supongo que lo más rápido es pasar del procedimiento y hacer una
subrutina
de las de toda la vida, pero seguro que IBM ha resuelto esto y no me
lo ha
dicho.
Saludos
 próxima parte 
Se ha borrado un adjunto en formato HTML...
URL:


<http://listas.combios.es/cgi-bin/mailman/private/forum.help400/attachments/20181212/065c3451/attachment-0001

RE: Registro externo en procedimiento

2018-12-12 Por tema Javier Mora
¿Puedes poner el mensaje de error de compilación y en qué sentencia? ¿En qué 
versión de sistema operativo estás?

El precompilador de SQL para ILE RPG no anda muy fino y depende de cómo estén 
definidos los campos y estructuras te genera errores del tipo "no utilizable". 
Creo (de memoria) que en las últimas versiones del compilador (PTFs) este tema 
está solucionado, aunque no estoy muy seguro.

Javier Mora

De: forum.help400-boun...@listas.combios.es 
[mailto:forum.help400-boun...@listas.combios.es] En nombre de alberto
Enviado el: miércoles, 12 de diciembre de 2018 9:20
Para: forum.help400
Asunto: Registro externo en procedimiento

Hola Foro.
Me ha surgido una cosa nueva, que a ver cómo lo resolvéis vosotros:
tengo definido dos registros externos como tal:
 D  @regext  E DS  EXTNAME(FESDTO)  
?
 D  Cliexclos107601s 0 DIM(99)  
?
 D   E DS  EXTNAME(LARTTF1) 
?
 D  TARE  10405P 3 DIM(99)

El segundo lo hago servir en el cuerpo principal del programa, y el primero 
@regext lo hago servir en un procedimiento, para me de el resultado de un 
Select *  y me cree un array con los campos que hay en esas posiciones.
En el procedimiento lo tengo definido así:
 d@REG DS  lIKEDS(@REGEXT)
  ..
   Exec SQL Fetch Next From @cursor into :@reg;
Supongo que esto lo habéis hecho servir muchos de vosotros.
El caso es que al compilar me da error en el que paso como parámetro. Del que 
hay en el cuerpo principal no se queja, pero con el otro no me deja compilar.
En el procedimiento lo tengo definido como he dicho antes, pero vamos, que ya 
he probado varias combinaciones diferentes y no hay manera.
Como muy poco, me da un error de nivel 20.pero no voy a aburrir con los errores 
diferentes que me da al compilar.
Alguien se ha encontrado con algo parecido?
Supongo que lo más rápido es pasar del procedimiento y hacer una subrutina de 
las de toda la vida, pero seguro que IBM ha resuelto esto y no me lo ha dicho.
Saludos

Únete a Recursos AS400, nuestra Comunidad ( http://bit.ly/db68dd )
Forum.Help400 © Publicaciones Help400, S.L.

Re: Registro externo en procedimiento

2018-12-12 Por tema Alex Martínez
Hola

Aquí puede influir bastante el nivel del compilador, pero haz la prueba de
añadir QUALIFIED en la definción de la DS @reg


El mié., 12 dic. 2018 a las 9:23, alberto ()
escribió:

> Hola Foro.
> Me ha surgido una cosa nueva, que a ver cómo lo resolvéis vosotros:
> tengo definido dos registros externos como tal:
>  D  @regext  E DS  EXTNAME(FESDTO)
>?
>  D  Cliexclos107601s 0 DIM(99)
>?
>  D   E DS  EXTNAME(LARTTF1)
>   ?
>  D  TARE  10405P 3 DIM(99)
>
> El segundo lo hago servir en el cuerpo principal del programa, y el
> primero @regext lo hago servir en un procedimiento, para me de el resultado
> de un Select *  y me cree un array con los campos que hay en esas
> posiciones.
> En el procedimiento lo tengo definido así:
>  d@REG DS  lIKEDS(@REGEXT)
>   ..
>Exec SQL Fetch Next From @cursor into :@reg;
> Supongo que esto lo habéis hecho servir muchos de vosotros.
> El caso es que al compilar me da error en el que paso como parámetro. Del
> que hay en el cuerpo principal no se queja, pero con el otro no me deja
> compilar.
> En el procedimiento lo tengo definido como he dicho antes, pero vamos, que
> ya he probado varias combinaciones diferentes y no hay manera.
> Como muy poco, me da un error de nivel 20.pero no voy a aburrir con los
> errores diferentes que me da al compilar.
> Alguien se ha encontrado con algo parecido?
> Supongo que lo más rápido es pasar del procedimiento y hacer una subrutina
> de las de toda la vida, pero seguro que IBM ha resuelto esto y no me lo ha
> dicho.
> Saludos
> 
> Únete a Recursos AS400, nuestra Comunidad ( http://bit.ly/db68dd )
> Forum.Help400 © Publicaciones Help400, S.L.

Únete a Recursos AS400, nuestra Comunidad ( http://bit.ly/db68dd )
Forum.Help400 © Publicaciones Help400, S.L.