Formata máscara para exibir em um DBGrid?

11/01/2006

Olá amigos tô com o seguinte problema, eu criei uma tabela(tbMascara com os compos: CodMascara, TipoMascara, Mascara) onde gostaria de salvar os tipos de máscaras:
_______________________
1 | CPF | 000\.000\.000\-00;1;_
2 | CGC | 00\.000\.000\-0000\-00;1;_
3 | TELEFONE | !\(99\) 9000-0000;1;_
4 | EMAIL |

e criei uma tabela (tbContato com os campos: CodContato, CodMascara, Contato) onde de acordo com o CodMascara selecionado ele vai formata o compo ´Contato´ para serem exibidos em um DBGrid. Alguém poderia me dar alguma dica de como resolver esse problema?
Grato pela atenção!


Joule

Respostas

11/01/2006

Aerreira

Considerando que as tabelas já estão referenciadas, no evento AfterScroll da tabela tbContato coloque
[b:43a0f4cd9f]tbContatoContato.editmask := tbMascaraMascara.value;[/b:43a0f4cd9f]

Acredito que funcionará bem para seu caso.


Responder Citar

13/01/2006

Joule

Não deu certo, eu consegui +/- um resultado usando a função FormatMaskText + ainda não é o desejado.


Responder Citar

13/01/2006

Dart

Cara da pra vc usa o propriedade do field.

Va na propriedade do field e em editmask e coloca a mascara la.

Entendeu?


Responder Citar

13/01/2006

Aerreira

Dart, ele não pode colocar como uma propriedade fixa, pois ela varia de acordo com o tipo de conteudo do campo, por isso minha dica foi justamente alterar o EditMask lá do campo da tabela, porém sempre que houver uma mudança de registro o editmask seria alterado para o novo valor.


Responder Citar

13/01/2006

Joule

Pessoal consegui chegar perto do resultado usando esse código aqui:

tbMask.Open;
tbcontato.close;
tbcontato.Open;
tbcontato.First;
while not tbcontato.Eof do
begin
tbContato.Edit;
tbmask.Locate(´codmask´,tbContatoCodMask.Value,[lopartialkey,locaseinsensitive]);
if tbMaskCodMask.value=2 then
begin
tbContatoContato.EditMask := tbMaskMask.Value;
tbContatoContato.Value := tbcontatocontato.Value;
showmessage(tbcontatocontato.Value);

(tbmaskmask.Value,tbContatoContato.Value);
end
else
tbContatoContato.Value := FormatMaskText(tbMaskMask.Value,tbContatoContato.Value);

tbContato.post;
tbcontato.Next;


Responder Citar

13/01/2006

Aerreira

Com esse seu código, você está alternado o conteúdo do campo Contato para um conteúdo já com a máscara, e se o usuário for alterar o campo o edit virá com os pontos e não haverá na verdade uma máscara e sim um campo aberto com pontos no meio, podendo alterar livremente.
Além do mais, você terá que rodar esse seu loop de vez em quando para manter os campos com a formatação... está muito estranho isso.

Minha sugestão continua a mesma, inclusive você usou ela no seu código:
tbContatoContato.EditMask := tbMaskMask.Value;


Só que do meu modo, o conteúdo do campo contato continuará limpo, apenas aparecerá a mascara nos grids e nos edits, pois a cada registro que você navegar a rotina AfterScroll rodará ajustando o EditMask do campo Contato. Mas para isso as tabelas precisam estar relacionadas entre si, ou seja, em cada registro da tabela tbContato haverá um CodMascara que estará relacionado à tabela tbMascara por sua chave CodMascara.

Usando IBX, seu select para o IBDataSet para a tabela tbContato deverá ser algo mais ou menos assim:

select * from Contatos where CodMascara = :CodMascara

ligando a propriedade DataSource desse dataset a um DataSource ligado ao DataSet da tabela Mascara. Xiii, meio enrolado... claro, não sei nem qual o seu banco de dados!!!


Responder Citar

13/01/2006

Aerreira

Tenho uma situação num sistema que é mais ou menos igual a este seu caso e funciona. Existem várias tabelas de procedimentos médicos com diversos códigos, porém em cada tabela a formatação dos códigos é diferente.

Exemplos:
AMB / consulta / 00.01.001-4
CBHPM / consulta / 1.01.01.01-4
SUS / insuf.cardíaca / 77.500.11-3

Os códigos acima são armazenados assim:
00010014 - consulta
10101014 - consulta
77500113 - insuf.cardíaca

Em cada tabela as máscaras são armazenadas no campo MascCod assim:
99.99.999-9
9.99.99.99-9
99.999.99-9

Conforme o usuário consulta uma tabela diferente a máscara do campo Tabela do dataset ValCod é alterada usando o código abaixo no AfterScroll do dataset de tbTab:
tbValCodTabela.editmask := trim(tbTabMascCod.value)+´;0;_´;

Acho que essas informações podem lhe ajudar a encontrar um meio de ajustar seu problema.


Responder Citar