lunes, 15 de septiembre de 2008

Oracle Reports: No funciona Order by con parámetro

Oracle Reports: No funciona Order by con parámetro
Oracle Reports: No funciona ordenar pasando el valor por parámetro
Oracle Reports: Me ignora el order by dinámico
Oracle Reports: Como poner un order by dinámico

Situación:
Tenemos un report con una consulta normal sobre una base de datos y queremos poder ordenar el resultado según un parámetro que nos indica por que columna queremos ordenar. Si no fuera dinámico simplemente lo añadimos normal a la consulta pero si es dinámico la primera opción que pensamos es poner un "orden by :parametro_orden" pero sin saber muy bien porque es algo que a veces va y a veces no. Si el parámetro además no nos indica la columna literalmente o la posición si no otro valor no relacionado pues debemos hacer un decode pero si las columnas son de diferente tipo (numérico y carácter por ejemplo) el que pongamos como segunda parte del decode nos fallará. ¿Como lo hacemos pues?

Explicación:
En el caso de no necesitar el decode no entiendo porque a veces no va, debe ser un error más de reports.
En el caso del decode si falla puede ser por lo anterior o porque son de diferentes tipos y se hace un lio.

Solución:
No se si era la idea original o un parche que han pensado algunos y se ha vuelto una especie de estandar pero ahora mismo es lo único que me funciona sin problemas.

En primer lugar creamos una funcion que nos devuelva, segun el valor del parámetro orden, la cadena de order by:




En segundo lugar a la consulta cambiamos el order by por &nombre_de_la_funcion.



Y ya funciona :P

viernes, 5 de septiembre de 2008

Oracle forms: Cambiar atributo de un elemento del registro actual y no de todos.

Oracle forms: Cambiar atributo de un elemento del registro actual y no de todos.

Oracle forms: Cambiar atributo solo del registro actual.

Oracle forms: Cambiar visualmente un atributo y no todos los del bloque.

 

 

Situación:

Tenemos un bloque de datos del que visualizamos más de un registro a la vez (el típico listado) y queremos cambiar el valor de fondo del campo nombre en aquellos en que esté vacío. El problema es que si usamos el

 

set_item_property ('GENTE_FEA.NOMBRE',BACKGROUND_COLOR, 'r100g100b255');

 

El color se aplicará al campo nombre de todos los registros de ese bloque y solo me interesa que afecte a los vacios.

 

Explicación:

En estos casos nos molesta pero para otros (por ejemplo: no dejar poner nombres en este bloque hasta que el DNI del jefe este completo) nos sirve así que hay que utilizar otro método.

 

Solución:

Crearemos un registro visual con el color que nos interesa y luego en el trigger que utilicemos para determinar si poner o no el color al campo nombre en función de si es o no nulo cambiamos el

 

set_item_property ('GENTE_FEA.NOMBRE',BACKGROUND_COLOR, 'r100g100b255');

 

Por

 

display_item('GENTE_FEA.NOMBRE'','atr_fondo_azulao');

 

Y el cambio solo afectará al item NOMBRE del bloque GENTE_FEA del registro actual y no todos.

  

 

 

 

Que versión de Oracle Forms usas?