Rolblback não funciona

Delphi

29/06/2005

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;


Rjcerri

Rjcerri

Curtidas 0

Respostas

Marco Salles

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

Rjcerri

29/06/2005

Não funcionou.


GOSTEI 0
Marlon Spiess

Marlon Spiess

29/06/2005

não esqueça de dar um cancel antes do rollback e um refresh depois.


GOSTEI 0
Marlon Spiess

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;


GOSTEI 0
Marlon Spiess

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

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


GOSTEI 0
Marco Salles

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

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

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

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´);


GOSTEI 0
Arc

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

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 ......


GOSTEI 0
Caninha51

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

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

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

Rjcerri

29/06/2005

Pessoal ninguem teve mais nenhuma ideia? estou parado com isso.


GOSTEI 0
Beppe

Beppe

29/06/2005

Alguma SP que executa um commit nesse tempo?


GOSTEI 0
POSTAR