[firebase-br] Aplicação Multicamadas/Dbexpress

Ederson Selvati asaederson em asaeggs.com.br
Seg Set 27 12:48:34 -03 2004


Boa tarde a todos,

tenho visto nos ultimos dias alguns assuntos a respeito do clientdataset e nesteddataset com dbexpress.


Com nesteddatasets todas as tabelas envolvidas no relacionamento sao gravadas na mesma transacao, ou seja, caso ocorra algum erro no conjunto de datasets, nada será gravado ou tudo será gravado após as devidas correções.


Mas tenho esbarrado em um problema, vejam o seguinte cenário:

em um sistema de emissao de notas, tenho a tabela onde é armazenado as informações da nota, tais como numero, cliente, total da nota e outros.
e uma outra tabela de itens da nota, q armazena as informacoes referentes aos produtos da nota.

faco todas as devidas insercoes nas tabelas e dou um applyupdates(0) na tabela de informaçoes de notas, como é um relacionamento mestre detalhe a tabela de itens automaticamente tem os produtos gravados na mesma transacao.


só q depois q dou um applyupdates na tabela de cabecalho de nota, eu teria q incrementar o nº da nota fiscal em uma outra tabela, informar a ultima compra do cliente eu uma outra, como proceder, visto q estas outras tabelas nao terao condicao de entrar no relaciomento mestre detalhe e utilizar a mesma transação ?


explanando o cenario

cdsnotas.applyupdates(0);//aqui termina a transação do conjunto mestre detalhe das notas fiscais

cdsauxiliar.close;
cdsauxiliar.commandtext:='update CLIENTES set ultimacompra=:data where id_cliente=:cliente';
cdsauxiliar.params.parambyname('data').asdatetime:=cdsnotas.fieldbyname('emissao').asdatetime;
cdsauxiliar.params.parambyname('cliente').asinteger:=cdsnotas.fieldbyname('cliente').asinteger;
cdsauxiliar.execute;

cdsauxiliar.close;
cdsauxiliar.commandtext:='update config set nota=nota+1';
cdsauxiliar.execute;

e se em alguma destas transações acima eu obter um erro ? Seja na hora de atualizar a tabela de clientes ou a tabela de configurações onde incremento o numero de nota ?

lembrando q em uma aplicação multicamadas usando SOAP, controlar explicitamente as transações ficaria um pouco complicado, nem sei se existe alguma forma para isso, visto q o provider ao qual o clientdataset se encontra ligado é responsável por este controle.

Uma possível solução seria criar triggers para efetuar estas operações ?


Desculpe fugir um pouco do contexto do fórum, mas não obtive muito sucesso a respeito deste assunto.




Ederson Selvati
Digimaq Registradoras e Sistemas Ltda.







Mais detalhes sobre a lista de discussão lista