Formata máscara para exibir em um DBGrid?

11/01/2006

0

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

Joule

Responder

Posts

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

13/01/2006

Joule

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


Responder

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

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

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

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

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

Que tal ter acesso a um e-book gratuito que vai te ajudar muito nesse momento decisivo?

Ver ebook

Recomendado pra quem ainda não iniciou o estudos.

Eu quero
Ver ebook

Recomendado para quem está passando por dificuldades nessa etapa inicial

Eu quero

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar