Como localizar registro para não gravar 2 vezes com Locate..
08/11/2005
0
Aonde estou errando...
Max.jgs
Posts
09/11/2005
Bruno Belchior
09/11/2005
Kotho
procedure TfrmCadSeqProducao.CdsCadSeqProducaoOS_NUMValidate(Sender: TField); var vCdsCadSeqProducao: TClientDataSet; vCdProduto: String; begin inherited; vCdsCadSeqProducao := TClientDataSet.Create(Self); vCdsCadSeqProducao.CloneCursor(CdsCadSeqProducao, False); try if vCdsCadSeqProducao.Locate(´OS_NUM´, Sender.AsString, []) then raise EErro.Create(´OS já digitada!´); finally FreeAndNil(vCdsCadSeqProducao); end; end;
Dessa forma, os dados são os mesmos, tanto se fizer alguma alteração no vCdsCadSeqProducao, irá alterar os dados em CdsCadSeqProducao... mas a posição do cursor é diferente...
01/09/2009
Lenasi
procedure TfrmCadSeqProducao.CdsCadSeqProducaoOS_NUMValidate(Sender: TField); var vCdsCadSeqProducao: TClientDataSet; vCdProduto: String; begin inherited; vCdsCadSeqProducao := TClientDataSet.Create(Self); vCdsCadSeqProducao.CloneCursor(CdsCadSeqProducao, False); try if vCdsCadSeqProducao.Locate(´OS_NUM´, Sender.AsString, []) then raise EErro.Create(´OS já digitada!´); finally FreeAndNil(vCdsCadSeqProducao); end; end;
Olá Amigo,
Sou novo por aqui, e achei seu post na pesquisa, pois é exatamente do que precisava....
Só queria uma ajuda em questão dos códigos.
Poderia me descrever o que faz linha a linha, para que eu entenda mehlor e adapte ao meu sistema?
Muito obrigado.
01/09/2009
Osocram
procedure TfrmCadSeqProducao.CdsCadSeqProducaoOS_NUMValidate(Sender: TField); var vCdsCadSeqProducao: TClientDataSet; vCdProduto: String; begin inherited; //cria o clientDataSet em tempo de execução //troquei o self por nil pois quem vai controlar a destruição dele é vc mesmo, la no finally //vCdsCadSeqProducao := TClientDataSet.Create(self); vCdsCadSeqProducao := TClientDataSet.Create(NIL); //Cria um clone do cursor do ClientDataSet CdsCadSeqProducao vCdsCadSeqProducao.CloneCursor(CdsCadSeqProducao, False); try //não sei se é necessario isso aqui antes do locate, mas ja tive problemas, então eu sempre faço um First antes vCdsCadSeqProducao.first; //aqui ele localiza o registro if vCdsCadSeqProducao.Locate(´OS_NUM´, Sender.AsString, []) then //raise EErro.Create(´OS já digitada!´); //Não acho elegante ficar criando exception a toa. qdo é apenas p notificar o usuario showmessage(´OS já digitada!´); finally //aqui libera o componente criado em tempo de execução FreeAndNil(vCdsCadSeqProducao); end; end;
Acho que ta bem explicado agora.
Bom aprendizado.
01/09/2009
Lenasi
Acho que ta bem explicado agora.
Bom aprendizado.
AMIGO, FANTÁSTICO... PARABÉNS!!!
ÓTIMA EXPLICAÇÃO....
ESTÁ FUNCIONANDO PERFEITAMENTE...
UMA DÚVIDA:
COM RELAÇÃO AO BANCO, PRECISO FAZER ALGO PARA ESTAR UTILIZANDO O LOCATE? APESAR DE ESTAR FUNCIONANDO...
ME LEMBRO VAGAMENTE DE ALGUMA COISA, TIPO CRIAR, UNIQUES. É ISSO? PRECISA MESMO?
01/09/2009
Osocram
Acho que o unico problema é q ele não é incremental.
AMIGO, FANTÁSTICO... PARABÉNS!!!
ÓTIMA EXPLICAÇÃO....
ESTÁ FUNCIONANDO PERFEITAMENTE...
UMA DÚVIDA:
COM RELAÇÃO AO BANCO, PRECISO FAZER ALGO PARA ESTAR UTILIZANDO O LOCATE? APESAR DE ESTAR FUNCIONANDO...
ME LEMBRO VAGAMENTE DE ALGUMA COISA, TIPO CRIAR, UNIQUES. É ISSO? PRECISA MESMO?