Validar DBText com mascara na tabela quando pressionado o Botão Post do DBNavigator
01/04/2013
0
Dei 2 cliques no componente Table e coloquei mascara no campo cpf diretamente na tabela.
Estou usando DBNavigator em vez de botões.
Meu campo no MySQL para cpf é modo tipo char com 14 (11 mais a mascara) caracteres.
Agora, preciso validar o DBEditcpf quanto à:
A) Se tem todos os dígitos.
B) Se não esta vazio. (aqui eu acho impossível pois, no pior das hipóteses, haverá a mascara)
C) Se contem somente a mascara.
Mas quando clico no post do DBNavigator com, por exemplo, sem entrar com valor algum no DBText(cpf) já da erro (exceção) antes mesmo de entrar na parte de validação.
Como resolver esse problema?
Este é o código que estou usando:
procedure TfrmClientes.DBNClientesClick(Sender: TObject; Button: TNavigateBtn); begin if Button=nbpost then begin ShowMessage(DBEcpf.Text); DMAlugueis.ZQClientes.Close; DMAlugueis.ZQClientes.Sql.Clear; DMAlugueis.ZQClientes.SQL.Add('Select cpf from clientes where cpf = '+''''+DBEcpf.Text+''''+''); DMAlugueis.ZQClientes.Open; if DMAlugueis.ZQClientes.State in [dsInsert] then begin if not DMAlugueis.ZQClientes.IsEmpty then //já existe cadastro begin ShowMessage ('Já existe Cadastro com este CPF. Pesquise!'); DBEcpf.SetFocus; Abort; end; end; if DMAlugueis.ZQClientes.State in [dsEdit] then begin if DBEcpf.Text <> DMAlugueis.ZTClientescpf.OldValue then begin if not DMAlugueis.ZQClientes.IsEmpty then //já existe cadastro begin ShowMessage ('Já existe Cadastro com este CPF/CNPJ. Pesquise!'); DBEcpf.SetFocus; // posiciona o cursor Abort; end else begin ShowMessage ('Alteração efetuada com sucesso!'); end; end; end; end; end;
Carlos Rocha
Posts
01/04/2013
Rafael Cunha
01/04/2013
Carlos Rocha
Já coloquei na clausula uses dele messages.
E as tabelas estão no Datamodule.,
Terei que passar as tabelas para os forms ou tem outro recurso?
01/04/2013
Carlos Rocha
Tentei usar como você disse mas dá o erro mesmo assim;
procedure TfrmClientes.ZTClientesBeforePost(DataSet: TDataSet); begin ShowMessage(frmClientes.DBEcpf.Text); ZQClientes.Close; ZQClientes.Sql.Clear; ZQClientes.SQL.Add('Select cpf from clientes where cpf = '+''''+frmClientes.DBEcpf.Text+''''+''); ZQClientes.Open; if ZQClientes.State in [dsInsert] then begin if not ZQClientes.IsEmpty then //já existe cadastro begin ShowMessage ('Já existe Cadastro com este CPF. Pesquise!'); frmClientes.DBEcpf.SetFocus; Abort; end; end; if ZQClientes.State in [dsEdit] then begin if frmClientes.DBEcpf.Text <> ZTClientescpf.OldValue then begin if not ZQClientes.IsEmpty then //já existe cadastro begin ShowMessage ('Já existe Cadastro com este CPF/CNPJ. Pesquise!'); frmClientes.DBEcpf.SetFocus; // posiciona o cursor Abort; end else begin ShowMessage ('Alteração efetuada com sucesso!'); end; end; end; end;
Nem chega na validação
01/04/2013
Carlos Rocha
Agora estou com o seguinte problema aqui:
tenho o DBText que traz os 11 dígitos de um cpf e mais a mascara que é igual a 14
E entrego esse valor à uma variável string.
Daí, eu retiro os caracters da máscara(.,(,),-....) e pego só o que foi digitado.
Se eu pegar o tamanho da variável com lenght, só retorna 11.
Se eu pegar o tamanho da variável com SizeOf, só retorna 4.
Qualquer que seja o tamanho da string
alter_cpf:= StringReplace(DBEcpf.Text,'.','',[rfReplaceAll, rfIgnoreCase]); alter_cpf:= StringReplace(alter_cpf,'-','',[rfReplaceAll, rfIgnoreCase]); ShowMessage(alter_cpf); ShowMessage(IntToStr(SizeOf(alter_cpf))); //retorna 11 ShowMessage(IntToStr(SizeOf(alter_cpf))); //retorna 4
Como resolver isso?
01/04/2013
Carlos Rocha
//DBEcpf.Text retorna '123.45_.___,__' os __ são da mascara // tiro a mascara e entrego apenas o valor para a variável alter_cpf alter_cpf:= StringReplace(DBEcpf.Text,'.','',[rfReplaceAll, rfIgnoreCase]); alter_cpf:= StringReplace(alter_cpf,'-','',[rfReplaceAll, rfIgnoreCase]); ShowMessage(alter_cpf); retorna '12345' ShowMessage(IntToStr(length(alter_cpf))); //retorna 11 ShowMessage(IntToStr(SizeOf(alter_cpf))); //retorna 4
Esse é o problema.
Postei e novo aqui pois não achei uma forma de editar o tópico.
01/04/2013
Rafael Cunha
01/04/2013
Carlos Rocha
Outra coisa: 000 não barra campo vazio? como valida?
E do jeito que esta. tem saída?
01/04/2013
Rafael Cunha
01/04/2013
Rafael Cunha
01/04/2013
Carlos Rocha
Mas continuo não conseguindo validar se o dbedit foi ou não validado corretamente.
Clique aqui para fazer login e interagir na Comunidade :)