Array
(
)

Transação com BDE

Pabhen
   - 11 set 2004

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
   - 11 set 2004

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


Otto
   - 12 set 2004

eu faço assim:



#Código

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



Tnaires
   - 12 set 2004

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 AfterPost da tabela filha, e o RollBack vc bota nos eventos OnPostError das duas tabelas (claro, verificando se há uma transação em andamento com o comando InTransaction).
Abraços


Otto
   - 12 set 2004

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:


Pabhen
   - 12 set 2004

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?


Gandalf.nho
   - 12 set 2004

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


Pabhen
   - 12 set 2004

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.


Tnaires
   - 13 set 2004


Citação:
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:


Tnaires
   - 13 set 2004


Citação:
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