Form com problema de Transaction, trava o form

07/11/2005

1

Pessoal

Recém estou inciando a utilização dos componentes MDO.
E muitas vezes minha aplicação tá travando e é por causa das transações.
Gostaria de saber qual é a melhor a maneira de utilizar na minha situação.

Tenho um form que acessa uma VIEW, que é atualizavel, podem ser realizados Updates e Delete, para isso tenho triggers d banco para a View.

Essa view utiliza um mdoDataSet e estão ligada ao Transaction1, que tem as propriedades Autocommit=False e está ReadCommited.

Ao clicar no botão alterar :
LocalizaRegistro(EdtRegistro);
If not(Transaction1.Intransaction)then
 Transaction1.StartTransaction;
DataSet.Edit;


No botão Salvar:
If (Transaction1.Intransaction)then
 Transaction1.Commit;
LocalizaRegistro(EdtRegistro);


No botão Cancelar:
DataSet.Cancel;
If (Transaction1.Intransaction)then
 Transaction1.RollBack;
LocalizaRegistro(EdtRegistro);


No botão Excluir:
If not(Transaction1.Intransaction)then
 Transaction1.StartTransaction;
DataSet.Delete;
If (Transaction1.Intransaction)then
  Transaction1.Commit;
Close;


Tenho a função LocalizaRegistro(EdtRegistro) devido ao DataSet se fechar toda vez q commit ou rollback, então ele traz d volta o registro que o usuario estava.

Dentro do form tenho mais 4 MdoQuerys que possuem instruções de Select dentro. Eles estão ligados ao Transaction2 que também está nesse form. AutoCommit=True e Readcommited.

Nas operações de Savar, Cancelar e Excluir eu utilizo essas querys, sem executar nenhum tipo d comando de Start ou Commit no Transaction2.

Essa view possui varios relacionamentos, por exemplo na tabela principal eu tenho Cd_cliente e da tabela cliente vem o Nm_cliente.
Então ao clicar no botão alterar eu posso preencher o campo de cliente, que é acessado através de um botão de pesquisa que abre o form de cliente. Nele eu seleciono o cliente e então procedo da seguinte maneira:

...
If not(FrmView.DataSet in [dsEdit,dsInsert])then
FrmView.DataSet.Edit;

FrmView.DataSet.FieldByName(´Cd_cliente´).AsInteger := QClienteCdCliente.VAlue;
FrmView.DataSet.Post;
...

Sempre executo o Post pq preciso que o nome relacionado na view já apareça para o usuario, mas isso sem dar Commit, que só será executado no Salvar, ou RolllBack se Cancelar.

O problema é que esse meu form trava muitas vezes, sempre em operações diferentes, ou seja, posso clicar em Alterar,Salvar,Cancelar,Excluir em várias ordens, que sempre trava em operações diferentes, as vezes tenho que realizar varias operações para travar, as vezes trava logo no primeiro Salvar.

Existe algo errado no modo que estou trabalhando?
Transactions?

agradeço muito se puderem ajudar

Diogo.


Responder

Posts

08/11/2005

Diogoalles

olá pessoal

continuo com os problemas de travamento

deixei o transaction default do database para os componetes query q só realizam select
e para os outros q fazem updates um para cada

falando de uma forma bem grosseira, parece que um transaction atropela o outro, qdo tento realizar muitas operações clicando em alterar,cancelar,salvar,etc.. parece que ele se perde e trava o sistema

se alguem puder dar qq dica ou ajuda será de grande importancia
valeu

Diogo


Responder

14/11/2005

Edilcimar

Já tentou deixar a transação em branco?


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