Fórum DBExpress #298116

03/10/2005

0

Pessoal,tô com a seguinte dúvida?

Se inicio uma Transacao no DBExpress:

var
t1:TTransactionDesc;


t1.IsolationLevel...
t1.TransactionID := 1

SqlConection.StartTransaction(t1);

//Alguns Comandos

t1.IsolationLevel...
t1.TransactionID := 2

SqlConection.StartTransaction(t1);


Não sei se perceberam, mas iniciei 2 transações com a mesma variável, isto, iniciando a segunda transacao sem fechar a primeira. Minha questão é: É possível eu fechar a primeira transação, sem fechar a segunda, e se for, como?


É porque uso uma função para iniciar transações, e gostaria de saber se é possível escolher qual transação fechar.


Firekiller

Firekiller

Responder

Posts

03/10/2005

Vinicius2k

Colega,

Sim. Vc pode escolher fechar a primeira, mas precisa retornar o valores para a variável.
var 
t1:TTransactionDesc; 

t1.IsolationLevel... 
t1.TransactionID := 1 

SqlConection.StartTransaction(t1); 

//Alguns Comandos 

t1.IsolationLevel... 
t1.TransactionID := 2 

SqlConection.StartTransaction(t1); 

...
// é preciso reatribuir a ID 1 para a var t1 antes de fechar
t1.TransactionID := 1 
SqlConection.Commit(t1);


No exemplo, apenas o TransactionID foi mudado, mas se vc estiver utilizando níveis de isolamento diferentes, também o IsolationLevel deve ser retornado ao primeiro.

Sugestão: utilize um Array of TTransactionDesc. Vc, provavelmente, estará passando a função o ID da transação que vc quer fechar, então, utilize-o como índice do array também.
var 
aTD: Array[1..2] of TTransactionDesc; 

aTD[1].IsolationLevel... 
aTD[1].TransactionID := 1 

SqlConection.StartTransaction(aTD[1]); 

//Alguns Comandos 

aTD[2].IsolationLevel... 
aTD[2].TransactionID := 2 

SqlConection.StartTransaction(aTD[2]); 

...

SqlConection.Commit(aTD[1]);
SqlConection.Commit(aTD[2]);


T+


Responder

Gostei + 0

09/01/2006

Helderjr

Vinicius,

Estou com o mesmo problema do amigo, em questão a transação, vou fazer um teste com a sua dica, mas só mais uma coisa como faço para passar uma array de transação como parametro de uma função?

aTD: Array[1..2] of TTransactionDesc;

Teste( nTd : Array of ...? );


Responder

Gostei + 0

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

Aceitar