problemas com Length

Delphi

22/03/2005

é o seguinte calera estou usando o comando Length no onexit do dbedit so q ele esta contando os caracteres da mascara e na mesma tela fiz o mesmo processo e nao esta contando os caracteres da mascara como q faço para nao contar os caracteries da mascara ????


Valew



Guilherme

Guilherme

Curtidas 0

Respostas

Faelcavalcanti

Faelcavalcanti

22/03/2005

Cara. Fica mais fácil você pegar a partir de uma query acho que de um DBEdit, não têm jeito não. Ah não ser que alguém saiba. Enfim, estou dando apenas minha sugestão!


GOSTEI 0
Guilherme

Guilherme

22/03/2005

mas o q esta estranho é q tem um igualzinho q funciona !!!!


GOSTEI 0
Faelcavalcanti

Faelcavalcanti

22/03/2005

:lol:
Coloca o código.

E também, tipow os dois pra gente fazer uma comparação.


GOSTEI 0
Guilherme

Guilherme

22/03/2005

esse aki funciona
if TBClientePESSOA.Value = ´JURIDICA´ then begin
 if  ((Length(DBEdit3.Text) < 14) or (Length(DBEdit3.Text) > 14)) then begin
 ShowMessage(´Digite Corretamente o CNPJ !´);
 DBEdit3.SetFocus;
 Abort;
End end;
if TBClientePESSOA.Value = ´FISICA´ then begin
 if  ((Length(DBEdit3.Text) < 11) or (Length(DBEdit3.Text) > 11)) then begin
 ShowMessage(´Digite Corretamente o CPF !´);
 DBEdit3.SetFocus;
 Abort;
 end end;
 TBCliente.Edit;
 TBCliente.Post;
end;



esse aki nao
if TBDados_finanAVAL_PESSOA.Value = ´JURIDICA´ then begin
 if  ((Length(DBEdit48.Text) < 14) or (Length(DBEdit48.Text) > 14)) then begin
 ShowMessage(´Digite Corretamente o CNPJ !´);
 DBEdit48.SetFocus;
 Abort;
End end;
if TBDados_finanAVAL_PESSOA.Value = ´FISICA´ then begin
 if  ((Length(DBEdit48.Text) < 11) or (Length(DBEdit48.Text) > 11)) then begin
 ShowMessage(´Digite Corretamente o CPF !´);
 DBEdit48.SetFocus;
 Abort;
 end end;
end;



GOSTEI 0
Marcio.theis

Marcio.theis

22/03/2005

Já tentou rodar por F9 para ver onde pode estar dando o problema? Ou onde esta pulando ?


GOSTEI 0
Guilherme

Guilherme

22/03/2005

o delphi nao esta dando erro !!!!


GOSTEI 0
Faelcavalcanti

Faelcavalcanti

22/03/2005

:shock: :shock: :shock:
Que lokura cara nessa tua máquina!


GOSTEI 0
Marcio.theis

Marcio.theis

22/03/2005

Não é questão de erro, mas sim para ver o que estar acontecendo com os campos, valores, etc...


GOSTEI 0
Guilherme

Guilherme

22/03/2005

como assim /?????


messenger gborges_13@hotmail.com me adicona ai galera !!!


GOSTEI 0
Faelcavalcanti

Faelcavalcanti

22/03/2005

como assim /????? messenger gborges_13@hotmail.com me adicona ai galera !!!


Cara o que o [b:673571b831]taz[/b:673571b831], cujo nick, [b:673571b831]/]/]@t[/b:673571b831] :lol: :lol: ,tá querendo dizer é que você terá que depurar seu código, existem diversas estratégias para depuração, dá uma sacada nestes tópicos sobre [url=http://forum.clubedelphi.net/viewtopic.php?t=54083&highlight=depurar]Como usar o BreakPoint[/url].

Contudo, existem casos como o seu que pode ser uma falha ao valor passado ao componente e/ou coisas do tipo que nos passam desapercebidas e nem sequer notamos. Para ter certeza do que o código está fazendo você deverá inserir vários [b:673571b831]breakpoints[/b:673571b831] no seu código de forma a visualizar em run-time o valor dos parâmetros passados.

:wink:
Falow!


GOSTEI 0
Guilherme

Guilherme

22/03/2005

valew mas o erro era q estava gravando o mascara no banco de dados !!!!


GOSTEI 0
Gandalf.nho

Gandalf.nho

22/03/2005

valew mas o erro era q estava gravando o mascara no banco de dados !!!!


Qual é a máscara que você está usando?


GOSTEI 0
Guilherme

Guilherme

22/03/2005

999.999.999-99;0;



GOSTEI 0
Guilherme

Guilherme

22/03/2005

galera agora nao consigo fazer com q a mascara nao seja gravada no banco de dados !!!! como q faço para q nao grave a mascara no banco de dado ?????


GOSTEI 0
Gandalf.nho

Gandalf.nho

22/03/2005

Estranho, pq o uso de 0 deveria impedir que gravasse os literais da máscara no banco. Você está usando a máscara diretamente na propriedade EditMask do TField ou está formatando via código?


GOSTEI 0
Guilherme

Guilherme

22/03/2005

via codigo tipo assim

begin
if campopessoa =  ´FISICA´ then begin 
tabelacampo.editmask:=´999.999.999-99;0;´
end ;
end;



GOSTEI 0
Guilherme

Guilherme

22/03/2005

deu certo usei essa mascara
999.999.999-99;0;_



GOSTEI 0
Eniorm

Eniorm

22/03/2005

Bom pelo q eu entendi vc quer pegar com o length somente o valor do DBEdit sem os caracteres da mascara, correto?

Na propriedade EditMask, desabilite o checkbox ´Save Literal Characteres´
as mascaras funcionarão como antes, mas somente os caracteres digitados pelo usuário serão armazenados.

Abraços,


GOSTEI 0
Guilherme

Guilherme

22/03/2005

[list=]obrigado pela atençao mas ja resolvi o problema !!!!!!!!!![/list]


GOSTEI 0
Aroldo Zanela

Aroldo Zanela

22/03/2005

[list=]obrigado pela atençao mas ja resolvi o problema !!!!!!!!!![/list]

Colega,

Compartilha a solução para que sirva para outros no futuro. Espero que tenha resolvido bem diferente do caminho utilizado inicialmente, pois o correto, nesta caso, é utilizar um algoritmo de validação de CNPJ ou CPF. No OnValidade ou BeforePost você verifica se comprimento é 11 então verifica o CPF, se comprimento é 14 verifica o CNPJ.


GOSTEI 0
Eniorm

Eniorm

22/03/2005

Eu tenho uma unit com função de validar CPF e CNPJ e funciona perfeitamente, as funções retornam True caso os dados estejam corretos ou False caso errado.

Quem se interessar é só me pedir por email: eniorm@gmail.com

Abraços,


GOSTEI 0
Emerson Nascimento

Emerson Nascimento

22/03/2005

uma dica um pouco fora da questão apresentanda: aumente um pouco a performance das suas aplicações fazendo o mínimo de operações possíveis. no caso de um procedimento ser feito apenas uma vez talvez o ganho não seja grande, mas se for um processo repetitivo dará pra perceber a diferença. uma coisa que eu notei é o fato você de sempre fazer duas comparações ao invés de apenas uma:
if TBDados_finanAVAL_PESSOA.Value = ´JURIDICA´ then begin
  if  ((Length(DBEdit48.Text) < 14) or (Length(DBEdit48.Text) > 14)) then begin
    ShowMessage(´Digite Corretamente o CNPJ !´); 
    DBEdit48.SetFocus; 
    Abort; 
  end
end;
if TBDados_finanAVAL_PESSOA.Value = ´FISICA´ then begin
  if  ((Length(DBEdit48.Text) < 11) or (Length(DBEdit48.Text) > 11)) then begin
    ShowMessage(´Digite Corretamente o CPF !´); 
    DBEdit48.SetFocus; 
    Abort; 
  end
end;


poderia ser simplesmente:
if (TBDados_finanAVAL_PESSOA.Value = ´JURIDICA´) and (Length(DBEdit48.Text) <> 14) then
begin
  ShowMessage(´Digite Corretamente o CNPJ !´); 
  DBEdit48.SetFocus; 
end
else
if (TBDados_finanAVAL_PESSOA.Value = ´FISICA´) and (Length(DBEdit48.Text) <> 11)
begin
  ShowMessage(´Digite Corretamente o CPF !´); 
  DBEdit48.SetFocus; 
end;


essa rotina apenas verifica se a quantidade de caracteres está correta, mas não se o numero de registro é valido. pegue uma dessas rotinas de validação encontradas na internet. se você fizer uma busca aqui mesmo no fórum você encontrará várias...


GOSTEI 0
POSTAR