Transação com BDE

11/09/2004

0

Olá pessoal, é o seguinte:

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

Pabhen

Responder

Posts

11/09/2004

Pabhen

Será q alguem tem ideia do q seja isso? pq isso tah cacontecendo? eu tou fazendo algo de errado?


Responder

12/09/2004

Otto

eu faço assim:



Try
  DataBase.StartTransition;
  faço os inserts;
  Database.Commit;
except
  Database.Rollback;
end; //try



Responder

12/09/2004

Tnaires

Olá
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


Responder

12/09/2004

Otto

Olá tnaires,


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:


Responder

12/09/2004

Pabhen

Valew Otto e tnaires, a observação sobre o ´commitar´ a transação no evento afterpost faz mais sentido mesmo, mas o meu problema ainda continua, qnd eu tento dar um commit ou um rollback eu recebo a mensagem de erro:

´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?


Responder

12/09/2004

Gandalf.nho

Será que essa mensagem não é proveniente do Engine usado pelo Access em vez do BDE?


Responder

12/09/2004

Pabhen

Não sei, só sei q fiz o seguinte teste:

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.


Responder

13/09/2004

Tnaires

Olá tnaires, 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:

Olá otto, foi relativo ao post do pabhen, pq ele tava dando commit antes d gravar na tabela :wink:


Responder

13/09/2004

Tnaires

Não sei, só sei q fiz o seguinte teste: 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.

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


Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar