Função genérica para verificar campo obrigatório
Boa tarde, pessoa!!!
Estou querendo fazer uma função genérica que verifica, em um formulário, se determinado campo (DBEdit, DBComboBox, etc) é obrigatório e possui valor.
Comecei fazendo da seguinte forma:
Mas não sei como pegar o nome do campo no ClientDataSet para eu fazer a validação. Se eu passo o índice do componente, não sei qual condição eu tenmho que checar para ele verificar se está fazio ou não. Tipo assim, no meu formulário (FrmEstado), ele encontrou Form.Components = 30. Mas como que eu vou saber o nome do campo do componente 27 (por exemplo é um DBEdit)?
Estou meio enrrolado. Minha lógica não está legal.
Alguém pode me ajudar?
Delphi 7, Firebird....
Obrigado.
Cristiano Mário
Estou querendo fazer uma função genérica que verifica, em um formulário, se determinado campo (DBEdit, DBComboBox, etc) é obrigatório e possui valor.
Comecei fazendo da seguinte forma:
procedure ValidaCamposObrigatorios(Form: TForm; cdsAux: TClientDataSet);
var i: Integer;
begin
for i := 0 to Form.ComponentCount - 1 do
begin
{: DBEdit}
if (Form.Components[i] is TDBEdit) then
begin
if cdsAux.Fields[i].AsString = ´´ then
begin
raise Exception.Create(´Campo de preenchimento obrigatório!´);
Abort;
end;
end;
end;Mas não sei como pegar o nome do campo no ClientDataSet para eu fazer a validação. Se eu passo o índice do componente, não sei qual condição eu tenmho que checar para ele verificar se está fazio ou não. Tipo assim, no meu formulário (FrmEstado), ele encontrou Form.Components = 30. Mas como que eu vou saber o nome do campo do componente 27 (por exemplo é um DBEdit)?
Estou meio enrrolado. Minha lógica não está legal.
Alguém pode me ajudar?
Delphi 7, Firebird....
Obrigado.
Cristiano Mário
Cristianojedi
Curtidas 0
Melhor post
Emerson Nascimento
09/02/2007
creio que a dica do titanius funcione mas, se me permite, eu sugiro uma pequena variação.
dessa forma todos os campos de preenchimento obrigatório, e que estejam vazios, serão informados ao usuário ao mesmo tempo. fica mais elegante do que receber uma mensagem a cada campo deixado em branco.
procedure ValidaCamposObrigatorios(Form: TForm; cdsAux: TClientDataSet); var i: Integer; msg: string; begin msg := ´´; for i := 0 to cdsAux.Fields.Count - 1 do if cdsAux.Fields[i].Required and cdsAux.Fields[i].IsNull then // ou (cdsAux.Fields[i].AsString = ´´) begin if msg <> ´´ then msg := msg + 13 msg := msg + cdsAux.Fields[i].DisplayName; // ou FieldName end; if msg <> ´´ then raise Exception.Create(´Preenchimento obrigatório!´13+msg) end;
dessa forma todos os campos de preenchimento obrigatório, e que estejam vazios, serão informados ao usuário ao mesmo tempo. fica mais elegante do que receber uma mensagem a cada campo deixado em branco.
GOSTEI 1
Mais Respostas
Cristianojedi
08/02/2007
Será que alguém pode me ajudar nisso?
Alguém tem um exemplo pra me mostrar sobre o código que eu estou querendo fazer?
Obrigado.
Cristiano Mário
Alguém tem um exemplo pra me mostrar sobre o código que eu estou querendo fazer?
Obrigado.
Cristiano Mário
GOSTEI 0
Titanius
08/02/2007
Bem, posso tentar te ajudar, segue uma modificação, [b:6332f8b762]não testei no delphi[/b:6332f8b762] pois estou em casa.. ;)
Mude nos Fields do ClientDataSet, os DisplayFields para o texto de exibição.
Como disse nao testei, mas espero que sirva para dar pelo menos uma luz.. :oops:
[]s
procedure ValidaCamposObrigatorios(Form: TForm; cdsAux: TClientDataSet); var i: Integer; begin for i := 0 to cdsAux.Fields.Count - 1 do begin if cdsAux.Fields[i].Value = null then begin raise Exception.Create(´Campo de preenchimento obrigatório!´+13+´Campo.:´+cdsAux.Fields[0].DisplayName); Abort; end; end;
Mude nos Fields do ClientDataSet, os DisplayFields para o texto de exibição.
Como disse nao testei, mas espero que sirva para dar pelo menos uma luz.. :oops:
[]s
GOSTEI 0
Cristianojedi
08/02/2007
Opa!!!
titanius e emerson.en...
Muito obrigado. Funcionou perfeitamente.
Cristiano Mário :D
titanius e emerson.en...
Muito obrigado. Funcionou perfeitamente.
Cristiano Mário :D
GOSTEI 0
Titanius
08/02/2007
creio que a dica do titanius funcione mas, se me permite, eu sugiro uma pequena variação.
Opa... ficou muito mais profissional desta forma! :D Realmente, fica muito cheto o cara ficar recebendo um monte de tela de erro.. hehe...
[]s
GOSTEI 0