Plateforme Level Extreme
Abonnement
Profil corporatif
Produits & Services
Support
Légal
English
Transações não concluidas
Message
De
10/09/2005 09:52:32
 
 
À
Tous
Information générale
Forum:
Visual FoxPro
Catégorie:
Base de données, Tables, Vues, Index et syntaxe SQL
Titre:
Transações não concluidas
Versions des environnements
Visual FoxPro:
VFP 9
OS:
Windows XP SP2
Network:
Windows 2000 Server
Database:
MS SQL Server
Divers
Thread ID:
01048390
Message ID:
01048390
Vues:
66
Ola, estou utilizando o seguinte esquema de transação no sql server:

llGravacaoOK=.T.

If SQLExec(gnConnHandle,"begin transaction") < 0
Messagebox("Impossivel iniciar transação",48,"Atenção")
Return
Endif

Try


m.xparc = 0
Scan All
lcCmd="Insert into fatpag50 (filial_id,fatura_id,fornec_id,tipo,numero,valor,emissao,vencto,"+;
"historico,fluxo,datalan) values (?gcEmpresa,0,?view_pesquisafornecedores.fornec_id,"+;
"?tipodoc.tipo,?.txtnumero.Value,?cur_parc.valor,?.txtemissao.Value,?cur_parc.vencto,"+;
"?.txthistorico.Value,?.txtfluxo.Value,?Date())"
If SQLExec(gnConnHandle,lcCmd) < 0
Aerror(aErroSQL)
=Messagebox("Erro ao inserir registro no fatpag50 : "+aErroSQL(2),48,"Atenção")
llGravacaoOK=.F.
Endif

Select cur_parc

Endscan

Catch To oExcecao && Trata o erro

Messagebox("Houve um erro!"+Chr(13)+;
"Erro: "+Transform(oExcecao.ErrorNo)+Chr(13)+;
"Mensagem: "+oExcecao.Message+Chr(13)+Chr(13)+;
" : Operação sera revertida!!!!",0+16,"Ajuda")

llGravacaoOK=.F.

Endtry

If llGravacaoOK=.T.
Wait Window [Commit Transaction] Timeout .5
If SQLExec(gnConnHandle,"commit") < 0
Messagebox("Impossivel finalizar transação",48,"Atenção")
Return
Endif
Else
Wait Window [Rollback Transaction] Timeout .5
= SQLExec(gnConnHandle,"rollback")
Endif

***

Funciona tudo perfeitamente, o problema é que as tabelas envolvidas na transação sofrem um lock pelo banco até que seje enviado o commit ou o rollback finalizando a transação! até ai sem problemas o problema é quando cai a conexão as tabelas ficam travadas para outros usuarios! como posso tratar isso? pois hoje tenho que dar um stop e re-star no sql, pra liberar a conexoes e transações, nada inteligente, tem alguma comando pra enviar antes da transação avisao que se a conexao quebrar a transação dever ser revertida automaticamente???

Marcelo.
Suivant
Répondre
Fil
Voir

Click here to load this message in the networking platform