Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Mascara de un dato en un Dbgrid (https://www.clubdelphi.com/foros/showthread.php?t=58357)

sancarlos 17-07-2008 17:11:24

Mascara de un dato en un Dbgrid
 
Tengo un Dbgrid con datos de una tabla , tengo un campo que necesito mascarear, el campo de numero de tarjeta de credito , el campo es de tipo char(18), y necesito que por ejemplo sea asi de 123456789012345678 a 123456########5678 , ahora el problema es que tengo que cargarlo asi en tiempo de ejecucion , ya que no puedo tener cargado el adoquery con los campos en tiempo de dise;o , es con Delphi 2006 y adoquery.

El dbgrid se cargar dinamicamente segun los campos que existan en otra tabla , que contiene los nombre de los campos , de manera que :
Código Delphi [-]
 
adocolumnsin.Close;
adocolumnsin.SQL.Clear;
adocolumnsin.SQL.Add('select * from ts.columnsin where status=1') ;
adocolumnsin.Prepared;
adocolumnsin.Open;
 
 
//fin consulta
params:=''; //Variable global , donde se guardan los nombre de los campos a consultar
cont:=adocolumnsin.RecordCount; ///numero de registros que devuelve la tabla
i:=0;
 ///Ciclo que nos permite pasar los nombre a la variable Global.
  adocolumnsin.First;
  while not (adocolumnsin.Eof)and (i <> cont) do begin
        i:=i+1 ;
        if i=cont  then begin
        params:=params+adocolumnsincolumnname.AsString;
        end else begin
        params:=params+adocolumnsincolumnname.AsString+',';
       end;
       adocolumnsin.Next;
   end;
 
 
aqui el select
 
 
adohistory.Close;
adohistory.SQL.Clear;
adohistory.Sql.Add('select '+params+' from ts.history where convert(varchar(10),datestamp,110) ='+chr(39)+ formatdatemenu +chr(39)+'');
adohistory.Sql.Add('order by datestamp desc') ;
adohistory.Prepared;
adohistory.Open;
Los ves en la Variable params viene los campos a cargar en db grid , si en el caso de que venga el campo numerodetarjeta este debe de venir mascareado como antes mencione.


Muchas Gracias


Todo lo anterior funciona bien,.

BlueSteel 17-07-2008 17:19:16

Hola sancarlos

mira, lo que yo reaizaría es trabajar sobre la columna del DBGrid, y realizar una cambio de formato de la sgte forma

usas el evento OnDrawColumnCell

y pones un codigo como este...(suponiendo que el dato esta en la columna 3


Código Delphi [-]
if (Column.Index = 3) then begin
      Str := Column.Field.AsString; // pasas el contenido de la columna a la variable
      Str := Concat(Copy(Column.Field.AsString,1,6)+'########'+Copy(Column.Field.AsString,15,4))
      DbGrid2.Canvas.FillRect(Rect);
      DbGrid2.Canvas.TextOut(Rect.Left, Rect.Top, Str);
    end;

No lo he probado, es lo que se me ocurre hacer, intentalo y si tiene algun error, muestralo

Salu2:p:D

Cannabis 21-07-2008 20:09:40

Código Delphi [-]
adohistory.Close;
adohistory.SQL.Clear;
adohistory.Sql.Add('select '+params+' from ts.history where convert(varchar(10),datestamp,110) ='+chr(39)+ formatdatemenu +chr(39)+'');
adohistory.Sql.Add('order by datestamp desc') ;
adohistory.Prepared;
adohistory.Open;
(adohistory.FieldByName('NombreDelCampo') AS TStringField).DisplayFormat:= '123456########5678';

Tal vez eso te ayude.

En Firebird debe realizarse cada vez que se abre el query, no sé cómo sea en ADO.


Salud.


La franja horaria es GMT +2. Ahora son las 21:39:37.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi