DBExpress
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.
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
Curtidas 0
Respostas
Vinicius2k
03/10/2005
Colega,
Sim. Vc pode escolher fechar a primeira, mas precisa retornar o valores para a variável.
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.
T+
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+
GOSTEI 0
Helderjr
03/10/2005
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 ...? );
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 ...? );
GOSTEI 0