função não executa

Delphi

12/03/2013

Amigos,
Uso uma biblioteca de funções e na mesma existe a função RemoveAlfa(Retirar caracteres que não sejam numéricos), ao debugar vejo que a mesma não é executada, veja o código:

procedure TFrmCadAluno.BtnSalvarClick(Sender: TObject);
begin
(*só irá cadastrar o Aluno quando for inserção *)
If TForm(self).tag = 0 then
IBQryAlunoEscola.AsString := sEscola;

If not Mensagem('Deseja Gravar o Aluno?') then
Exit;

RemoveAlfa( dbEdtCPF.text );

if not TestaCPF( dbEdtCPF.text ) then
begin
ShowMessage('CPF do Aluno Inválido, Verifique e Tente Novamante!');
PcAluno.ActivePageIndex := 1;
dbEdtCPF.SetFocus;
Exit;
end;

IBQryAluno.Post;
end,
Osmar

Osmar

Curtidas 0

Respostas

Daniel Santos

Daniel Santos

12/03/2013

Bom, pelo jeito seu Mensagem esta retornando false direto, por isso nem desce!

Eu começaria por ai!
GOSTEI 0
Perivaldo Martins

Perivaldo Martins

12/03/2013

Amigos,
Uso uma biblioteca de funções e na mesma existe a função RemoveAlfa(Retirar caracteres que não sejam numéricos), ao debugar vejo que a mesma não é executada, veja o código:

procedure TFrmCadAluno.BtnSalvarClick(Sender: TObject);
begin
(*só irá cadastrar o Aluno quando for inserção *)
If TForm(self).tag = 0 then
IBQryAlunoEscola.AsString := sEscola;

If not Mensagem('Deseja Gravar o Aluno?') then
Exit;

RemoveAlfa( dbEdtCPF.text );

if not TestaCPF( dbEdtCPF.text ) then
begin
ShowMessage('CPF do Aluno Inválido, Verifique e Tente Novamante!');
PcAluno.ActivePageIndex := 1;
dbEdtCPF.SetFocus;
Exit;
end;

IBQryAluno.Post;
end,


dbEditCPF.text:= RemoveAlfa( dbEdtCPF.text );

O colega já tentou assim?

Veja se funciona.

Boa sorte e bons códigos!
GOSTEI 0
Francisco Macário

Francisco Macário

12/03/2013

Olá.

Bem colocado a reposta acima.

Para usar RemoveAlfa( dbEdtCPF.text ) dessa forma, você deverá criar como procedimento e não função.

E na construção do procedimento use RemoveAlfa(var s:string);

At.
GOSTEI 0
Osmar

Osmar

12/03/2013

Amigos,
Agradeço a ajuda de todos.

Martins testei sua dica e não funcionou, então percebi que a função só funciona com edit, mas estou usando dbedit e passo para o dbedit conforme o código abaixo, pergunto se os amigos não tem uma função que possa funcionar neste caso.

procedure TFrmCadAluno.FormCreate(Sender: TObject);
begin
dbEdtCPF.Field.EditMask:= '000-000-000-00;1;_';
end,
GOSTEI 0
Francisco Macário

Francisco Macário

12/03/2013

Passe o retorno da função direto para campo no DATASET (se estiver em modo de edição).

MeuDataSet.fieldByName('Campo').asString := RemoveAlpha(dbeditCPF.text);

At.
GOSTEI 0
Osmar

Osmar

12/03/2013

Macário,
Não sei se você observou, mas no primeiro código que postei preciso retirar os caracteres não numéricos para depois fazer o teste do CPF.
GOSTEI 0
Francisco Macário

Francisco Macário

12/03/2013

Macário,
Não sei se você observou, mas no primeiro código que postei preciso retirar os caracteres não numéricos para depois fazer o teste do CPF.


Uma questão, é, você salva a informação formatada?

Se você guarda a informação formatada, faça a chamada de RemoveAlpha dentro da TestarCPF fazendo uso de variáveis internas.


GOSTEI 0
Osmar

Osmar

12/03/2013

Macário,
Não entendi bem, daria para você fazer o código?
GOSTEI 0
Osmar

Osmar

12/03/2013

Macário,
Eu estou tentando salvar apenas os números.
GOSTEI 0
Osmar

Osmar

12/03/2013

Macário,
Eu estou tentando salvar apenas os números.


esta é a função que uso.

function RemoveAlfa(Texto: string): string;
var iCont : Integer;
sTexto: string;
begin
sTexto := '';
for iCont := 1 to Length( Texto ) do
begin
if Texto[iCont] in ['0'..'9'] then
sTexto := sTexto + Texto[iCont];
end;
Result := sTexto;
end;
GOSTEI 0
Osmar

Osmar

12/03/2013

Amigos,

Descobri que várias funções que encontrei na net funcionam desde que retire a máscara que estou passando para o dbedit:

procedure TFrmCadAluno.FormCreate(Sender: TObject);
begin
dbEdtCPF.Field.EditMask:= '000-000-000-00;1;_';
end,

GOSTEI 0
Perivaldo Martins

Perivaldo Martins

12/03/2013

Amigos,

Descobri que várias funções que encontrei na net funcionam desde que retire a máscara que estou passando para o dbedit:

procedure TFrmCadAluno.FormCreate(Sender: TObject);
begin
dbEdtCPF.Field.EditMask:= '000-000-000-00;1;_';
end,



Foi lhe perguntado se você salva o CPF formatado no banco, não lembro de se você respondeu, mas independente disso, você poderia usar uma váriável para resolver seu problema.

Suponhamos que seu código de validação do campo CPF esteja no OnExit do DBEdit formatado com a mascara.
procedure TFrmXXX.DBEdtCPFExit(Sender: TObject);
var
  CPF: String;
begin
  CPF := RemoveAlpha(DBEdtCPF.Text);
  if ValidaCPF(CPF) then
     ShowMessage('CPF válido!')
  else
     ShowMessage('O CPF informado '+ CPF +' é inválido! Tente novamente.');
end;



Boa sorte e bons códigos!
GOSTEI 0
Osmar

Osmar

12/03/2013

Beleza Martins, agora funcionou, veja como ficou:

CPF := RemoveAlfa(DBEdtCPF.Text);
if not TestaCPF(CPF) then
begin
ShowMessage('O CPF informado '+ CPF +' é inválido! Verifique e Tente novamente!');
PcAluno.ActivePageIndex := 1;
dbEdtCPF.SetFocus;
exit;
end;
GOSTEI 0
Osmar

Osmar

12/03/2013

Beleza Martins, agora funcionou, veja como ficou:

CPF := RemoveAlfa(DBEdtCPF.Text);
if not TestaCPF(CPF) then
begin
ShowMessage('O CPF informado '+ CPF +' é inválido! Verifique e Tente novamente!');
PcAluno.ActivePageIndex := 1;
dbEdtCPF.SetFocus;
exit;
end;


Gostaria de agradecer a todos que tentaram ajudar e que DEUS os abençoe.
GOSTEI 0
Perivaldo Martins

Perivaldo Martins

12/03/2013

Beleza Martins, agora funcionou, veja como ficou:

CPF := RemoveAlfa(DBEdtCPF.Text);
if not TestaCPF(CPF) then
begin
ShowMessage('O CPF informado '+ CPF +' é inválido! Verifique e Tente novamente!');
PcAluno.ActivePageIndex := 1;
dbEdtCPF.SetFocus;
exit;
end;


Gostaria de agradecer a todos que tentaram ajudar e que DEUS os abençoe.


Obrigado pelo feedback, para nós que somos usuários do fórum, tanto os mais recentes quanto os veteranos (2003 - fórum antigo) é sempre um prazer poder ajudar.

Boa sorte e bons códigos!
GOSTEI 0
Francisco Macário

Francisco Macário

12/03/2013

Amém.

E sucesso Osmar.
GOSTEI 0
POSTAR