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

Marcos Maceno marcos em softcorpinformatica.com.br
Seg Set 27 13:14:31 -03 2004


Na minha opinião, com certeza criando uma trigger ficaria bem mais seguro
realizar esta operação.

Marcos.

----- 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/Dbexpress


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





Mais detalhes sobre a lista de discussão lista