viernes, 27 de junio de 2008

Oracle forms ¿cómo quito el mensaje de guardar? o cambiar estado del registro a QUERY

Oracle forms ¿cómo quito el mensaje de guardar?

Oracle forms Desactivar mensaje de guardar

Oracle forms Cuando cambio de bloque me pide guardar

Oracle forms Cuando cambio de bloque no quiero que me pida guardar

Oracle forms: cambiar estado del registro a no modificado

Oracle forms: cambiar estado del registro a QUERY


Situación:

Cuando en un bloque de datos vinculado a la BBDD hacemos un cambio directa o indirectamente y cambiamos de bloque, de registro o ciertas opciones más automáticamente nos sale un mensaje de Oracle forms en que nos pide si queremos o no guardar los cambios.




Explicación:

Muchas veces no nos interessa eso porque el bloque nos interesa que esté vinculado a la BBDD (base de datos) para hacer las selects con las ventajas del autofiltrado pero no queremos que sirva para guardar en BBDD. Lo lógico sería hacer que no se pueda hacer insert o update (insert/update allowed) pero entonces solo nos dejaría escribir en el bloque en caso de estar en modo enter-query y claro, para crear registros pues no nos sirve.


Solución:

Una primera solución es poner el nivel de alertas a 5 aunque no se porque en ciertas versiones y ciertos casos eso no elimina el error. Intentadla por si acaso:

:system.message_level := 5;

La otra solución consiste en crear una variable auxiliar que nos indique si ese registro se ha modificado o no y manualmente cambiar el estado del registro de modificado a no modificado para que oracle forms al hacer las comprobaciones crea que no hay ningun registro modificado y por lo tanto no pedirá guardar. Lo más fácil es hacer un triger de post-change a nivel de bloque y en el interior poner algo como


begin
--si el estado del registro no es ‘QUERY’ es que lo han modificado
if get_record_property (:system.cursor_record,'blk_personas',status) <> 'QUERY' then
-- guardo en mi variable para saber que si se ha modificado
:blk_personas.modificado:=1;
--le hago creer a forms que no devolviendole al estado QUERY
set_record_property(:system.cursor_record,'per',status,query_status);
end if;
end;


martes, 10 de junio de 2008

FRM-30187: El tamaño de la columna CHAR en el grupo de registros debe estar comprendido entre 1 y 2000.

FRM-30187: El tamaño de la columna CHAR en el grupo de registros debe estar comprendido entre 1 y 2000.
Grupo de registros LOVxxx
Pantalla: xxxxxx

Situación:

Creamos una lista de valores o la editamos y al compilar nos sale este error.

Explicación:

Cuando creamos o editamos a partir de una consulta (select) y esta contiene concatenaciones, llamadas a funciones o demás factores que impiden a Oracle Forms calcular la longitud del campo varchar2 nos pone por defecto 4000. Hay quien piensa que es un error de Oracle Forms porque no tiene sentido poner 4000 y que luego te diga que el máximo es 2000 y hay quien piensa que este error te lo pone para que lo redefinas tú manualmente.

Solución:

Sea como sea hay que ir al grupo de registros (record group) sobre el que va la Lista de valores (LOV) ( lo hayamos creado antes que la LOV o mediante el LOV wizzard o asistente de LOV) y en Column Specifications le damos para abrir el popup

Y vemos que en las columnas de tipo Character nos ha puesto de longitud (length) 4000 así que los redefinimos todos y guardamos. Ya podemos compilar bien ;P

Situación 2:

Comprobamos los campos como se indica arriba y aun así sale el error.

Explicación:

Cuando creamos el Record Group y la LOV a veces en la select ponemos más campos de los que realmente usamos y aunque no salgan luego cuando miramos las columnas y tal, allá están.

Solución:

Si realmente no los necesitamos los quitamos y si los necesitamos pues tenemos que hacerlos aparecer, aunque luego los ocultemos, para poder especificar una longitud inferior a los 4000.

Que versión de Oracle Forms usas?