Validação em ClientDataSet

Delphi

17/03/2006

Tenho um dbgrid+datasource+clientdataset para receber os possíveis endereços dos meus clientes, até ai foi bem. Porém preciso validar se não há dois tipos de endereços iguais.

Para pegar o tipo de endereço, utilizo um lookup com os tipos possíveis.

Pensei em fazer com arrays, mas acho que não é a melhor solução.

Tem como fazer isto no momento da digitação ou na hora de gravar?

Atenciosamente,

Rodolfo


Rodolfo.pirolo

Rodolfo.pirolo

Curtidas 0

Respostas

Thomaz_prg

Thomaz_prg

17/03/2006

Uma forma bem simples é criar um índice único (Unique) com os campos chaves. Isso evitaria a duplicação.


GOSTEI 0
Rodolfo.pirolo

Rodolfo.pirolo

17/03/2006

Thomaz,

Como faria isto dentro do clientdataset? Trabalho com stored procedure para acessar o banco.

Atenciosamente,

Rodolfo


GOSTEI 0
Martins

Martins

17/03/2006

Thomaz, Como faria isto dentro do clientdataset? Trabalho com stored procedure para acessar o banco. Atenciosamente, Rodolfo


Vc está usando cds, então clique na propriedade IndexDefs do cds, crie um indice á em Options e marque [b:a442e59304]Unique[/b:a442e59304], em Field ponha o campo q vc quer q seja o indice, é básicamente isso, estou sem o Delphi instalado aqui, pois estou no Cyber.

Qualquer coisa posta aqui novamente.


GOSTEI 0
Rodolfo.pirolo

Rodolfo.pirolo

17/03/2006

Martins,

Funcionou em partes, só que dá mensagem de ´Key violation´, quando vou sair do registro.

Em qual evento do dbgrid posso tratar este erro?

Atenciosamente,

Rodolfo


GOSTEI 0
Paullsoftware

Paullsoftware

17/03/2006

vc pode tratar no affterPost do CDS...


GOSTEI 0
Rodolfo.pirolo

Rodolfo.pirolo

17/03/2006

Paull,

Desculpe-me, mas como faço isto? Sou iniciante, não tenho muito conhecimento.

Atenciosamente,

Rodolfo


GOSTEI 0
Martins

Martins

17/03/2006

Paull, Desculpe-me, mas como faço isto? Sou iniciante, não tenho muito conhecimento. Atenciosamente, Rodolfo


No Cds tem um Evento Chamado [b:1aeb933701]AfterPost[/b:1aeb933701]

Mas nesse caso para tratar melhor esse erro no cds, podemos utilizar o evento [b:1aeb933701]OnPostError[/b:1aeb933701], escrevendo o seguinde código.

var 
  Emsg :String;
begin 
  Emsg := E.Message; 
    if Emsg = ´Key violation.´ then
       begin
          ShowMessage( ´Já existe um registro com essa informação! ´ ); 
          action := daAbort; 
          Cds.CancelUpdates;
       end;
end;


Teste esse código e depois post aqui o resultado por favor.

Boa sorte!!!!


GOSTEI 0
Paullsoftware

Paullsoftware

17/03/2006

[quote:adf310954c=´rodolfo.pirolo´]Paull, Desculpe-me, mas como faço isto? Sou iniciante, não tenho muito conhecimento. Atenciosamente, Rodolfo


No Cds tem um Evento Chamado [b:adf310954c]AfterPost[/b:adf310954c]

Mas nesse caso para tratar melhor esse erro no cds, podemos utilizar o evento [b:adf310954c]OnPostError[/b:adf310954c], escrevendo o seguinde código.

var 
  Emsg :String;
begin 
  Emsg := E.Message; 
    if Emsg = ´Key violation.´ then
       begin
          ShowMessage( ´Já existe um registro com essa informação! ´ ); 
          action := daAbort; 
          Cds.CancelUpdates;
       end;
end;


Teste esse código e depois post aqui o resultado por favor.

Boa sorte!!!![/quote:adf310954c]

[b:adf310954c]valeu Martins![/b:adf310954c]...
mais complementando, a mensagem é informada certo? e como fazemos para focar o controle com a informação incorreta, no caso de termos mais de um campo com o valor [b:adf310954c]Unique[/b:adf310954c]??


GOSTEI 0
Rodolfo.pirolo

Rodolfo.pirolo

17/03/2006

Martins e Paull,

O funcionou legal, muito obrigado pela ajuda de voces :!:

Rodolfo


GOSTEI 0
POSTAR