Form com problema de Transaction, trava o form
07/11/2005
0
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 :
No botão Salvar:
No botão Cancelar:
No botão Excluir:
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.
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.
Diogoalles
Curtir tópico
+ 0
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
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
Clique aqui para fazer login e interagir na Comunidade :)