Gracias a todos.
He probado al final el %CHAR(PLINEA), pero no compila al darme un error "RNF0386 30      1 El primer parámetro para %CHAR no es válido."
Al final he logrado lo que quería de esta forma (no se si se pudiera mejorar, pero funciona !creo¡ ):
 
0106.01 C                   Eval      Xaposql = ''''                          
0106.02 C                   Eval      Yaposql = ''''                          
0106.03 C                   Eval      Xporsql = '''%'                         
0106.04 C                   Eval      Yporsql = '%'''                         
0106.05                                                                       
0106.06 C                   If        Situar = *Blanks                        
0108.07 C                   Eval      SelectTwo = %TRIMR(SelectOne) + xaposql +
0108.08 C                                         plinea + yaposql + ' ' +    
0108.09 C                                         %TRIMR(SelectOrd) + ' ' +   
0108.10 C                                         Orderby                     
0108.15 C                   Else                                              
0108.16 C                   Eval      SelectTwo = %TRIMR(SelectOne) + xaposql +
0108.17 C                             plinea + yaposql + ' ' +                
0108.18 C                             %TRIMR(SelectSit) + ' ' +               
0108.19 C                             Xporsql + %trimr(situar) + Yporsql + ' '
0108.20 C                             + %TRIMR(SelectOrd) + ' ' +             
0108.21 C                             Orderby                                 
                                                                              
----- Original Message -----
Sent: Monday, October 17, 2005 2:42 PM
Subject: Re: SQL dinámico en programa ILE RPG

En el where  has de utilizar el valor de plinea para comparar. :

where = %char(plinea)



Juan Antonio escribió:
Gracias, Fernando.
Los dos temas están solucinados, pero desarrollandolo más, me encuentro con el siguiente problema.
El parámetro es para restringir el SQL embebido, de manera que tan solo me muestre los de esa línea. Realizando el SQL sin esta restricción funciona, pero si la pongo no selecciona registros, dándome el SQLCOD = -00000501. Supongo que el problema estará en la sintaxis. ¿Alguna idea?.
 
0040.01 D SelectOne       S            500A   INZ('SELECT -                   
0040.02 D                                     mnpolf.epor, mnpof.enpor, -     
0040.03 D                                     mnpolf.eporl, mnpolf.estsa -    
0040.04 D                                     FROM mnpolf INNER JOIN mnpof ON -
0040.05 D                                     mnpolf.epor = mnpof.epor -      
0040.06 D                                     WHERE mnpolf.eline=')           
0040.08 D Select          S            500A   INZ('SELECT -                   
0040.09 D                                     mnpolf.epor, mnpof.enpor, -     
0040.10 D                                     mnpolf.eporl, mnpolf.estsa -    
0040.11 D                                     FROM mnpolf INNER JOIN mnpof ON -
0040.12 D                                     mnpolf.epor = mnpof.epor -      
0040.14 D                                     ORDER BY')                      
 
0044.01 D OrderBy         S             20A   INZ('mnpolf.epor')
0044.02 D Where           S             20A   INZ('plinea')      ---> Parámetro entrada de 3 A
0042.00 D SelectTwo       S            500A   INZ(' ') 
 
0106.02  * Solo con Order by...                                       
0107.00 C                   Eval      SelectTwo = %TRIMR(Select) + ' '
0108.00 C                                         + OrderBy                                ----> SI Selecciona registros
0108.01  * Solo con Where...                                          
0108.02 C*                  Eval      SelectTwo = %TRIMR(SelectOne)   
0108.03 C*                                        + Where                                  -----> No selecciona registros
 
Realizando el debug, y evaluando el campo SELECTTWO, compone lo siguiente:
 
  'SELECT mnpolf.epor, mnpof.enpor, mnpolf.eporl, mnpolf.estsa '
  'FROM mnpolf INNER JOIN mnpof ON mnpolf.epor = mnpof.epor WHE'
  'RE mnpolf.eline=plinea                                      '
----- Original Message -----
Sent: Thursday, October 13, 2005 5:50 PM
Subject: Re: SQL dinámico en programa ILE RPG

c1, ..., c4 han de ser variables definidas en el programa ( no valen campos de ficheros ni de pantallas).

El error del paso de parámetros no creo que se deba a usar sql, que lo permite. En todo caso, ya que es ile, prueba a definirle el prototipo y el interfaz, a ver si así.

Juan Antonio escribió:
He estado realizando algún programa a este respecto, y me encuentro con dos problemas.
 
    1.- El SQL está realizado con la unión de dos tablas, de manera que en las sentencias:
                    0157.00 C/EXEC SQL                                
                    0159.01 C+   FETCH NEXT FROM mycsr               
                    0159.02 C+   INTO :c1, :c2, :c3, :c4
 
                    0160.00 C/END-EXEC
    me está dando en la compilación que los campos no existen. Claramente, lo que me falta es la calificación de a qué tabla corresponden, pero desconozco la sintaxis a utilizar. He probado con :tabla.c1, :tabla1.c2 etc pero sigue dándome error. ¿Alguien me orienta?.
 
    2.- El otro tema, es que debo pasarle un parámetro al programa, y este no me lo permite. Al quitarle el Entry Plist queda resuelto, pero me es necesario pasarle un valor para la selección. ¿Alguna idea?.
 
Gracias.

--
Saludos.

Fernando Pérez 

Cerámica Saloni. Dpto. Sistemas


--
Saludos.

Fernando Pérez 

Cerámica Saloni. Dpto. Sistemas

Responder a