Rollback Firedac no DataSnap fecha a transacao
23/02/2021
0
Ola , estou precisando de uma ajuda com o firedac em um servidor datasnap
> Recebo um JSON e monto um comando sql para inserção de uma venda em uma tabela ,
recebendo de retorno o codigo autoincrementado da mesma, exemplo do comando sql
variavelComando := ''insert into tabela1(A, B, ) VALUES( +
quotedStr(status) + '', '' +
quotedStr(dataHoraChegada) + '');'' +
'' SELECT LAST_INSERT_ID()'';
repare o '' SELECT LAST_INSERT_ID()'' que é para obter o retorno do auto incremento .
Pois bem , definido meu primeiro comando de inserção, eu tenho um componente de conexao do firedac - TFDConnection, o qual vou usar para executar o comando anterior, porem apos executar o comando(com sucesso) a transacao é encerrada , como se eu ja tivesse comitado , porem eu estou desligando o autocomit. Exemplo:
db.TxOptions.AutoCommit := false;
db.TxOptions.EnableNested := true;
db.TxOptions.AutoStart := False;
db.TxOptions.AutoStop := False;
try
db.StartTransaction;
if db.InTransaction then
cod := dbAddPedido.ExecSQLScalar(
variavelComando
);
//apos dar o insert , neste ponto , tento executar um rollback como teste , porem obtenho um erro falando que a transacao esta fechada, porem
//eu nao commitei nada nao parei a transacao , o componente fechou a transacao sozinho.
dbAddPedido.Rollback;
except
end;
> Recebo um JSON e monto um comando sql para inserção de uma venda em uma tabela ,
recebendo de retorno o codigo autoincrementado da mesma, exemplo do comando sql
variavelComando := ''insert into tabela1(A, B, ) VALUES( +
quotedStr(status) + '', '' +
quotedStr(dataHoraChegada) + '');'' +
'' SELECT LAST_INSERT_ID()'';
repare o '' SELECT LAST_INSERT_ID()'' que é para obter o retorno do auto incremento .
Pois bem , definido meu primeiro comando de inserção, eu tenho um componente de conexao do firedac - TFDConnection, o qual vou usar para executar o comando anterior, porem apos executar o comando(com sucesso) a transacao é encerrada , como se eu ja tivesse comitado , porem eu estou desligando o autocomit. Exemplo:
db.TxOptions.AutoCommit := false;
db.TxOptions.EnableNested := true;
db.TxOptions.AutoStart := False;
db.TxOptions.AutoStop := False;
try
db.StartTransaction;
if db.InTransaction then
cod := dbAddPedido.ExecSQLScalar(
variavelComando
);
//apos dar o insert , neste ponto , tento executar um rollback como teste , porem obtenho um erro falando que a transacao esta fechada, porem
//eu nao commitei nada nao parei a transacao , o componente fechou a transacao sozinho.
dbAddPedido.Rollback;
except
end;
Paulo Abrantes
Curtir tópico
+ 0
Responder
Clique aqui para fazer login e interagir na Comunidade :)