Validação em ClientDataSet
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
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
Curtidas 0
Respostas
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
17/03/2006
Thomaz,
Como faria isto dentro do clientdataset? Trabalho com stored procedure para acessar o banco.
Atenciosamente,
Rodolfo
Como faria isto dentro do clientdataset? Trabalho com stored procedure para acessar o banco.
Atenciosamente,
Rodolfo
GOSTEI 0
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
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
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
17/03/2006
vc pode tratar no affterPost do CDS...
GOSTEI 0
Rodolfo.pirolo
17/03/2006
Paull,
Desculpe-me, mas como faço isto? Sou iniciante, não tenho muito conhecimento.
Atenciosamente,
Rodolfo
Desculpe-me, mas como faço isto? Sou iniciante, não tenho muito conhecimento.
Atenciosamente,
Rodolfo
GOSTEI 0
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
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
17/03/2006
Martins e Paull,
O funcionou legal, muito obrigado pela ajuda de voces :!:
Rodolfo
O funcionou legal, muito obrigado pela ajuda de voces :!:
Rodolfo
GOSTEI 0