Fórum Como retornar a chave primária? #52116
10/08/2005
0
Olá Amigos!
Estou usando o interbase 6.01 com componentes de acess DbExpress, utilizo o processo de geraçao de chaves primárias através de triggers com o valor armazenado no generator. Quando vou inserir um novo registro no meu ClientesDataSet deixo o campo da chave primária, nulo, para que o interbase se encarregue de gerá-la pra mim. até aí sem problemas, contudo a minha pergunta é [b:f32a575147]Como faço para aparecer o valor dessa chave primária no meu registro[/b:f32a575147] após dar o ApplicUpdate() ou seja apos gravar o registro no banco.. ?
Obrigado pela atenção
Estou usando o interbase 6.01 com componentes de acess DbExpress, utilizo o processo de geraçao de chaves primárias através de triggers com o valor armazenado no generator. Quando vou inserir um novo registro no meu ClientesDataSet deixo o campo da chave primária, nulo, para que o interbase se encarregue de gerá-la pra mim. até aí sem problemas, contudo a minha pergunta é [b:f32a575147]Como faço para aparecer o valor dessa chave primária no meu registro[/b:f32a575147] após dar o ApplicUpdate() ou seja apos gravar o registro no banco.. ?
Obrigado pela atenção
Robbbberto
Curtir tópico
+ 0
Responder
Posts
10/08/2005
Eduardo Pereira
robbbberto,
O uso de trigger com generator no banco pode dar este tipo de problema, por que o ClientDataSet não toma conhecimento do valor do ID gerado pelo generator (a não ser se fechar e abrir a tabela, o que não é desejável).
Eu costumo fazer da seguinte forma:
- No banco, existe uma SP que gera o identificador para a tabela desejada (através de um generator, como no trigger)
- No evento BeforeUpdateRecord do DataSetProvider, a SP é chamada e o valor gerado é atribuído à chave primária.
Ex.:
stpGeraID.ExecProc;
DeltaDS.FieldByName(´ID´).NewValue := stpGeraID.ParamByName(´ID´).AsInteger;
- IMPORTANTE: No DataSetProvider, em Options, poPropogateChanges deve estar em TRUE. Desta forma o valor atribuído ao campo ID é refletido no ClientDataSet.
Obs.: O texto acima foi adaptado de uma mensagem minha em outro thread aqui no fórum. O thread completo está em http://forum.clubedelphi.net/viewtopic.php?t=65412&highlight=
[]´s
Eduardo Pereira
O uso de trigger com generator no banco pode dar este tipo de problema, por que o ClientDataSet não toma conhecimento do valor do ID gerado pelo generator (a não ser se fechar e abrir a tabela, o que não é desejável).
Eu costumo fazer da seguinte forma:
- No banco, existe uma SP que gera o identificador para a tabela desejada (através de um generator, como no trigger)
- No evento BeforeUpdateRecord do DataSetProvider, a SP é chamada e o valor gerado é atribuído à chave primária.
Ex.:
stpGeraID.ExecProc;
DeltaDS.FieldByName(´ID´).NewValue := stpGeraID.ParamByName(´ID´).AsInteger;
- IMPORTANTE: No DataSetProvider, em Options, poPropogateChanges deve estar em TRUE. Desta forma o valor atribuído ao campo ID é refletido no ClientDataSet.
Obs.: O texto acima foi adaptado de uma mensagem minha em outro thread aqui no fórum. O thread completo está em http://forum.clubedelphi.net/viewtopic.php?t=65412&highlight=
[]´s
Eduardo Pereira
Responder
Gostei + 0
11/08/2005
Robbbberto
Olá Eduardo..
Obrigado pela atenção. Vou testar o seu procedimento..
Muito obrigado
Roberto Filho
Obrigado pela atenção. Vou testar o seu procedimento..
Muito obrigado
Roberto Filho
Responder
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)