Transação com dbExpress

16/02/2006

Utilizamos Delphi 7 + dbExpress + Firebird 1.5. Gostaria de saber qual o momento exato que se deve colocar um dataSet em Transação...
Se no momento que é dado um insert (Ex. SimpleDataSet1.Insert) já pega a transação depois dá um post + ApplyUpdates + Commit ou conforme o código abaixo seria mais conveniente, ou seja, depois que realizar o post no dataset:

.....
SimpleDataSet1.Insert;
SimpleDataSet1.FieldByName(´Codigo´) .AsInteger:= 1;
SimpleDataSet1.FieldByName(´nome´) .AsString:= ´Teste´;
if not SQLConnectionX.InTransaction then
begin
TD.IsolationLevel := xilREADCOMMITTED;
TD.TransactionID := 1;
SQLConnectionX.StartTransaction(TD);
try
SimpleDataSet1.ApplyUpdates(0);
SQLConnectionX.Commit(TD);
except
on E: Exception do
begin
SQLConnectionX.Rollback(TD);
raise Exception.Create(E.Message);
end;
end;
end;


Obs: Existe algum limite de transações que podem estar em abertas ao mesmo tempo (Ex. 20 estações de trabalho com 20 transações ao mesmo tempo). Se tiver muitas transações em abertas a performance do banco poderá diminuir ?


Mcd

Respostas

16/02/2006

Mcd

[i:65ec2c423f].....
SimpleDataSet1.Insert;
SimpleDataSet1.FieldByName(´Codigo´) .AsInteger:= 1;
SimpleDataSet1.FieldByName(´nome´) .AsString:= ´Teste´;
if not SQLConnectionX.InTransaction then
begin [/i:65ec2c423f]

No codigo anterior faltou mais o post
SimpleDataSet1.Insert;
SimpleDataSet1.FieldByName(´Codigo´) .AsInteger:= 1;
SimpleDataSet1.FieldByName(´nome´) .AsString:= ´Teste´;
[b:65ec2c423f]SimpleDataSet1.Post; [/b:65ec2c423f]
if not SQLConnectionX.InTransaction then


Responder Citar

16/02/2006

Caduengenheiro

quer evitar deadlock? utilize...

TD.IsolationLevel := xilCUSTOM;


Responder Citar

21/02/2006

Mcd

[b:19c5603e9a]if not SQLConnectionX.InTransaction then
begin
TD.IsolationLevel := xilREADCOMMITTED;
TD.TransactionID := 1;
SQLConnectionX.StartTransaction(TD);
try
....[/b:19c5603e9a]

Alguem sabe quais os recursos que o banco de dados aloca no momento que eu pego uma nova transação, assim como o codigo acima ?


Responder Citar