Para salir de la duda y probablemente no se si será un comportamiento que no pueda soportar DBXExpress ejemplo:
Código Delphi
[-]
trnActualizaStock := dmConecta.FBLINUXCONECTION.BeginTransaction;
try
cdsAgregaProductos.First;
while not cdsAgregaProductos.Eof do
begin
cantdataset := cdsAgregaProductosCANTIDAD.AsFloat;
stockactual := cantidadDisponibleinv
(cdsAgregaProductosID_PRODUCTO.AsInteger);
nuevacantStock := AumentaCantArticulos(cantdataset, stockactual); with dmComprar.qAumentaStock do
begin
sql.Clear;
sql.Text := 'UPDATE ARTICULOS SET CANTIDAD = :CANTIDAD, ' +
'FECHA_INGRESOART= :FECHA_INGRESOART WHERE ID_ARTICULO = :ID_ARTICULO';
ParamByName('FECHA_INGRESOART').AsDateTime :=
dtpFechaIngresoCompra.DateTime;
ParamByName('CANTIDAD').AsFloat := nuevacantStock;
ParamByName('ID_ARTICULO').AsInteger :=
cdsAgregaProductosID_PRODUCTO.AsInteger;
Execsql;
end;
cdsAgregaProductos.Next;
end;
dmConecta.FBLINUXCONECTION.CommitFreeAndNil(trnActualizaStock);
Except
On e: exception do
begin
dmconecta.FBLINUXCONECTION.RollbackFreeAndNil(trnActualizaStock);
ShowMessage('Error Encontrado' + e.Message);
dmConecta.RegistraLog(Variables.Usuario + ' CON ERROR AL ACTUALIZAR CANTIDADES: ' +
e.Message);
Exito := False;
Raise;
end;
Código Delphi
[-]
function TfrmCompras.cantidadDisponibleinv(idartinv: Integer): Double;
begin
with dmComprar.qConsultaCantidadArt do
begin
sql.Clear;
sql.Add('select articulos.CANTIDAD from articulos ');
sql.Add('where articulos.ID_ARTICULO = :idarticulo');
Params.ParamByName('idarticulo').AsInteger := idartinv;
Open;
end;
Result := dmComprar.qConsultaCantidadArtCANTIDAD.AsFloat;
dmComprar.qConsultaCantidadArt.Close;
end;
dentro de mi inicio de transacción estoy haciendo una consulta que no tiene que ver con un insert para devolver el resultado esto será esta la causa que la transacción no se realize correctamente?
Saludos