Transacao Aberta

Firebird

15/09/2003

Pessoal quando executo o codigo abaixo para inserir ou ate mesmo quando eu altero um registro da um erro dizendo que ja existe uma transacao aberta, o erro ocorre na linha do StartTransaction.

Percebi que quando eu abro o arquivo IBQConpag e automaticamente aberta uma transacao, por isso que da o erro.
se eu executar a operacao com o arquivo fechado da certo.
Alguem sabe porque disso.

obs:
Coloquei o DefalutAction do transaction = TACommitRetaining.
Presico usar o UpdateSql?

Obrigado

Try
DMT.IBTransa.StartTransaction;
DMT.IBQConpag.Sql.Clear;
DMT.IBQConpag.SQL.Add( ´INSERT INTO CONPAG ´ );
DMT.IBQConpag.SQL.Add( ´( ID_CONPAG,COD_PLA,CODIGO,TIPO_DOC,COD_FOR,VALOR)´ );
DMT.IBQConpag.SQL.Add( ´VALUES ´);
DMT.IBQConpag.SQL.Add( ´( gen_id(GEN_CONPAG,1),:COD_PLA,:CODIGO,:TIPO_DOC,:COD_FOR,:VALOR)´ )

DMT.IBQConpag.ParamByName(´COD_PLA´).AsString:=planilha;
DMT.IBQConpag.ParamByName(´CODIGO´).AsString:=MECodigoDoc.Text;
DMT.IBQConpag.ParamByName(´TIPO_DOC´).AsString:=´NF´;
DMT.IBQConpag.ParamByName(´COD_FOR´).AsString:=fornecedor;
DMT.IBQConpag.ParamByName(´VALOR´).AsFloat:=CEValor.Value;

DMT.IBQConpag.execsql;
DMT.IBTransa.Commit;
except
DMT.IBTransa.Rollback;
end;

[/code]


M@rcelo

M@rcelo

Curtidas 0

Respostas

Afarias

Afarias

15/09/2003

Rapaz...

1º -- não use a mesma Query/DataSet para SELECTS e outras operações (como INSERTS)

2º -- Use transações diferentes para as Querys...


sempre q precisar saber se uma transação está aberta antes de tentar abrí-la, use a propriedade InTransaction ::

if not IBTransaction1.InTransaction then
IBTransaction1.StartTransaction;


T+


GOSTEI 0
POSTAR