[firebase-br] Save Points....

RedDevil reddevil em reddevil.eti.br
Seg Fev 14 03:54:48 -03 2005


ola Joelson.
tudo bem contigo?
sincerely, espero que sim.

hehehe, o que acontece eh que eu sou um "Devil" do bem, que esta do lado dos
"Angels" (tipow um agente duplo infiltrado nas hordas satanicas...;o), e
somente nao me coloco na categoria de "Angel" porque eu acredito que ainda
tenho que evoluir muito espiritualmente para me dar ao direito de usar um
nick assim...
;o)

e eu acho que finalmente entendi aonde voce esta querendo chegar e acredito
que possa escrever algo que podera te ser util...

tipow mesmo voce tendo o cliente padrao "Consumidor", pode acontecer de a
venda ser no crediario e os itens vendidos terem que ir para a conta do
cliente, ou entao o nome do cliente ter que constar na nota fiscal ou no
cupom fiscal que seria emetida(o) apos a finalizaçao da venda, o que
tornaria obrigatoria a possibilidade de ter no sistema a possibilidade de
incluir o cliente durante a venda, caso ele nao esteja cadastrado...

a chave de tudo esta na tua duvida sobre o uso do componete de transaçao...

eu nao sei qual eh o componente, ou melhor, o pacote de componentes que voce
usa para para acessar o Firebird, mas acredito que isso seja irrelevante,
que o que eu vou colocar a seguir se aplique a todos os componentes...

em suma, voce pode sim ter mais do que uma transaçao na historia, fazer o
controle transacional da tua venda usando duas ou mais transaçoes... para
isso basta que voce coloque nessa historia 2 (ou 3, 4, 5... quantos forem
necessarios... neste exemplo vamos trabalhar com 2) componentes de transaçao
(no IBObjects, a suite de componentes que eu uso, seriam 2 componentes
IB_Transaction), e nomeie um como "trVendas", o qual voce informa na Query
com a qual voce vai inserir os itens vendidos na tabela de vendas, e nomeie
o outro componente de transaçao como "trClientes", o qual voce informa na
Query que esta associada a tabela de clientes...

entao, se pintar shit na historia, se o cliente nao esta cadastrado, voce da
um "trVendas.Rollback", cadastra o cliente e retorna a finalizaçao da venda,
e se der certo, voce faz o seguinte:

trClientes.Commit;
trVendas.Commit;


e indo alem, voce pode ate tratar, nessa especulaçao que eu fiz, o crediario
em uma terceira transaçao, quando entao, apos informar os dados do cliente e
finalizar a venda no crediario, fazer o seguinte:

trClientes.Commit;
trVendas.Commit;
trCrediario.Commit;


geralmente o "trXXX.Commit" salva definitivamente as informaçoes no banco,
na tabela associada a Query na qual foi informada o componente transaction
"trXXX", encerra a transaçao e fecha a Query... mas verifique no componente
TQuery do pacote de componentes que voce usa se ele tem a propriedade
"CommitAction", pois no IBObjects se a gente deixar essa propriedade como
"caInvalidateCursor", o "trXXX.Commit" salva as informaçoes no banco,
encerra a transaçao e mantem a Query aberta, o que tornaria possivel voce ja
dar um "trClientes.Commit" apos a inclusao do cliente e seus respectivos
dados, quando entao, nesse nosso exemplo hipotetico, apos a finalizaçao da
venda, voce faria apenas o seguinte:

trVendas.Commit;
trCrediario.Commit;

isso seria mais pratico, pois se o cliente ja estiver cadastrado, nao seria
necessario commitar sua transaçao no final, pois nao foi informado nada...


[]s
força sempre.
ate +++

Luiz "RedDevil" Stefanski
=======><=========
====> Delphi 4 <=====
====> powered <=====
======> by <=======
===> IBObjects <=====
=======><=========
more in:
http://www.RedDevil.eti.br (home)
instalaçao versao -4.3.A:
http://www.firebase.com.br/cgi-bin/firebase.cgi/artigo?ID=630
exemplos e dicas :
http://www.firebase.com.br/cgi-bin/firebase.cgi/dnld?ID=165



----- Original Message -----
From: "Joelson" <joelsonss em yahoo.com.br>
To: "FireBase" <lista em firebase.com.br>
Sent: Sunday, February 13, 2005 11:36 PM
Subject: Re: [firebase-br] Save Points....


> >ola Joelson. (Joel Son... filho de Joel...;o).
> sim e Joel em alguns significados quer dizer Jeová eeeeeeeeee
> "Devil" não é muito chegado a Jeová neh, bom mas isso é problema de vcs,
:-)
>
> >mas eu te pergunto se ao inves de fazer tudo isso nao seria mais facil e
> >vantajoso voce fazer a inclusao dos produtos nas tuas tabelas usando uma
SP
> >que te retorne um status, tipow se retornar "C", o cliente nao esta
> >cadastrado, entao voce faz com que a tua aplicaçao entre em modo de
> >cadastro
> >de clientes e depois retorne ao modo de finalizaçao da venda, se retornar
> >"P", existe alguma coisa errada com os produtos (como estoque negativo,
etc
> >e talz...;o), quando entao voce faria com que a tua aplicaçao permitisse
ao
> >usuario fazer alguma coisa a respeito e depois voltaria ao modo de
> >finalizaçao, ou entao, quando esse retorno fosse "O" ("O"keyzzz...
trata-se
> >apenas de especulaçao... voce eh quem definiria esses retornos...;o),
> >significaria que deu tudo certo com a inclusao... entao: kiss, kiss and
> >bye,bye...
>
> bom hj o sistema já tem um cliente padrão por nome de Consumidor que toda
> venda se inicia pra ele... ou seja... não existe venda sem cliente... e
> mesmo que
> a aplicação entre em modo de cadastro de cliente... esse cadastro não
> estaria
> fazendo parte da mesma transação da venda? e eu gostaria q esse cadastro
> fizesse parte de uma outra transação e foi aí q eu pensei q o savepoint
> pudesse
> ser util nesse caso.... kiss, kiss, hehehehe... eu sempre leio suas
> respostas...
> vc é campeão cara... "RedDevil" --- já começa pelo nome {:-) - "ops esse
> smile é do Otto"
>
> sem mais
> Joelson
>






Mais detalhes sobre a lista de discussão lista