Transação com BDE
11/09/2004
0
Passei um sistema feito em Delphi5 usando BDE acessando um banco Access97, para Delphi7 usando o mesmo banco e tb utilizando BDE, blz.
O problema acontece qnd starto uma transação no Database e tento executar um Commit ou um Rollback. O Programa executa a seguinte mensagem de Erro ´Voce Tentou executar um Commit ou RollBack sem antes iniciar uma transação usando BeginTrans´ ps.: Traduzi a mensagem.
Só q o comando BeginTrans Pro Delphi só é válido com o componente do ADO e o comando do Bde é StartTransaction. Eu fiquei sem entender o problema, pensei q fosse algum bug do delphi a eu baixei a atualização do delphi7 e instalei, mas o problema ainda continua. O q será isso?
Vou passar os meu codigos:
No evento BeforeInsert da tabela pai eu starto a transação:
Databse1.StartTransaction;
Depois do post na tabela Pai eu insiro um registro na tabela filha.
No evento BeforePost da tabela filha eu commito a transação
If Database1.InTransaction then
Database1.Commit
No evento BeforeCancel da tabela filha eu dou um Rollback na transação
If Database1.InTransaction then
Database1.Rollback
Pabhen
Posts
11/09/2004
Pabhen
12/09/2004
Otto
Try DataBase.StartTransition; faço os inserts; Database.Commit; except Database.Rollback; end; //try
12/09/2004
Tnaires
Pq vc tá commitando a transação antes d gravar na tabela filha? Pois, se o comando Post der um erro e vc der um RollBack, a tabela pai não voltará ao seu estado anterior.
É melhor vc por o Commit no [b:1ebd3b754d]AfterPost[/b:1ebd3b754d] da tabela filha, e o RollBack vc bota nos eventos [b:1ebd3b754d]OnPostError[/b:1ebd3b754d] das duas tabelas (claro, verificando se há uma transação em andamento com o comando InTransaction).
Abraços
12/09/2004
Otto
vc respondeu relacionado ao meu poster ou ao do nosso amigo pabhen??
* so pra saber mesmo, pq se o meu nao tiver tao certo quanto vc falou, vou mudar o meu tb... :lol:
12/09/2004
Pabhen
´Vc tentou executar um Commit/Rolback sem antes iniciar uma transação com BeginTrans´
ps1: Traduzi a mensagem de Erro pq naum me lembro como ela era escrita em ingles.
ps2: BeginTrans é um comando do ADO e naum do BDE. já atualizei meu delphi e tudo, e naum sei mas como resolver.
Alguem tem uma Luz?
12/09/2004
Gandalf.nho
12/09/2004
Pabhen
dei um starttransaction no evento afterpost e logo em seguida(ainda dentro do afterpost) dei um commit/rollback e a mensagem naum foi executada, sendo q o q eu kero fazer fica dando a tal mensagem.
ps: o q eu kero fazerjá foi explicado no meu primeiro post.
13/09/2004
Tnaires
Olá otto, foi relativo ao post do pabhen, pq ele tava dando commit antes d gravar na tabela :wink:
13/09/2004
Tnaires
Não sei pq não tá fucionando... O StartTransaction no BeforeInsert devia funcionar. Se não der mto trabalho pra vc, substitua o BDE pelo ADO... fazendo isso, vc ainda ganha a vantagem d poder usar uma versão mais recente do Access.
Abraços
Clique aqui para fazer login e interagir na Comunidade :)