ClientDataSet Triggers Atualização automática?

Delphi

09/09/2005

Boa noite,

Criei um Triggers no meu sistema q gera o id de uma tabela, qdo testo no banco de dados está tdo funcionando as 1000 maravilhas, só que qdo levei isso no delphi eu dei um insert no cliente dataset deixo o cliente digitar todos os dados menos o id e qdo mando gravar o delphi me retorna erro dizendo q o campo id devi ter um valor. o estranho q ele não deixou a Triggers gerar o ID, pra resolver isso eu fiz o seguinte no evendo beforepost coloquei o ID := 0; assim ele executa a Triggers e gera o código blz. soh q tem um problema ele não ta atualizando o registro na tela.. na tela ele mostra como se o id ainda fosse 0.
uma vez eu li aki e tem jeito de se alguem atualizar um registro na tabela e esse registro estiver no clientdataset ele atualiza automaticamente, alguem sabe me dizer como faz isso. pois acho q isso já resolveria o meu problema com id e outro q viram a acontecer.

sem mais p/ o momento,
desde já agradeço,
bruno eduardo


Brunosh3

Brunosh3

Curtidas 0

Respostas

_rodfaria_

_rodfaria_

09/09/2005

Veja
http://forum.clubedelphi.net/viewtopic.php?t=60879&highlight=auto+incremento+trigger
http://www.mers.com/INPRISE/FAQ/2955.HTML

Rod.


GOSTEI 0
Roger1976

Roger1976

09/09/2005

Eduardo, eu já tive esta mesma dúvida. Ao invés de utilizar o before post, use o after insert.

Vai ficar assim:

datamodule.clientdataset.FieldByName(´ID´).AsInteger := 0;


Espero ter te ajudado.


GOSTEI 0
Thomaz_prg

Thomaz_prg

09/09/2005

Colega, vou postar as formas que uso...

Quando eu uso IBX, uso co componente IBDataset, que possui uma propriedade chamada Generator, que faz o papel da trigger, e não preciso me preocupar em atualizar o ID na tela que o componente faz isso por mim...

Quando uso ClientDataSet, salvo a posição atual do cursor, atualizo o Clientdataset e retorno pra posição onde estava... dessa forma:
var p:pointer;
begin

{comandos de inserção}
p:= clientdataset.getbookmark;
clientdataset.refresh;
clientdataset.gotobookmark(p);

faço isso pois após o refresh o ponteiro não volta pra posição onde estava antes.

Bom, não sei se é a forma mais certa, ou ,melhor de se fazer, mas faço assim e funciona blz.


GOSTEI 0
POSTAR