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