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" <jm...@musgrave.es>
Para:   "forum.help400" <forum.help400@listas.combios.es>
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   clcodi                            Like( MAECLI_T.clcodi )
D   clnomb                            Like( MAECLI_T.clnomb )
D   cldni                             Like( MAECLI_T.cldni )
3.       Define la DS donde almacenarás el resultado del Fetch:
D fila            DS                  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  Cliexclos            107    601s 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" <jm...@musgrave.es> 
Para:        "forum.help400" <forum.help400@listas.combios.es> 
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  Cliexclos            107    601s 0 DIM(99)     ? 
    D               E DS                  EXTNAME(LARTTF1)     ? 
    D  TARE                  10    405P 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.

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

Responder a