¿Por qué no haces algo parecido a esto y te evitas los bloqueos?
Código:
try
DMdoc.QRdocumentoSERIE.AsString := cbSerie.Text;
DMdoc.QRdocumentoNUMERO.AsInteger := StrToInt(edNumero.Text); // _ULTNUMTOCA_
DMdoc.QRdocumentoFECHA.AsDateTime := StrToDate(edFecha.Text);
DMdoc.QRdocumentoHORA.AsDateTime := StrToTime(edHora.Text);
DMdoc.QRdocumentoCLIENTE.AsInteger := StrToInt(edCodCliente.Text);
DMdoc.QRdocumento.Post;
// DMdoc.QRdocumento.Transaction.CommitRetaining; // ya se hace en el afterpost del dataset
except
try
for iIntentos:= 1 to _INTENTOSGRABAR_ do
begin
try
DMdoc.QRdocumento.Post;
break;
except
Inc( _ULTNUMTOCA_ );
DMdoc.QRdocumentoNUMERO.AsInteger := _ULTNUMTOCA_;
end;
end;
except // si finalmente no se logra guardar la linea, deshacerla
DMdoc.QRdocumento.Transaction.RollbackRetaining;
end;
end;