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

(Resolvido) Como Impedir o Post se o DBEdit estiver Vazio?


Felipe Gomes

Pergunta

4 respostass a esta questão

Posts Recomendados

  • 0

Há várias possibilidades:

- Marcar, no field, a propriedade Required = True;

- Antes do de chamar Post, testar se os respectivos campos estão, ou não, vazios;

- No evento BeforePost do dataset, testar se os respectivos campos estão, ou não, vazios. Se estiver você chama o procedimento Abort;

- No evento OnExit do componente, testar se o seu conteúdo foi, ou não, informado; Se não foi, mostra mensagem e mantém o foco nele;

- ...

... e por aí vai.

Abraços

Link para o comentário
Compartilhar em outros sites

  • 0
Poderia me dar um exemplo de uma das opções?
vamos tentar...

- Marcar, no field, a propriedade Required = True;

Esta não há o que exemplificar - apenas altere a propriedade citada

- Antes do de chamar Post, testar se os respectivos campos estão, ou não, vazios;

procedure TForm1.BtnGravaClick(Sender :TObject);
begin
  if DatasetCAMPO.IsNull then  // campo do dataset ligado ao DBEdit
  begin
    DatasetCAMPO.FocusControl;
    ShowMessage('Deve ser informado ... ');
    Exit;
  end;
  ...
  Dataset.Post;
end;
- No evento BeforePost do dataset, testar se os respectivos campos estão, ou não, vazios. Se estiver você chama o procedimento Abort;
procedure TDatamodule.DatasetBeforePost(DataSet: TDataSet);
begin
  if Dataset.FieldByName('CAMPO').IsNull then
  begin
    Dataset.FieldByName('CAMPO').FocusControl; // pode ser usado se o componente não estiver oculto
    ShowMessage('Deve ser informado ... ');
    Abort;
  end;
end;
ou, sem usar o conjunto ShowMessage e Abort - usando o Raise:
procedure TDatamodule.DatasetBeforePost(DataSet: TDataSet);
begin
  if Dataset.FieldByName('CAMPO').IsNull then
  begin
    Dataset.FieldByName('CAMPO').FocusControl; // pode ser usado se o componente não estiver oculto
    Raise Exception.Create('Deve ser informado ... ');
  end;
end;
- No evento OnExit do componente, testar se o seu conteúdo foi, ou não, informado; Se não foi, mostra mensagem e mantém o foco nele;
procedure TForm1.DBEdit1Exit(Sender :TObject);
begin
  if Dataset.FieldByName('CAMPO').IsNull then  // campo do dataset ligado ao DBEdit
//  ou
//  if DatasetCAMPO.IsNull then  // campo do dataset ligado ao DBEdit
//  if Trim(DBEdit1.Text) = '' then  // eu prefiro um dos acima
    begin
      ShowMessage('Deve ser informado ... ');
      DBEdit1.SetFocus;
    end;
end;
Procure testá-los e ver o que é conveniente ou não no seu caso. É um bom hábito tentar padronizar o método, entretanto, nada impede que você os combine. Observar que ao usar o evento OnExit, é conveniente você testar o componente que recebeu o foco (ActiveControl), pois caso você tenha um botão para a opção cancelar gravação e ele seja pressionado não há porque fazer a validação:
begin
  if ActiveControl = btnCancelar then
    Exit;
  if .... // continua com a validação
  ...
end;

Abraços

Link para o comentário
Compartilhar em outros sites

  • 0

Nossa! Que aula!

Você me abasteceu de assunto para estudar e praticar por um bom tempo.

E como você falou, devo examinar cada exemplo. Procurarei entendê-los também, pois creio que isso irá exercitar a minha lógica.

Grato pela disponibilidade e atenção!

Valeu Micheus!

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,2k
    • Posts
      651,9k
×
×
  • Criar Novo...