Ir para conteúdo
Fórum Script Brasil
  • 0

Função para checar campos obrigatórios da tabela


robinhocne

Pergunta

Olá pessoal preciso fazer uma função dessa maneira:

Acho que uma função resolveria, mas vamos lá.

Eu uso o Delphi 7 e Firebird, e tenho varias tabelas que tem alguns campos que são Não Nulos, mas é o seguinte, tem algumas pessoas que não preenchem todos os campos que são obrigatórios e ai ele dá erro, então queria uma função que verifica se os campos que vão serem salvos na tabela são os campos não nulos e ai mostrar tipo só uma mensagem de Há campos obrigatorios a serem preenchidos.

Para a conexão ao banco de dados eu utilizo uma IbDataBase, IbTransaction e uma IbQuery, alguns acho que já conhece o tipo de conexão eu utilizo.

Achei algumas funcoes e alguns metodos, mas tentei e não deu certo, e estou procurando o forum por já ter me ajudado muito em meu projeto!

Agradeço a colaboração de todos!

Link para o comentário
Compartilhar em outros sites

8 respostass a esta questão

Posts Recomendados

  • 0

Andei pesquisando mais na net e achei uma procedure, e estou tentado mudar para o que o meu programa necessita, mas está dando esse erro aqui:

Missing operator or semicolon

Essa é a procedure:

procedure TFrmCadVeiculos.ValidaCamposObrigatorios;
var
  i: Integer;
  msg: string;
begin
  msg := '';
  for i := 0 to DtmIza.QryIza.Fields.Count - 1 do
    if DtmIza.QryIza.Fields[i].Required and DtmIza.QryIza.Fields[i].IsNull then
    begin
      if msg <> '' then msg := msg + #13
      msg := msg + DtmIza.QryIza.Fields[i].DisplayName;
    end;
  if msg <> '' then
    raise Exception.Create('Preenchimento obrigatório!'#13+msg)
end;

DtmIza é meu DataModule

QryIza é a query que eu faço a conexão no banco de dados.

O erro que está dando é nessa linha de codigo:= msg!aqui!:= msg + DtmIza.QryIza.Fields.DisplayName;

E achei outro aqui no forum mesmo nesseTópico

Mas não entendi essa função, será que ela pode me ajudar tbém?

Editado por robinhocne
Link para o comentário
Compartilhar em outros sites

  • 0
Missing operator or semicolon

Essa é a procedure:

procedure TFrmCadVeiculos.ValidaCamposObrigatorios;
var
  i: Integer;
  msg: string;
begin
  msg := '';
  for i := 0 to DtmIza.QryIza.Fields.Count - 1 do
    if DtmIza.QryIza.Fields[i].Required and DtmIza.QryIza.Fields[i].IsNull then
    begin
      if msg <> '' then msg := msg + #13
      msg := msg + DtmIza.QryIza.Fields[i].DisplayName;
    end;
  if msg <> '' then
    raise Exception.Create('Preenchimento obrigatório!'#13+msg)
end;

robinhocne, basta você olhar com mais atenção que vai ver que a mensagem se refere a falta do ";" na linha anterior.

Este procedimento realmente seria útil, se você estivesse utilizando componentes data-aware ligados ao dataset. Nesta situação, os valores alterados nos DBEdits ficam no buffer deste dataset e antes de você chamar o método Post para gravar os dados no banco, você chamaria este procedimento para validar os valores informados. Apenas se a função não gerasse um raise (tudo ok) é que você chamaria o Post.

Mas, você lê os dados em TEdits (não é data-aware), daí você move os valores dos edits para aquela lista de valores Vvlr (um TStringList) que você irá passar para uma função que montará um SQL de UPDATE ou INSERT, cuminando com o uso do método ExecSQL - não é mesmo?!

Então, pensa bem... Quando é que o seu dataset QryIza terá estes valores, digitados em edits, colocados no seu buffer para ser utilizada esta função?

Eu já havia comentado lá no outro forum que esta solução não vai lhe atender. Mas, se o que eu disse acima estiver errado, então pode tentar implementar e ver no que vai dar.

Esta do outro tópico também é interessante, só que está em VB. Basicamente ela varre todo o form validando os Edits. Acho até que seria a abordagem mais adequada ao seu caso. Mas, como vou estar ausente uns dias, não vou nem começar uma explicação. Espero que outro colega o faça.

Abraços

Link para o comentário
Compartilhar em outros sites

  • 0
Missing operator or semicolon

Essa é a procedure:

procedure TFrmCadVeiculos.ValidaCamposObrigatorios;
var
  i: Integer;
  msg: string;
begin
  msg := '';
  for i := 0 to DtmIza.QryIza.Fields.Count - 1 do
    if DtmIza.QryIza.Fields[i].Required and DtmIza.QryIza.Fields[i].IsNull then
    begin
      if msg <> '' then msg := msg + #13
      msg := msg + DtmIza.QryIza.Fields[i].DisplayName;
    end;
  if msg <> '' then
    raise Exception.Create('Preenchimento obrigatório!'#13+msg)
end;

robinhocne, basta você olhar com mais atenção que vai ver que a mensagem se refere a falta do ";" na linha anterior.

Este procedimento realmente seria útil, se você estivesse utilizando componentes data-aware ligados ao dataset. Nesta situação, os valores alterados nos DBEdits ficam no buffer deste dataset e antes de você chamar o método Post para gravar os dados no banco, você chamaria este procedimento para validar os valores informados. Apenas se a função não gerasse um raise (tudo ok) é que você chamaria o Post.

Mas, você lê os dados em TEdits (não é data-aware), daí você move os valores dos edits para aquela lista de valores Vvlr (um TStringList) que você irá passar para uma função que montará um SQL de UPDATE ou INSERT, cuminando com o uso do método ExecSQL - não é mesmo?!

Então, pensa bem... Quando é que o seu dataset QryIza terá estes valores, digitados em edits, colocados no seu buffer para ser utilizada esta função?

Eu já havia comentado lá no outro forum que esta solução não vai lhe atender. Mas, se o que eu disse acima estiver errado, então pode tentar implementar e ver no que vai dar.

Esta do outro tópico também é interessante, só que está em VB. Basicamente ela varre todo o form validando os Edits. Acho até que seria a abordagem mais adequada ao seu caso. Mas, como vou estar ausente uns dias, não vou nem começar uma explicação. Espero que outro colega o faça.

Abraços

é Micheus voltei a estaca zero do tópico, como eu poderia fazer nesse caso, retirando tudo o que eu postei, será que tem como?

Link para o comentário
Compartilhar em outros sites

  • 0

E se fosse feita uma checagem em cada edit que seja obrigatorio tipo assim, só preciso de ajuda para imprementar!

If Edit1.Text=''; then
ShowMessage ('Campo Obrigatório não preenchido');
else If
If Edit.Text=????????

Esse restante que eu não sei, tipo assim, se o Edit estivesse em branco ele retorna a mensagem ou se ele estiver preenchido não retorna mensagem, e se possivel tiver como fazer uma função ou procedimento pra que não precisa fazer isso em cada edit?

Link para o comentário
Compartilhar em outros sites

  • 0

Faça uma função que recebe o edit como parâmetro. Daí chame esta função, passando o edit.

Lá no outro forum, teve um colega que postou uma mais ou menos assim. Dê uma olhada nela.

Uma vez tendo a procedure/função, você pode opinar entre chamar esta função várias vezes no momento em que você clica no botão gravar, tipo:

ValidaEdit(Edit1);  // suposta função ou procedure
ValidaEdit(Edit2);
ValidaEdit(Edit3);
...
// só aque você grava os dados

ou ao tentar sair do edit (no evento OnExit). O problema neste caso, é que se você por exemplo clicar em outra coisa que não seja o gravar (tipo no cancelar), acabará sendo feita a validação (e estaria errado), mas há meios de contornar isto.

Para não complicar muito, eu sugiriria que você utilizasse a primeira opção - muito mais simples.

Abraços

Link para o comentário
Compartilhar em outros sites

  • 0

Colega eu uso assim:

function CamposObrigatorios : Boolean;
begin
  Erro:= false;
  If (um edit de um campo que é requerido = '') and (not erro)  Then 
  Begin
    Application.Messagebox('Informe ???????.','ATENÇÃO',mb_IconInformation);
    Esse Edit.SetFocus;
    erro:=true;
  End;
  result := not erro;
end;
No evento que salvo os dados testo
if CamposObrigatorios then
  begin
   Condição....

Funciona muito bem.

Editado por Micheus
Adicionado o delimitador de código [code] [/code]. Lembre-se de utilizá-lo para melhor visualização
Link para o comentário
Compartilhar em outros sites

  • 0
Colega eu uso assim:

function CamposObrigatorios : Boolean;
begin
  Erro:= false;
  If (um edit de um campo que é requerido = '') and (not erro)  Then 
  Begin
    Application.Messagebox('Informe ???????.','ATENÇÃO',mb_IconInformation);
    Esse Edit.SetFocus;
    erro:=true;
  End;
  result := not erro;
end;
No evento que salvo os dados testo
if CamposObrigatorios then
  begin
   Condição....
Funciona muito bem.
Bom, andei pesquisando muito e me sugeriram um componente chamado Jedi, ai andei vendo umas videos aulas sobre ele, e nele existe na aba JvValidators, ai usando os componentes JvValidators e JvErrorIndicator para ele fazer uma validação se o campo está em branco ou não ai ele mostra uma imagem de alerta ao lado do edit, bom para quem tem esse componente espero ajuda ou aqueles que o conheçam, pois tenho varios campos que são obrigatorios, ai eu coloquei assim no on Exit de um edit:
JvValidators1.Validate;

Mas tipo ai ele dá o alerta de todos os edits mesmo eu nem chegando nele para preencher, estava olhando, mas será que tem como mostrar que é para ele verficar daquela respectiva propriedade do item(campo) da validaçao o PropertyToValidate.

Será quem tem como?

Link para o comentário
Compartilhar em outros sites

  • 0
Olá pessoal preciso fazer uma função dessa maneira:

Acho que uma função resolveria, mas vamos lá.

Eu uso o Delphi 7 e Firebird, e tenho varias tabelas que tem alguns campos que são Não Nulos, mas é o seguinte, tem algumas pessoas que não preenchem todos os campos que são obrigatórios e ai ele dá erro, então queria uma função que verifica se os campos que vão serem salvos na tabela são os campos não nulos e ai mostrar tipo só uma mensagem de Há campos obrigatorios a serem preenchidos.

Para a conexão ao banco de dados eu utilizo uma IbDataBase, IbTransaction e uma IbQuery, alguns acho que já conhece o tipo de conexão eu utilizo.

Achei algumas funcoes e alguns metodos, mas tentei e não deu certo, e estou procurando o forum por já ter me ajudado muito em meu projeto!

Agradeço a colaboração de todos!

Amigo, eu faço dessa maneira:

// FUNÇÕES CAMPOS OBRIGATÓRIOS -----------------------------------

function CampoObg(campo:string; n:integer): string; //Função para verificar uma string

begin

if n = 1 then if (campo = '') then result := '- Nacionalidade';

if n = 2 then if (campo = '') then result := '- O. Emissor';

if n = 3 then if (campo = '') then result := '- Naturalidade';

if n = 4 then if (campo = '') then result := '- Nome';

if n = 5 then if (campo = '') then result := '- RG';

if n = 6 then if (campo = '') then result := '- CPF';

if n = 7 then if (campo = '') then result := '- Nascimento';

if n = 8 then if (campo = '') then result := '- Emissão';

end;

// -----------------------------------------------------------------------------

function CampoObg2(campo:boolean; n:integer): string; //Funçao para boolean

begin

if n = 1 then if (FRPessoal.DIDigital.Picture.Graphic.Empty) then result := '- Digital';

if n = 2 then if (FRPessoal.DIFoto.Picture.Graphic.Empty) then result := '- Foto';

end;

// -----------------------------------------------------------------------------

function CampoObg3(campo,campo2:string; n:integer): string; // funçao para verificação de 2 campos

begin

if n = 1 then if (campo = '') or (campo2 = '') then result := '- Matricula';

if n = 2 then if (campo = '') and (campo2 = '') then result := '- Pai/Mãe';

end;

Verifica e chama a função assim :

if (DBEdit44.Text='') or (DECpf.Text='') or (DBEdit27.Text='')

or (DeNome.Text='') or (DBLookupComboBox9.Text='')

or (DBLookupComboBox6.Text='') or ((DBEdit30.text='') and (DBEdit31.text=''))

or (DEMatricula.text='') or (DEDigitoMat.text='')

or (DBEdit45.Text='') or (DBEdit35.text='')

or (DIFoto.Picture.Graphic.Empty) or (DIDigital.Picture.Graphic.Empty)

then begin

ShowMessage('Campo(s) obrigatório(s) não preenchido(s):' +#13+

Trim(CampoObg(DBLookupComboBox6.Text,1) +#13+ CampoObg2(DIDigital.Picture.Graphic.Empty,1)) +#13+

Trim(CampoObg(DBLookupComboBox9.Text,2) +#13+ CampoObg2(DIFoto.Picture.Graphic.Empty,2)) +#13+

Trim(CampoObg(DBEdit45.Text,8) +#13+ CampoObg3(DEMatricula.Text, DEDigitoMat.Text,1)) +#13+

Trim(CampoObg(DBEdit35.text,3) +#13+ CampoObg3(DBEdit30.text, DBEdit31.text,2)) +#13+

Trim(CampoObg(DBEdit27.Text,7) +#13+ CampoObg(DBEdit44.Text,5)) +#13+

Trim(CampoObg(DECpf.Text,6) +#13+ CampoObg(DeNome.Text,4)));

Exit;

end;

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,5k
×
×
  • Criar Novo...