Rolblback não funciona
Não sei mas o que fazer, tenho 14 tabelas ligadas a um database, ja verifiquei todo projeto, não ten nenhum commit no caminho somente no botão ok, mas quando vou cancelar a inclusao, todas as outras tabelas apagam os registros, menos duas. Pensei que fosse excesso de tabelas no database e criei outro para elas e mesmo assim não funcionou.
no cancelar esta assim. Desde já agradeçoa a atenção.
if not dtemp.InTransaction then
dtemp.StartTransaction;
dtemp.Rollback;
no cancelar esta assim. Desde já agradeçoa a atenção.
if not dtemp.InTransaction then
dtemp.StartTransaction;
dtemp.Rollback;
Rjcerri
Curtidas 0
Respostas
Marco Salles
29/06/2005
se voce quer retornar o banco de dados ao seu estado de dados achoe que e so fazer assim
if not dtemp.InTransaction then dtemp.Rollback;
GOSTEI 0
Rjcerri
29/06/2005
Não funcionou.
GOSTEI 0
Marlon Spiess
29/06/2005
não esqueça de dar um cancel antes do rollback e um refresh depois.
GOSTEI 0
Marlon Spiess
29/06/2005
ahhh, desculpa, esqueci de diser, em todas as tables;
ex.:
table1.cancel;
.
.
.
table15.cancel;
database1.rollback;
table1.refresh;
.
.
.
table15.refresh;
ex.:
table1.cancel;
.
.
.
table15.cancel;
database1.rollback;
table1.refresh;
.
.
.
table15.refresh;
GOSTEI 0
Marlon Spiess
29/06/2005
Mais um detalhe, o startransaction deve ser a primeira coisa, pois se vc der insert ou edit antes, não entra nesta transação, portanto será atualizado mesmo dando o rollback
GOSTEI 0
Caninha51
29/06/2005
O processo é o seguinte...
Inicia a transação com dTemp.StartTransaction, trabalha(inclui,edita,exclui) com seus datasets.
Para salvar as alterações vc usa o Commit.
Para cancelar tudo vc usa o Rollback.
Para sabe se já está em uma transação vc usa o InTransaction.
Falow
Caninha51
Inicia a transação com dTemp.StartTransaction, trabalha(inclui,edita,exclui) com seus datasets.
Para salvar as alterações vc usa o Commit.
Para cancelar tudo vc usa o Rollback.
Para sabe se já está em uma transação vc usa o InTransaction.
Falow
Caninha51
GOSTEI 0
Marco Salles
29/06/2005
se voce quer retornar o banco de dados ao seu estado de dados achoe que e so fazer assim
Código:
if not dtemp.InTransaction then
dtemp.Rollback;
Não funcionou.
[b:6e571aebbc]epaaaaaaaaaaaaa[/b:6e571aebbc]
Acho que alem das dicas dos nossos amigos voce deve procura a causa.. Ta muito estranho :cry:
então vamos por parte...
1) coloque o comando assim
if not dtemp.InTransaction then begin showmessage(´Transação cancelada´); dtemp.Rollback; end else Showmessage(´Transação não cancelada´); end;
[b:6e571aebbc]Rode o programa normalmente e dê um click no bo5tão cancelar e nos diga qual a mensagem que foi processada..A de transação cancelada ou a de Transação não cancelada[/b:6e571aebbc]
GOSTEI 0
Rjcerri
29/06/2005
Fiz e entrou na opção ´operação nao cancelada´, mas fez a mesma coisa apagou as outras mas gravou nas 2 tabelas, fiz uma procura e todos os commits estao no botao ok.
GOSTEI 0
Marco Salles
29/06/2005
Fiz e entrou na opção ´operação nao cancelada´
Ora então significa que a transação ja foi cancelda ou mesmo não foi nen sequer Inicializada pois dtemp.InTransaction esta sendo False....
Porque voce so pode cancelar uma transação quando dtemp.InTransaction for True...
Voce esta inicializando a Transação em algum Lugar :?: :?: :?: :?:
GOSTEI 0
Rjcerri
29/06/2005
quando começa a incluir
procedure Tfrmordemfab.btIncluirClick(Sender: TObject);
begin
if not dtemp.InTransaction then
dtemp.StartTransaction;
e depois no onexit aqui eu usei try
try
if not dtemp.InTransaction then
dtemp.StartTransaction;
except
dtemp.Rollback;
tbtempof.Cancel;
Application.MessageBox(´A tabela tempof não pode ser atualizada, tente novamente´,
´Mensagem tempof(4317)´,mb_Ok + mb_IconInformation);
btcancelar.OnClick(sender);
end;
e no botao cancelar esta assim agora
if not dtemp.InTransaction then
begin
showmessage(´Transação cancelada´);
dtemp.Rollback;
end
else
Showmessage(´Transação não cancelada´);
procedure Tfrmordemfab.btIncluirClick(Sender: TObject);
begin
if not dtemp.InTransaction then
dtemp.StartTransaction;
e depois no onexit aqui eu usei try
try
if not dtemp.InTransaction then
dtemp.StartTransaction;
except
dtemp.Rollback;
tbtempof.Cancel;
Application.MessageBox(´A tabela tempof não pode ser atualizada, tente novamente´,
´Mensagem tempof(4317)´,mb_Ok + mb_IconInformation);
btcancelar.OnClick(sender);
end;
e no botao cancelar esta assim agora
if not dtemp.InTransaction then
begin
showmessage(´Transação cancelada´);
dtemp.Rollback;
end
else
Showmessage(´Transação não cancelada´);
GOSTEI 0
Arc
29/06/2005
e no botao cancelar esta assim agora
if not dtemp.InTransaction then
begin
showmessage(´Transação cancelada´);
dtemp.Rollback;
end
else
Showmessage(´Transação não cancelada´);
Alguem pode me explicar qual a finalidade deste Rollback ????? Na linha onde está ????
GOSTEI 0
Arc
29/06/2005
Alguem me corrija se eu entendi errado essa parte
Se o If ja ta falando que não tem Transação, o Rollback, pra mim, ta no lugar errado ......
Se o If ja ta falando que não tem Transação, o Rollback, pra mim, ta no lugar errado ......
GOSTEI 0
Caninha51
29/06/2005
Eh, realmente ele se enganou com o ´not´, por isso retornou o ´Transação não cancelada´!
GOSTEI 0
Marco Salles
29/06/2005
Eh, realmente ele se enganou com o ´not´, por isso retornou o ´Transação não cancelada´!
É parece mais simples do que se imaginava...
Tire o not da instrução amigo [b:dc2ae2c070]rjcerri[/b:dc2ae2c070]
if dtemp.InTransaction then dtemp.Rollback;
Aqui significa que , somente se estiver alguma transação , esta será cancelada...
GOSTEI 0
Rjcerri
29/06/2005
Desculpe a demora para responder, eu estava de licença medica. Fiz essa mudança mas o problema continua, não deu certo.
GOSTEI 0
Rjcerri
29/06/2005
Pessoal ninguem teve mais nenhuma ideia? estou parado com isso.
GOSTEI 0
Beppe
29/06/2005
Alguma SP que executa um commit nesse tempo?
GOSTEI 0