GARANTIR DESCONTO

Fórum Tratar erros #350904

20/12/2007

0

OLá pessoal, bom gostaria de tratar alguns erros do meu programa com mensagens para os usuários, mas demostrativas, tipo assim:

Tem os campos das tabelas que são não nulos e ai mesmo eu colocando os labels em negrito para que sejam campos obrigátorios a preecher, mesmo assim tem usuários que não preenchem e dá quele erro esquisito, e eles s´sabem ligar falando que tá furado, então sei lá teria como fazer as seguintes funções para tratar os erro tipo assim uma função [b:db4222ce3f]Function TratarErro;[/b:db4222ce3f]

Eu precisária de funções para:

1>Para verificar se todos os campos obrigátorios estão preenchido se não retorna uma mensagem!


Robinhocne

Robinhocne

Responder

Posts

20/12/2007

Micheus

Como vc utiliza edit´s, então uma sugestão seria vc utilizar o evento OnExit para fazer as validações já ao sair do campo.


Responder

Gostei + 0

21/12/2007

Webjoel

Olá!

Nos Fields do ClientDataSet tem um propriedade chamada ´Required´, que diz se o campo é obrigatório ou não, então você poderá criar uma procedure que faça um ´For´ em todos os campos do ClientDataSet, e eles foram Required e estiverem vazios você avisa ao usuário e para o processo com um ´break´. Esta função você pode botar no seu botão gravar, antes de gravar você roda a procedure, se preferir fazer uma função, você terá que passar um Tdataset como parâmetro.


Responder

Gostei + 0

21/12/2007

Robinhocne

Sim eu entendi a lógica para fazer, mas eu não tenho ideia de como fazer uma função!


Responder

Gostei + 0

21/12/2007

Micheus

Nos Fields do ClientDataSet tem um propriedade chamada ´Required´, que diz se o campo é obrigatório ou não, então você poderá criar uma procedure que faça um ´For´ em todos os campos do ClientDataSet, e eles foram Required e estiverem vazios você avisa ao usuário e para o processo com um ´break´. Esta função você pode botar no seu botão gravar, antes de gravar você roda a procedure, se preferir fazer uma função, você terá que passar um Tdataset como parâmetro.

[b:d47144e947]webjoel[/b:d47144e947], seria sem dúvida um boa opção.

Mas o colega [b:d47144e947]robinhcne[/b:d47144e947], utiliza uma abordagem diferente em seu programa:
- faz entradas dos dados em TEdit´s (não em data-aware);
- ao gravar, move estes dados para duas listas: uma com nome de campos e outra com valores;
- a partir destas listas, ele monta a instrução SQL do tipo INSERT, UPDATE ou DELETE e a executa;

Então, não existem fields, no máximo irá obter uma exception ao executar a querie.


Responder

Gostei + 0

21/12/2007

Webjoel

for i := 0 to Pred(ClientDataSet1.Fields.Count) do
begin
if (ClientDataSet1.Fields[i].Required) and (ClientDataSet1.Field[i].IsNull) then
begin
ShowMessage(´Campo: ´ + ClientDataSet1[i].DisplayLabel + ´ precisa ser informado!´);
break;
end;
end;

...você precisar declarar a variavel ´i´ como integer e seria importante você editar a propriedade Displaylabel com o nome do campo.


Responder

Gostei + 0

25/12/2007

Robinhocne

WebJoel, você poderia me explicar melhor?


Responder

Gostei + 0

26/12/2007

Webjoel

Me diga o que você não entendeu ali na procedure...


Responder

Gostei + 0

26/12/2007

Webjoel

//Procedure muito útil, para ser utilizada antes de gravar um cadastro

Procedure ChecarcamposRequeridos(tabela : TDataSet);
var
i : integer;
begin
for i := 0 to Pred(tabela.Fields.Count) do
begin
if (tabela.Fields[i].Required) and (tabela.Field[i].IsNull) then
begin
ShowMessage(´Campo: ´ + tabela[i].DisplayLabel + ´ precisa ser informado!´);
break;
end;
end;

{Seria interessante editar o valor no campo DinplayLabel para melhor aproveitamento da procedure, clicando duas vezes no ClientDataSet, e em seguida no campo, aparece a propriedade DisplayLabel, que deve ser renomeada para o nome do campo.

Ex:

VL_VENDA, ficaria:
Valor da Venda.}


Responder

Gostei + 0

26/12/2007

Robinhocne

O meu problema é que eu não uso ClientDataSet, para a minha conexao eu uso, o IbQuery, IbDataBase e IbTransaction.


Responder

Gostei + 0

26/12/2007

Webjoel

pois eh nesse caso eh soh vc fazer uma adaptacao e em vez de usar o clientdataset na procedure use o que vc trabalha, vc precisa pegar eh a lógica da procedure e adaptar ao seu uso amigo!


Responder

Gostei + 0

26/12/2007

Sérgio Gobbo

Caro amigo robinhocne,

Não sei se entendi o seu problema, você tem um cadastro e o usuário entra com os dados em TEdit´s. Você quer ver se o usuário preencheu todos os campos antes de mandar para o banco de dado.
Se for isso, creio que bastaria você fazer uma verificação mais ou menos assim no botão que irá postar os dados:

if (edit1.text<>´´)then
POSTAR
else
begin
showmessage(´Atenção, você não preencheu os dados obrigatórios!!´);
edit1.setfocus;
end;

Eu sempre utilizo desta maneira.

Até logo..


Responder

Gostei + 0

26/12/2007

Robinhocne

Amigo, quase isso, pois eu quero que uma função checa todos os campos da tabela se ele são [b:e0d0c774f2]não nulos[/b:e0d0c774f2] ai para retornar a mensagem!


Responder

Gostei + 0

27/12/2007

Sérgio Gobbo

Mas e se vc criasse uma função que verificasse todos os campos desta forma? Vendo se eles não estão vazios pelo Text deles?


Responder

Gostei + 0

27/12/2007

Robinhocne

é porque tem alguns campos que não são obrigatorios que são preenchidos ao decorrer do processo!


Responder

Gostei + 0

28/12/2007

Robinhocne

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?


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar