Re: [firebase-br] Aplicação Multicamadas/Dbexpres s

Kléber Caneva kdcc em terra.com.br
Seg Set 27 13:13:32 -03 2004


Vc pode optar por fazer uma Transação Explicita usando
Connection.StartTransaction (TD);

ou usar Triggers, que ao meu ver seria o mais correto.

[]´s

Kléber Caneva


----- Original Message ----- 
From: "Ederson Selvati" <asaederson em asaeggs.com.br>
To: <Lista em firebase.com.br>
Sent: Monday, September 27, 2004 12:48 PM
Subject: [firebase-br] Aplicação Multicamadas/Dbexpres s


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('emi
ssao').asdatetime;
cdsauxiliar.params.parambyname('cliente').asinteger:=cdsnotas.fieldbyname('c
liente').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.




______________________________________________
FireBase-BR (www.firebase.com.br)
Para editar sua configuração na lista, use o endereço
http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br

Esta mensagem foi verificada pelo E-mail Protegido Terra.
Scan engine: VirusScan / Atualizado em 22/09/2004 / Versão: 1.5.2
Proteja o seu e-mail Terra: http://www.emailprotegido.terra.com.br/

E-mail classificado pelo Identificador de Spam Inteligente Terra.
Para alterar a categoria classificada, visite
http://www.terra.com.br/centralunificada/emailprotegido/imail/imail.cgi?+_u=kdcc&_l=1,1096300280.356588.24282.conventos.terra.com.br,5518,Des15,Des15






Mais detalhes sobre a lista de discussão lista