Experiencias en Oracle Developper | Consultor Oracle | Programación Oracle

Monday, July 03, 2006

Navegar a otro bloque en modo ENTER_QUERY

Tuvimos que resolver el problema de navegar a otro bloque estando en el modo enter_query.

La solución no nos satisface por que es muy "a pie". Si alguien tiene una mejor se los agradeceríamos.

Empecemos por establecer el escenario, pues ciertas restricciones son las que hacían difícil la solución.

Escenario
---------

1. Se tiene un bloque con sólo QUERY_ALLOWED en FORMS 6i. O sea , no se pude insertar en él.

2. Se tiene un botón para regresar el bloque anterior, que es padre de este en Maestro-Detalle

3. El bloque hijo que es de consulta se carga automáticamente, pero da al usuario la opción de usar "ENTER-QUERY" para pasar a modo query y realizar una consulta

4. Si la consulta no devuelve registros , tal vez el usuario quiere navegar al blqoue padre, utiliza "Cancel-query", igual quedamos en modo "enter-query" , así que al tratar de navegar fuera del bloque, forms no se lo permite

5. Como no podemos pasar a modo NORMAL y en inserción por que el bloque no permite inserción ( ver punto 1 ) , quedamos "trabados"

Solución
--------
La solución simple sería hacer EXECUETE_QUERY , cargando de nuevo los datos, quedando en modo normal Moficiación y luego hacer el cambio de bloque.

Pero si el query es sobre muchos registros puede ser un tiempo no torelable de espera por parte del usuario sólo para cambiar de bloque.

Así que la solución es en en trigger de enter-query , parcharlo para : guardar en una global la llave del registro actual y luego hacer el ENTER_QUERY.

Algo así :

:global.llave := :bloque.campo;
ENTER_QUERY;


Cuando se cancela el query y se quiere hacer el abandono del bloque, se cargan estas globales en las variables del bloque , luego se hace EXECUTE_QUERY y luego se abandona el bloque. Algo así

:bloque.campo := :global.llave ;
EXECUTE_QUERY;
GO_BLOCK('BLOQUE_MAESTRO');


Esperamos les sea de utilidad, agradecemos comentarios


Desarrollo en Oracle, visite nuestro sitio web

Wednesday, June 28, 2006

Carga de datos de otros sistemas

Alguna gente aficionada a sufrir cuando tiene que hacer una carga de datos hacia una base de datos Oracle utiliza las herramientas traidicionales de SQL*Loader.

Realmente hay formas mucho más sencillas de llevar datos de otro sistema a nuestra base de datos ( siempre que no estemos hablando de demasiados registros ).

Estos métodos pueden ser dos :

1- Teniendo los datos a cargar en Excel , utilizamos el Acess para hacer una conexión ODBC a nuestra base de datos y ahí en Access con simple copy/paste pegamos los registros que queremos cargar ( al fin le encontramos alguna utilidad a Acess ! ) .

2- Una herramienta como PL/SQL Developper permite hacer algo parecido, y aún más directo, desde Excel usted hace copy y en la plantilla de "Edit" - "Query" de PLSQLDev puede hacer Paste. Único cuidado , deje una columna "en blanco" adelante en los datos de Exeel para que pueda pegar sin problemas los datos.

En ambos casos debe guardar el orden estricto de las columnas en Excel contra la base de datos.







Esperamos este consejo sea de utilidad

Desarrollo en Oracle : visite nuestro sitio

Thursday, June 22, 2006

Maninuplando el Where para cambiar la información a mostrar en un bloque

Es algo que habíamos hecho antes, pero en esta ocasión nos fue un poco difícil recordar o encontrar con google u Otn cómo hacer para variar los elementos del "Where" de un bloque en Forms 6i .

Inicilmente para resolver nuestro problema bastaba con el "Pre-Query" para una condición que teníamos que incluir era " IS NULL " y esto ya no lo pudimos hacer asignando directamente a los campos en el pre-query.

Así que tuvimos que recurrir a manipular el DEFAULT_WHERE del bloque . Esto se hace sencillo con :

SET_BLOCK_PROPERTY ( 'NOMBRE_DEL_BLQOUE',DEFAULT_WHERE,
' EL QUERY QUE QUIERO ');

Dos consejos :

1- Manualmente en la forma asegúrese de que no haya sido asignada la propiedad DEFAULT WHERE para el bloque.

2- Si se necesitan incluir condiciones que implican campos caracter ( muy común ) el cuidado es con las comillas. De forma que para armar el "where" utilice una variable que tenga el valor en caracter de las comillas y concátenelo.

Por ejemplo :

declare
comil varchar2(5) := '''';

Y para armar el query va a ser por ejemplo :

' pagado='||comil||'S'||comil||'


Esperamos este consejo sea de utilidad

Desarrollo en Oracle : visite nuestro sitio

Experiencias en Oracle

Aunque nuestro giro empresarial nos lleva ahora más a la tencología Web, Oracle fue la tencología que nos "dio de comer" por muchos años y aún trabajamos con ella en ocasiones.

No queremos desaprovechar la oportunidad de tener un blog para contar nuevas experiencias con la misma.

Este blog supone que usted conoce lo básico sobre Oracle y tendrá una orientación técnica.

Consultores Oracle : nuestro sitio web