PDA

Ver la Versión Completa : como cambiar un valor true por un caracter


janexa
14-08-2006, 19:19:19
HOLA necesito en el QUICKREPORT cambiar un valor por un caracter en el
QRDBTEXT ME genera true o false dependiendo dela base de datos pero
quiero cambiarlo por * si es true y SI ES false no desplegar...ya lo intente con el evento onPrint pero necesito validar si es truE o false y no se puede
COMO LE HAGO????

HELP ME¡¡¡¡¡¡¡¡plEASE

BuenaOnda
14-08-2006, 20:44:09
;) Hola..

Mira para controlar el valor de unos de los campos retornados por alguna consulta, en el quickreport, debes acceder al evento "AfterOpen" del campo del "Query" (Consulta) retornado, me explico :

Supongamos que tienes esta tabla :


PERSONAS
========
Rut Integer
Nombre VarChar(100)
Ingles Boolean

para este ejemplo vamos a utilizar un componente Query y en su propiedad "Sql" vamos a escribir el siguiente codigo :

Select * From PERSONAS

luego aceptamos...
ahora le hacemos "doble click" al Componente Query y elejimos la opcion "Add Fields CTRL+A" y alli nos permitira agregar los campos solicitados en la consulta realizada en la Propiedad "SQL" del Componente Query.


Ahora vamos a utilizar el evento "AfterOpen" del componente Query...

Supongamos que queremos mostrar una etiqueta en el QuickReport que nos diga "Si habla ingles" si el campo "Ingles" de la Tabla Personas esta en True, bueno para esto vamos a poner una etiqueta llamada "LabelIngles" en el Quick report y en el evento "AfterOpen" del Query vamos a escribir lo siguiente :



procedure TfrmReportesPesticidas.QueryAfterOpen(DataSet: TDataSet);
begin
IF QueryIngles = True THEN
LabelIngles.caption='SI, habla ingles'
ELSE
LabelIngles.caption='NO, habla ingles'
end;


bueno..espero q' te sirva.


chao...mucha suerte. ;)

luisgutierrezb
14-08-2006, 23:21:06
no se que base de datos estes utilizando pero puede ser:
select campo1, campo2, iif(campoboolean, '*',Null) As CampoBooleanStr from ....
o tambien:
select campo1, campo2, case when campoboolean = 1 then '*' else Null end AS CampoBooleanStr from ....

Lepe
15-08-2006, 11:35:31
En lugar de hacerlo en la propia consulta, tambien puedes hacerlo en el evento BeforePrint del componente que sea, es decir, si tienes un Qrdbtext, en el evento mencionado puedes cambiar el texto que aparecerá.

Saludos

janexa
15-08-2006, 17:24:49
THANK YOU a todos los ke me contestaron... BuenaOnda];) Hola..

hice lo ke me mandaron pero ke creen si funciona con el afterOpen pero no del todo ya ke si me cambia el valor qrdtext con el evento ONPrint y en quickreport ANTES me apareceCIA:
NOMBRE-ARCHIVAR-INFORMAR-NINGUNO ARRIBA <---
XYZ TRUE FALSE TRUE
ACE FALSE TRUE TRUE

AHORA ME SALE EN EL QUICKREPORT:
NOMBRE-ARCHIVAR-INFORMAR-NINGUNO
XYZ * *
ACE * *

PERO PARA CUANDO SON MAS CAMPOS HACIA ABAJO NO CAMBIA, LOS DEJA IGUAL A LOS DE ARRIBA Y DEBERIA DE HACER ALGO ASI:
NOMBRE-ARCHIVAR-INFORMAR-NINGUNO
XYZ * *
ACE * *

ESTE ES MI QUERY SI FUNCIONA PORKE ANTES SALIA LO DE ARRIBA <---
UTILIZO SQL SERVER
select A.* ,P.per_nombre
from tmp_asignacion_per2 A,personal P
where A.CE_Folio_id2=:ce_folio_id AND A.CE_año_id2=:CE_año_id AND A.djs_id2=:djs_id AND A.rpe_id2=P.rpe_id

Y MIS CODIGOS EN DELPHI
procedure TDMCorrespondencia.QAsignacion_ceAfterOpen(DataSet: TDataSet);
begin
IF QAsignacion_cectrl_mod2.AsBoolean=true THEN
ctrl:=3
ELSE
ctrl:=4;
END;
END;
--------------------
procedure TFReporte.QRDBText13Print(sender: TObject; var Value: String);
begin
// FEntradas.e1.text:=inttostr(ctrl);
if ctrl=3 then
begin
value:='*';
end
else
begin
value:=' ';
end;
end;

Y AHORA COMO LE HAGO??????
HELP ME PLEASE....SE LO AGRADECERE MUCHO

Lepe
16-08-2006, 11:15:35
Se puede hacer todo en el BeforePrint (ojo BeforePrint):


Suponiendo que el QRDBText13 está enlazado con la consulta QAsignacion_ce y al campo ctrl_mod2, el código a usar sería:

procedure TFReporte.QRDBText13BeforePrint(sender: TObject; var Value: String);
begin
IF QAsignacion_cectrl_mod2.AsBoolean THEN
value:='*'
else
value:=' ';

end;
... y nada más.

Deberás repetir esto por cada campo que quieras sustituir sus valores, es decir, por cada QRDBText, QRlabel o lo que sea.

Ten en cuenta que si el valor que tiene es un nulo, porque no se ha asignado un valor, siempre saldrá un espacio en lugar del asterisco.


PD: Por favor, encierra el código entre

[ delphi ]
aqui vuestro codigo
[ /delphi ]

(sin espacios dentro de los corchetes) Así consigues que respete el identado y aparezca las palabras reservadas en negrita y colores.

Saludos

janexa
16-08-2006, 15:57:56
:::HØlA::::
Lepe (http://www.clubdelphi.com/foros/member.php?u=294) http://www.clubdelphi.com/foros/images/statusicon/user_online.gif vbmenu_register("postmenu_152138", true);
eternamente Junior
muchas gracias¡¡¡¡ Si FUNCIONO.. te debo una;)
eres excelente en delphi THANKS YOU.....
saludos

janexa
16-01-2008, 23:29:26
hola tengo unpekeño problemita al hacer una suma de horas Código Delphi [-] (http://www.clubdelphi.com/foros/private.php?do=insertpm&pmid=#) totalon:=totalon+HourSpan(dom_hsc.Time,dom_hec.Time);
totalin:=totalin+HourSpan(dom_hs.Time,dom_he.Time);
totalin:=totalin-totalon;
tothrs.Text:=floattostr(totalin);






ejemplo tengo que sumar 09:00:00 a.m. a 05:30:00pm tiene ke darme 8:30 horas
pero solo me pone 8:50 hrs
:confused: