Iniciar duas transações

20/08/2008

1

Oi Pessoal!
Tem como iniciar uma transação, colocar ela em espera e iniciar outra transação? Tenho um sistema de Locadora de Filmes, o Cliente pediu para fazer uma alteração na hora de alugar os filmes, quando iniciamos uma retirada, para sair da tela temos que finalizar ou cancelar a locação. O cliente alega que vai perder tempo, pois haverá momentos em que ele já digitou vários filmes para uma locação então o cliente resolve escolher mais filme, ele vai ter que cancelar aquela locação para atender os demais clientes da fila, enquanto aquele termina de escolher mais filmes, ai tem que digitar tudo novamente. Preciso fazer um sistema que abra a tela de Locação e que deixe a locacao aguardando em aberto, para poder iniciarmos outra locação finaliza-la e abrir a que estava em espera, como fazer isso?


Responder

Posts

20/08/2008

Paulo

Em realidade, você pode abrir N transações no mesmo banco. Agora isso tem que ser bem trabalhado. Quanto a sua dúvida não entendi bem essa regra, mas se você abriu uma transação e não deu Commit ou Rollback, você pode fazer o que quiser e depois dar Commit ou Roll. Imagine um sistema em rede, onde vários usuários podem abrir a mesma tela. Se não fosse possível abrir várias transações, um só poderia usar essa tela após o outro terminar. Imagine o pandemônio que isso causaria? É possível sim abrir várias. No seu exemplo(não sei se é isto), você Startou uma transação, aí você deu um Edit ou Append em uma tabela. No seu código existe um IF e dependendo do resultado desse IF você abre outra tela, porém ligado a essa tela. Ao fechar essa segunda tela, com um post ou delete, por exemplo, você volta para a principal, faz o que tem que fazer e Commita ou da Rollback. A transação será finalizada com todos os dados executados. Não sei se era isso.


Responder

20/08/2008

Fernandoaco

Paulo,

Minha tela é showmodal, não editamos sempre inserimos, o que eu preciso fazer é: estou fazendo uma locacao de filmes ja incluir varios filmes o cliente resolve ir procurar outro filme, ai preciso colocar esta locacao que não gravei ainda em espera, pra iniciar outra locacao para outro cliente. O problema é que não a minima ideia ainda de como fazer isso.


Responder
em primeiro lugar, essa tela de locações não deve ser modal.
senão você não consegue abrir outra.

então você abre a tela e modo ´show´ e abre a transação somente no momento da gravação (da gravação, e não da inserção de registros).

algo assim:
abre a tela em modo ´show´
permite a inserção de registros
ao gravar, abre a transação, manda gravar e fecha a transação.

desse modo você pode abrir quantas telas de locação quiser e nem precisa abrir várias transações.


Responder

22/08/2008

Fernandoaco

Olá Emerson!

Minha ideia é mais menos assim? no forme showmodal, teria 2 botoes um para colocar a locacao em espera, e outro para e busca as locacoes que estao em modo de espera, minha duvida, posso grava no clientedataset que uso sem da o comit, ou jogar os dados para outro clientedataset?. eis minha duvida.


Responder
você pode gravar dados no clientdataset somente com post. quando toda a edição estiver finalizada você executa o applyupdates (que é o commit).

eu sugiro a você permitir várias telas abertas simultaneamente, assim você não precisa se preocupar com transações. cada instância da tela terá seu próprio clientdataset com seus dados protegidos das outras instâncias.

depois basta retornar para a tela desejada e descarregar as informações para o banco de dados (applyupdates).

é assim que eu sempre faço e acho que é a melhor forma.

no meu caso, vários pedidos podem ser abertos simultaneamente, por [i:d2750b393f]n[/i:d2750b393f] motivos. daí, basta alternar entre os pedidos abertos e gravá-los conforme o necessário.


Responder

22/08/2008

Fernandoaco

Sim entendir os clientdataset teriam que ficar no form de locacao, ou podem continuar no datamodule?


Responder

23/08/2008

Brunodsr

Use sessoes.

Eh bem facil. procure pela classe TSessions.

Cada sessao possui uma conexao independente com o seu banco de dados. A garantia de integridade é maior.

Espero ter ajudado


Responder

23/08/2008

Fernandoaco

Olá Bruno,

Da pra voce me enviar um exemplo ?

Obrigado pela atenção.


Responder
×
+1 DevUP
Acesso diário, +1 DevUP
Parabéns, você está investindo na sua carreira