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.