Oracle - Data Block con muchos registros. Cambiar alguno.

 
Vista:

Data Block con muchos registros. Cambiar alguno.

Publicado por joselito (92 intervenciones) el 16/09/2002 11:51:14
Hola, amigos... (de nuevo).
Tengo un pequeño problema con Forms 6. Os explico.
Tengo un data block, donde se muestran a la vez, X registros... Bien. ahora, lo que tengo que hacer, es que dependiendo del valor de un campo, ese campo aparezca en Rojo o no.... (teniendo en cuenta que los valores aparecen en un data Block de varios registros a la vez...)
¿Cómo puedo verificar esto? ¿Tengo que recorrer los registros del Data Block para hacer esto? ¿Como recorrerlos? ¿Hay alguna propiedad o algo para comprobar esto? ... Espero me ayuden, porque estoy un poco perdido. Un saludo. JOSE.
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:Data Block con muchos registros. Cambiar alguno

Publicado por Fran (25 intervenciones) el 16/09/2002 12:07:06
Para recorrer los registros te situarias en el primero (first_record) y avanzarias con next_record, pero sgún lo que comentas creo que lo que estás buscando es la propiedad current record attribute a nivel de item.
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

Muchisimas Gracias... PERO....

Publicado por joselito (92 intervenciones) el 16/09/2002 15:38:42
Muchas gracias, Fran... La primera forma que me habias comentado, es la que suponia, pero queria buscar otra si fuese posible... La segunda forma, suena más elegante, y no la conocía.... ¿Cuando se valida ese current record attribute? ¿Donde habría que poner y cómo (según lo que me has comentado en el current record attribute) que si el campo tiene valor 'N' salga en Rojo, por ejemplo? ¿En el post-query del bloque? ¿En qué trigger? .. En este bloque se presenta de golpe todos los datos, unos 20 registros a primera vista (mas los que hay después, según vas bajando con un Scroll-Bar), por eso no sé si tengo que recorrer la lista, o poner ese current record attribute, en algún sitio... ¿Me podrias ayudar? .. Muchas gracias.... Salu2. JOSE.
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

¡¡ Y una preguntita mas!!!...

Publicado por joselito (92 intervenciones) el 16/09/2002 18:19:33
Gracias de nuevo. A ver... Pero ahora tengo una pequeña duda... ¿Como saber cuantos registros hay en ese bloque? .. (independientemente de que me muestre de forma visible 20, y pueda ir viendo mas, a medida que voy haciendo click en el scroll bar)... Quisiera recorrer la lista, hasta que sea el ultimo registro, e ir haciendo la comparacion, ya que no se utilizar lo de current_record_attribute... ¿Como se recorre la lista? ¿Cuantos registros tiene en total?... No me vale hacer un select count(*), ya que tira de una vista, y en el bloque hay un Where de la misma...
Muchas gracias de nuevo. Salu2. JOSE.
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

Data Block con muchos registros. Cambiar alguno.

Publicado por recorrer bloke (1 intervención) el 01/04/2013 16:29:08
DECLARE
CUENTA number;
CODARTI varchar2(20);
CONTEO number;
resp number;
CR_FS BOOLEAN;
begin

FIRST_RECORD;
CUENTA := 0;
CR_FS := FALSE;
BEGIN
LOOP
CUENTA := CUENTA + 1;
EXIT WHEN :SYSTEM.LAST_RECORD = 'TRUE';
Next_Record;
End loop;
END;
FIRST_RECORD;
for I IN 1 .. CUENTA LOOP
for A IN 1 .. I LOOP
IF A <> 1 THEN
Next_Record;
END IF;
End loop;
--ENVIAMOS A LA VARIABLE EL CAMPO QUE VAMOS A RECORRER

CODARTI:=RTRIM(lpad(:INVENTARIO.COD_ARTICULO,8,'0'));
CONTEO :=0;
BEGIN
FIRST_RECORD;
LOOP



IF (RTRIM(lpad(:INVENTARIO.COD_ARTICULO,8,'0') = CODARTI THEN
CONTEO := CONTEO + 1;
IF CONTEO > 1 THEN
set_alert_property('ALERT1',alert_message_text,'ESTE CODIGO DE ARTICULO '||RTRIM(lpad(:INVENTARIO.COD_ARTICULO,8,'0'))' YA FUE INGRESADO') ;
resp := show_alert('ALERT1');
GO_ITEM('INVENTARIO.COD_ARTICULO');
raise form_trigger_failure;
CR_FS:= TRUE;
END IF;
END IF;
EXIT WHEN :SYSTEM.LAST_RECORD = 'TRUE';
Next_Record;
end loop;
END;
FIRST_RECORD;
End loop;
LAST_RECORD;
--IF CR_FS = TRUE THEN
GO_ITEM('INVENTARIO.COD_ARTICULO');
-- raise form_trigger_failure;
--END IF;
end;


next_item;
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
sin imagen de perfil

Data Block con muchos registros. Cambiar alguno.

Publicado por Alixandro (63 intervenciones) el 10/04/2013 16:16:34
Hola Joselito, creo que estoy respondiendo un poco tarde. pero nunc es tarde si se hace con valuntad.

Tengo algo como los que buscas en varias pantallas y funciona a la perfeccion. le copio el codigo para que lo observes y puedas adaptarlo a tus variables e Item. La ubuicacion, depende de ti en que nivel quieres usarlo. en este caso tengo este anivel de bloque en un POST-QUERY, puedes usarlo tambien dentro del LOOP si asi lo deseas. Nota: Los atributos para los colores debes crearlos.

Aqui el codigo.

Declare
vCurrBlk Varchar(100):= :System.Current_Block;
vCurrReg Number(10) := Get_Block_Property( vCurrBlk, CURRENT_RECORD);
cur_itm VARCHAR2(80);
--
BEGIN
If :Deta.Det_StatusPago In ('RE') Then
--
Set_Record_Property( vCurrReg, vCurrBlk, STATUS, QUERY_STATUS);
cur_itm := Get_Block_Property( vCurrBlk, FIRST_ITEM );
--
WHILE ( cur_itm IS NOT NULL ) LOOP
cur_itm := vCurrBlk||'.'||cur_itm;
Display_Item( cur_itm, 'RED');
cur_itm := Get_Item_Property( cur_itm, NEXTITEM );
END LOOP;
End If;

--
If :Deta.Det_StatusPago In ('RE') And :Deta.Det_Procesado In ('X') Then

Set_Record_Property( vCurrReg, vCurrBlk, STATUS, QUERY_STATUS);
cur_itm := Get_Block_Property( vCurrBlk, FIRST_ITEM );

WHILE ( cur_itm IS NOT NULL ) LOOP
cur_itm := vCurrBlk||'.'||cur_itm;
Display_Item( cur_itm, 'BLACK');
cur_itm := Get_Item_Property( cur_itm, NEXTITEM );
END LOOP;
End If;
End;
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