Fórum DBExpress - Transaction no Active #397475
17/03/2011
0
if (DataSource1.DataSet.Active) and (DataSource1.DataSet.RecordCount > 0) then
begin
if MessageDlg('Tem certeza que deseja excluir o registro ?', mtConfirmation, [mbYes,mbNo], 0) = mrYes then
DataSource1.DataSet.Delete;
DataSource1.DataSet.Open;
end;
EnableDisableControls(False);
Josenildo Rosa
Curtir tópico
+ 0Posts
17/03/2011
Marco Salles
if (DataSource1.DataSet.Active) and (DataSource1.DataSet.RecordCount > 0) then
begin
if MessageDlg('Tem certeza que deseja excluir o registro ?', mtConfirmation, [mbYes,mbNo], 0) = mrYes then
DataSource1.DataSet.Delete;
DataSource1.DataSet.Open;
end;
EnableDisableControls(False);
Eu não entendi porque esta open depois do delete ???
por acaso qnd vc dar o delete o clientDataSet não esta aberto ??? Se tiver fechado não geraria um erro ???
Gostei + 0
17/03/2011
Josenildo Rosa
{ Private declarations }
public
{ Public declarations }
Transc: TTransactionDesc; ------------------------ esse transc no qual me refiro
procedure Start; ----------------------- uso na minha aplicacao na hora de salvar store procedures, que no inicio eu starto ela e depois no final eu comito.
procedure Comit;
procedure Rollback ; ========================= para cada procedure uso o seguinte: procedure TDM.Comit;
begin
Conexao.Commit(Transc);
end; procedure TDM.Rollback;
begin
Conexao.Rollback(Transc);
raise Exception.Create(MSG_ERRO);
end; procedure TDM.Start;
begin
Transc.IsolationLevel := xilREADCOMMITTED;
Transc.TransactionID := StrToInt(IDTransaction);
Conexao.StartTransaction(Transc);
end;
Gostei + 0
17/03/2011
Marco Salles
procedure Rollback ; geralmente se usa um bloco protegido para que caso de algum erro ele vai para o Rooback try blocos excpet Roolback Porém se vc tiver utilizando o delphi 2010 existe uma nova classe de transação que evita este tipo de problema Ou seja , ele testa o "objeto" antes de dar o Roolback.
Gostei + 0
18/03/2011
Josenildo Rosa
Gostei + 0
18/03/2011
Marco Salles
var tr:TTransactionDesc; begin tr.TransactionId:=1; tr.IsolationLeve:=xilReadCommited; Conexao.StartTransaction(tr); try Seu comandos de Indert , delete , Update etc.. Conexao.coomit(tr); except conexao.Roolback(tr); end; end;
Gostei + 0
18/03/2011
Josenildo Rosa
Gostei + 0
18/03/2011
Marco Salles
Gostei + 0
18/03/2011
Josenildo Rosa
begin
{: insere ou atualiza Produtos }
Start; -------> que é aquela que comentei anteriormente
try
with spProduto do
begin
Params[0].AsInteger := cdsProdutoP_ID.AsInteger;
Params[1].AsInteger := cdsProdutoF_ID.AsInteger;
Params[2].AsString := cdsProdutoP_NOME.AsString;
Params[3].AsString := cdsProdutoP_UN.AsString;
Params[4].AsInteger := cdsProdutoP_QTD.AsInteger;
Params[5].AsString := cdsProdutoP_REF.AsString;
Params[6].AsString := cdsProdutoP_COR.AsString;
Params[7].AsString := cdsProdutoP_TAM.AsString;
Params[8].AsBCD := cdsProdutoP_CUSTO.AsCurrency;
Params[9].AsBCD := cdsProdutoP_VENDA.AsCurrency;
ExecProc;
Comit; -------> que é aquela que comentei anteriormente
end;
except
Rollback; -------> que é aquela que comentei anteriormente
end; ------------ neste caso vc me aconcelha colocar start aqui novamente ?
end;
Gostei + 0
18/03/2011
Marco Salles
Gostei + 0
18/03/2011
Josenildo Rosa
begin
{: exclui Produtos }
Start;
try
with spProdutoD do
begin
Params[0].AsInteger := cdsProdutoP_ID.AsInteger;
ExecProc;
Comit;
end;
except
Rollback;
end;
end;
Gostei + 0
18/03/2011
Marco Salles
Gostei + 0
19/03/2011
Josenildo Rosa
Gostei + 0
19/03/2011
Josenildo Rosa
Gostei + 0
19/03/2011
Marco Salles
Gostei + 0
19/03/2011
Josenildo Rosa
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)