Oracle - Clausula WHERE, con Like..

 
Vista:

Clausula WHERE, con Like..

Publicado por ELIA (43 intervenciones) el 16/06/2003 10:36:27
Tengo otra duda, el form q quiero montar está basado en varias listas desplegables,q se van cargando en cadena,es decir,al cargar el form,con el displarador pre_form cargo la primera lista ARTMAT (de articulos), tomando los datos de una tabla.Con esa lista y en ese mismo disparador hago un GO_BLOCK para cargar un Bloque de datos q tengo tambien en el form,ese bloque de datos lo tengo condicionado mediante la clausula where en sus propiedades,de esta forma:clausula WHERE: articulo LiKE : ARTMAT, de forma que visualizo en pantalla, solo los datos q cumplen la condición , el primer problema lo tengo cuando el valor q selecciono en la lista no es completo, por ejemplo 2345647 , sino que es por ejemplo 234%, ya q no quiero q me localice solo el registro cuyo articulo es el 234567 sino q quiero q me localice todos los articulos q empiezan por 234, en teoría podría hacerlo ya q he puesto Like en la clausula WHERE , pero solo me localiza datos, cuando pongo el campo completo , no me funciona con 234% , qué
hago mal??
Nota, artmat es un item tipo char. Muchas gracias de antemano a todos.espero q se me haya entendido algo, a pesar del rollo q he metido. Saludos
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Clausula WHERE, con Like..

Publicado por ELIA (43 intervenciones) el 16/06/2003 10:39:12
Me ocurre lo mismo cd intento cargar la 2ª lista desplegable, ya q lo hago en el disparador WHEN_LIST_CHANGED de la 1ª lista ARTMAT de la siguiente forma, con un cursor, utilizo el valor q he seleccionado en la lista ARTMAT, para localizar los datos a cargar en la segunda lista LISTESPE (LISTA DE ESPESORES) , aquí cuando en la clausula WHERE pongo como valor de artmat , el código completo, me localiza los espesores posibles de ese articulo , pero si selecciono un codigo con % por ejemplo 4537% no me localiza nada, es decir no me selecciona los espesores de los articulos q empiezan por 4537, a pesar de poner el LIKE porqué??

DECLARE
CURSOR ESP_CURSOR IS SELECT ESPESOR FROM INVENTARIO_VIRTUAL where articulo LIKE :artmat GROUP BY ESPESOR ORDER BY ESPESOR ASC;
BEGIN
CLEAR_LIST('LISTESPE');
FOR RINVENTARIO IN ESP_cursor LOOP
ADD_LIST_ELEMENT ('LISTESPE',ESP_CURSOR% ROWCOUNT,RINVENTARIO.ESPESOR,RINVENTARIO.ESPESOR);
END LOOP;
END;
Por lo tanto , esto me funciona solamente cuando selecciono un código completo de artmat. Nota, artmat es un item tipo char.

Aprovecho tambien para hacer la siguiente consulta, creo q no se puede, a traves de la propiedad "elemento de navegacion siguiente'", pasar de un item de un bloque, a otro item de otro bloque, es cierto que a través de esta propiedad solo se puede pasar entre Items del mismo bloque., y para pasar de un bloque a otro lo tenemos q hacer a traves de codigo mediante el GO_ITEM. Podeís confirmarme o desmentirme esto por favor???
Muchas gracias a todos. Saludos

Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Clausula WHERE, con Like..

Publicado por Byron (300 intervenciones) el 16/06/2003 22:43:39
Es extraño no debería darte problemas ni al momento de hacerlo referencia en un default_where ni al momento de hacer referencia en un cursor, quiza debas aplicar el último parche a tu forms, yo tengo una aplicacion parecida hecha en developer forms 6.0.5.32 y no me da problemas.

Respecto del go_item, tienes razon si deseas que al dar tab o enter en un item salte a un item en otro bloque deberas programar el key-next-item e incluir el go_item(). Como te digo el disparador key-next-item solo se ejecuta al dar enter o tab, por lo tanto no sirve al momento de validar, porque el usuario puede navegar a otros items con el mouse o presionando arriba o abajo, e incluso si tengo el cursor dentro de ese mismo item y doy en grabar. Por eso se recomienda usar el when-validate-item o de lo contrario algun otro disparador en el que se cerciore la validacion.

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Clausula WHERE, con Like..

Publicado por ELIA (43 intervenciones) el 17/06/2003 10:21:45
He comprobado el tema q me comentabas de la diferencia q hay entre el When_Validate_Item y el Key_Next_Item y efectivamente ocurre lo q dices, si nos movemos con el raton por ej. ya no efectua las sentencias del disparador. A mi me ocurre, lo q os comentaba en mensajes anteriores , yo tengo un item CANTIDAD en el formulario q cuando lo relleno, además de comprobar si otro de los items lo han rellenado tambien, actualiza la base de datos restando esta cantidad a un campo de la misma y sumandoselo a otro, (es una reserva , cantidad disponible = cantidad disponible - cantidad, y cantidad_reservada = cantidad_reservada + cantidad. Pero solo quiero hacerlo si el usuario rellena este campo 'cantidad', he metido la comprobacion de si hay algo en este campo así como la suma y resta en el disparador Key_Next_Item, ya q metiendolo en el when_validate_item nada mas abrir el form al desplegar y seleccionar los datos en la primera lista desple. q tengo ya salta en wh_va_it y como todavía no he rellenado los datos pues me sale por error. comprendo q es un poco chapucero meter las comprobaciones y actualizaciones en K_N_I, pero no sé como se debe hacer para q quede bien. Muchas gracias por aguantar estos rollos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Clausula WHERE, con Like..

Publicado por Byron (300 intervenciones) el 17/06/2003 16:59:34
Bien, me parece que tu planteamiento de actualizar en la base despues de modificar dichos campos es correcto, pero quiza no has tomado en consideracion si el usuario se equivoca de registros y modifica el campo varias veces, no es conveniente que el usuario por cada vez que modifique ese campo actualice en la base sino cuando el usuario haya decidido grabar entonces ya estamos seguros que el usuario decide publicar los cambios para entonces actualizar en la tabla los campos cantidad_disponible y cantidad_reservada. Otra cosa que quiero acotar es la difícil manipulación de eventos, si te darás cuenta Dev. Forms no permite muchas cosas en cuanto a navegación y triggers, en ocasiones uno debe conformarse con algo que mantenga consistencia de datos aunque no funcione como quisieramos.

Mi recomendación es un pre-commit a nivel de forma donde haces tu validacion, obviamente la validacion se ejecutar al presionar "Grabar", si lo que deseas es saber si el usuario modificó el item puedes hacer uso de una propiedad llamada update_column, para lo cual haces un get_item_property('bloque.item',update_column) esta funcion te retorna un varchar con la palabra 'TRUE' o 'FALSE', si modificó o no respectivamente. Después de la validación si los datos no son validos envias un alert o un message y haces go_item, si todo esta bien haces los updates necesarios.

Espero te sirva de ayuda. Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar