Como retornar a chave primária?
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
Curtidas 0
Respostas
Eduardo Pereira
10/08/2005
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
GOSTEI 0
Robbbberto
10/08/2005
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
GOSTEI 0