Campo obrigatório, preencher antes de salvar ou quando sair do campo.

Delphi

Firebird

28/11/2014

Boa noite pessoal.
Minha duvida é a seguinte. Estou querendo fazer com que, quando eu clicar no botao salvar ela faça uma varedura nos campos obrigatorios que estão em branco.
Abaixo segue umas fotos de como esta o projeto e o problema que ta dando quando eu mando executar o meu projeto.

[img:descricao=Imagem 01]http://arquivo.devmedia.com.br/forum/imagem/383412-20141128-202720.jpg[/img]
Na imagem 01, os campos circulados de vermelho são os campos obrigatórios.

[img:descricao=imagem 02]http://arquivo.devmedia.com.br/forum/imagem/383412-20141128-204814.jpg[/img]
Na imagem 02, segue o comando

[img:descricao=imagem 03]http://arquivo.devmedia.com.br/forum/imagem/383412-20141128-205159.jpg[/img]
Na imagem 03, exemplo começando a ser preenchido. Propositalmente deixei o campo Cliente sem preenchimento. Nesse momento vou clicar no botão GRAVAR.

[img:descricao=imagem 04]http://arquivo.devmedia.com.br/forum/imagem/383412-20141128-205451.jpg[/img]
Na imagem 04, da essa mensagem de erro

[img:descricao=imagem 05]http://arquivo.devmedia.com.br/forum/imagem/383412-20141128-212249.jpg[/img]
Na imagem 05, a opção Required esta desmarcada (esse campo é not null).

Peço a ajuda de vocês para solucionar esse problema... creio que esteja meio caminho andado.
Rubens Pena

Rubens Pena

Curtidas 0

Melhor post

Rafael Souza

Rafael Souza

28/11/2014

[img]http://arquivo.devmedia.com.br/forum/imagem/264793-20141128-221150.png[/img]


unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    edt1: TEdit;
    edt2: TEdit;
    lbl1: TLabel;
    lbl2: TLabel;
    btn1: TButton;

    function ValidaCampos():Boolean;
    procedure btn1Click(Sender: TObject);

  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

{ TForm1 }

{ TForm1 }

function TForm1.ValidaCampos: Boolean;
begin

   if (edt1.Text = '') or (edt2.Text = '') then
     Result := False
   else
    Result := True;

end;

procedure TForm1.btn1Click(Sender: TObject);
begin
   if ValidaCampos then
     Application.MessageBox('Confirmado!','Aviso', MB_ICONINFORMATION)
   else
    Application.MessageBox('Erro!','Aviso', MB_ICONINFORMATION);

end;

end.


GOSTEI 1

Mais Respostas

Rafael Souza

Rafael Souza

28/11/2014

Só uma pergunta:

Este campo é obrigatório no banco?
GOSTEI 0
Rubens Pena

Rubens Pena

28/11/2014

sim, esta como varchar (xx) not null.
Os campos que estão circulados de vermelho na imagem 01 estão como obrigatórios no banco.
GOSTEI 0
Rafael Souza

Rafael Souza

28/11/2014

Ai esta teu erro!
Você precisa validar este campo no teu sistema também.
Essa mensagem de erro vem do banco! sacou?

Tudo que for obrigatório no banco tu deve marcar como requerido e validar no teu sistema!
GOSTEI 0
Rubens Pena

Rubens Pena

28/11/2014

Rafael eu nao compreendi onde eu devo validar o campo no meu sistema
Criei um raidCall se voce tiver como entra 10046124
GOSTEI 0
Rafael Souza

Rafael Souza

28/11/2014

Oque é raidCall ?
GOSTEI 0
Rubens Pena

Rubens Pena

28/11/2014

é o mesmo que o skip so que mais leve. mais se der pra você me ensinar como eu devo proceder por aqui.
GOSTEI 0
Rafael Souza

Rafael Souza

28/11/2014

Vamos lá:

Vamos partir do principio que você esta começando agora com Delphi certo?
GOSTEI 0
Rubens Pena

Rubens Pena

28/11/2014

sim, terminei um curso recentemente mais o professor não sabia ensinar, tirava as duvidas deixando mais duvidas ainda.
GOSTEI 0
Rafael Souza

Rafael Souza

28/11/2014

O teu sistema tem que ser um espelho do banco de dados pois as informações do teu sistema, ou seja tudo que for digitado e estiver ligado a uma tabela vai ser persistido no banco de dados.

Então você precisa deixar teu código mapeado para tratar todos erros e excessões .

Exemplo do seu caso:

crie uma função booleana que vai retornar true se os campos obrigatórios forem preechidos, caso contrário retornará false!

vou escrever pra você um exemplo...
GOSTEI 0
Rubens Pena

Rubens Pena

28/11/2014

me faz esse exemplo em cima desses dados:

CREATE TABLE "CLIENTE"
(
"CLIENTECODIGO" INTEGER NOT NULL,
"CLIENTENOME" VARCHAR(50) NOT NULL,
"CLIENTESEXO" CHAR(2),
"CLIENTEESTADOCIVIL" VARCHAR(10),
"CLIENTEESCOLARIDADE" VARCHAR(30),
"CLIENTENOMEMAE" VARCHAR(50),
"CLIENTEDEPENDENTES" CHAR(2),
"CLIENTENUMDEPENDENTES" CHAR(2),
"CLIENTENUMERO" VARCHAR(10) NOT NULL,
"CLIENTEBAIRRO" INTEGER NOT NULL,
"CLIENTECIDADE" INTEGER NOT NULL,
"CLIENTECEP" VARCHAR(10),
"CLIENTECOMPLEMENTO" VARCHAR(20),
"CLIENTEDATANASC" TIMESTAMP NOT NULL,
"CLIENTECPF" VARCHAR(14),
"CLIENTERG" VARCHAR(20),
"CLIENTEDATACAD" TIMESTAMP NOT NULL,
"CLIENTEFONERES" VARCHAR(14),
"CLIENTEFONECOM" VARCHAR(14),
"CLIENTEFONECEL" VARCHAR(14),
"CLIENTEOBS" VARCHAR(50),
"CLIENTEEMAIL" VARCHAR(50),
"CLIENTEFOTO" VARCHAR(80),
"CLIENTEUF" VARCHAR(2),
"CLIENTEENDERECO" VARCHAR(45) NOT NULL,
CONSTRAINT "CLIENTE_PK" PRIMARY KEY ("CLIENTECODIGO")
GOSTEI 0
Rafael Souza

Rafael Souza

28/11/2014

Entendeu?
GOSTEI 0
Rubens Pena

Rubens Pena

28/11/2014

voce nao que fazer um acesso remoto pra me explicar melhor
GOSTEI 0
Rafael Souza

Rafael Souza

28/11/2014

pode ser tem skype?
GOSTEI 0
Rubens Pena

Rubens Pena

28/11/2014

consegui fazer o processo, assim:

selecionei o campo, DBEdit5 (campo cliente) no evento OnExit
procedure TfrmCadastroClientes.DBEdit5Exit(Sender: TObject);
begin
   if DBEdit5.Text = '' then
   BEGIN
     Application.MessageBox('Campo Cliente Obrigatorio.','AVISO',MB_ICONINFORMATION);
     DBEdit5.SetFocus;
   END;


Mais o que eu quero mesmo e quando eu clicar no botao Gravar.

meu skip e RPena. (tem um ponto)
GOSTEI 0
Rafael Souza

Rafael Souza

28/11/2014

teamveawer?
GOSTEI 0
Rafael Souza

Rafael Souza

28/11/2014

passa o teamveaver que faço para vc!
GOSTEI 0
Rubens Pena

Rubens Pena

28/11/2014

vou instalar aki o teamveaver só um minut
GOSTEI 0
Rubens Pena

Rubens Pena

28/11/2014

228 778 131
4484
GOSTEI 0
Rubens Pena

Rubens Pena

28/11/2014

Obrigado Rafael, pela força, seus ensinamentos foram proveitosos, esta dando certo o que me ensinou.

O tópico pode ser encerrado.
GOSTEI 0
Rafael Souza

Rafael Souza

28/11/2014

Chame sempre que precisar!
GOSTEI 0
Felippe Tadeu

Felippe Tadeu

28/11/2014

Boa noite/madruga.

Você também poderia fazer algo que fosse implementado apenas uma vez.

Você poderia implementar uma rotina que verificasse todos os campos db da tua tela e que verificasse se esse campo fosse obrigatório no teu componente de BD.

Por exemplo, vc faria um for para verificar todos os componentes, verificaria se ele era um db da vida (TDBEdit, TDBMemo, etc..) e caso fosse vc faria um for para achar esse campo no componente de BD (TADOQuery por exemplo) e verificaria se ele está com a propriedade Required setada como True, se tivesse vc verificaria se o campo está vazio ou não.

Tenho isso implementado num TForm ancestral meu, assim eu implementei apenas uma vez, aí conforme vai sendo a necessidade eu vou adicionando novos componentes nessa verificação.
GOSTEI 0
Jiraya San

Jiraya San

28/11/2014

Olá bom dia, teria como postar o código desta solução para a mim e os demais que tiverem as mesmas dúvidas?
Desde já agradeço.
GOSTEI 0
Felippe Tadeu

Felippe Tadeu

28/11/2014

Jiraya você tem alguma dúvida na implementação ?

Coloquei a lógica de como deve ser feito, ficou confusa alguma parte ?
GOSTEI 0
POSTAR