Fórum Rolblback não funciona #286373

29/06/2005

0

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

Responder

Posts

29/06/2005

Marco Salles

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;



Responder

Gostei + 0

29/06/2005

Rjcerri

Não funcionou.


Responder

Gostei + 0

29/06/2005

Marlon Spiess

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


Responder

Gostei + 0

29/06/2005

Marlon Spiess

ahhh, desculpa, esqueci de diser, em todas as tables;
ex.:
table1.cancel;
.
.
.
table15.cancel;
database1.rollback;
table1.refresh;
.
.
.
table15.refresh;


Responder

Gostei + 0

29/06/2005

Marlon Spiess

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


Responder

Gostei + 0

29/06/2005

Caninha51

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


Responder

Gostei + 0

29/06/2005

Marco Salles

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]


Responder

Gostei + 0

29/06/2005

Rjcerri

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.


Responder

Gostei + 0

29/06/2005

Marco Salles

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


Responder

Gostei + 0

30/06/2005

Rjcerri

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


Responder

Gostei + 0

30/06/2005

Arc

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


Responder

Gostei + 0

30/06/2005

Arc

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


Responder

Gostei + 0

30/06/2005

Caninha51

Eh, realmente ele se enganou com o ´not´, por isso retornou o ´Transação não cancelada´!


Responder

Gostei + 0

01/07/2005

Marco Salles

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


Responder

Gostei + 0

04/07/2005

Rjcerri

Desculpe a demora para responder, eu estava de licença medica. Fiz essa mudança mas o problema continua, não deu certo.


Responder

Gostei + 0

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

Aceitar