Transação com BDE
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
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
Curtidas 0
Respostas
Pabhen
11/09/2004
Será q alguem tem ideia do q seja isso? pq isso tah cacontecendo? eu tou fazendo algo de errado?
GOSTEI 0
Otto
11/09/2004
eu faço assim:
Try DataBase.StartTransition; faço os inserts; Database.Commit; except Database.Rollback; end; //try
GOSTEI 0
Tnaires
11/09/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 [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
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
GOSTEI 0
Otto
11/09/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:
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:
GOSTEI 0
Pabhen
11/09/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?
´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?
GOSTEI 0
Gandalf.nho
11/09/2004
Será que essa mensagem não é proveniente do Engine usado pelo Access em vez do BDE?
GOSTEI 0
Pabhen
11/09/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.
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.
GOSTEI 0
Tnaires
11/09/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:
Olá otto, foi relativo ao post do pabhen, pq ele tava dando commit antes d gravar na tabela :wink:
GOSTEI 0
Tnaires
11/09/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.
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
GOSTEI 0