Ver Mensaje Individual
  #5  
Antiguo 03-11-2022
novato_erick novato_erick is offline
Miembro
 
Registrado: ago 2010
Ubicación: Panamá
Posts: 396
Reputación: 14
novato_erick Va por buen camino
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;
        // Consulta la cantidad de cada articulo para aumentarlo
        stockactual := cantidadDisponibleinv
          (cdsAgregaProductosID_PRODUCTO.AsInteger);
        // aumentar cantidad al stock
        nuevacantStock := AumentaCantArticulos(cantdataset, stockactual); // Esta función hace una consulta en unTSQLQuery abajo   esta la consulta 
            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
Responder Con Cita