Ver Mensaje Individual
  #1  
Antiguo 22-08-2021
Avatar de Dexter182
Dexter182 Dexter182 is offline
Miembro
 
Registrado: jul 2005
Ubicación: Argentina
Posts: 95
Reputación: 19
Dexter182 Va por buen camino
Ayuda con refactorización

Hola a todos!

Otra vez molestando...

Quiero armar un procedimiento para no acceder directamente a Modulo.Consulta_Int y a diferencia de otro hilo que abrí, se me presenta la dificultad de que voy cambiando el valor del parámetro en el loop y no tengo la menor idea de como solucionarlo.
El código es el siguiente:

Código Delphi [-]
Grid.Perform(WM_SETREDRAW, 0, 0);

Try
  Modulo.Consulta_Int.Active := FALSE;
  Modulo.Consulta_Int.SQL.Clear;
  Modulo.Consulta_Int.SQL.Add('SELECT Cod_Producto, Desc_Producto, Precio FROM Productos');
  Modulo.Consulta_Int.SQL.Add('WHERE Cod_Producto = : pCod_Producto');

  Repeat
    ParseRecord(Datos[i],Delimitador, Codigo_Articulo, Precio_Articulo);

    Modulo.Consulta_Int.Active := FALSE;
    Modulo.Consulta_Int.Parameters.ParamByName('pCod_Producto').Value := Codigo_Articulo;
    Modulo.Consulta_Int.Active := TRUE;

    If not Modulo.Consulta_Int.IsEmpty then //Si el artículo existe en la base de datos

    //Y si el precio anterior y el nuevo son diferentes
    If Modulo.Consulta_Int.FieldByName('Precio').AsString <> Precio_Articulo then
      begin
        //Rellena el StringGrid con los datos de los artículos a modificar
        Grid.Cells[0, Grid.RowCount -1] := Modulo.Consulta_Int.FieldByName('Cod_Producto').AsString;
        Grid.Cells[1, Grid.RowCount -1] := Modulo.Consulta_Int.FieldByName('Desc_Producto').AsString;
        Grid.Cells[2, Grid.RowCount -1] := Modulo.Consulta_Int.FieldByName('Precio').AsString;
        Grid.Cells[3, Grid.RowCount -1] := Precio_Articulo;
        //Si el precio nuevo es un número válido
        If (TryStrToFloat(Grid.Cells[3, Grid.RowCount -1], temp) = TRUE) then
          Grid.Cells[4, Grid.RowCount -1] := Format('%.2n',[((StrToFloat(Precio_Articulo) / Modulo.Consulta_Int.FieldByName('Precio').AsFloat) - 1) * 100]);
        Grid.RowCount := Grid.RowCount + 1;
     end
    Else
      Omitidos := Omitidos + 1;

    i := i + 1;

  Until i > Datos.Count -1;

Finally
  Grid.Perform(WM_SETREDRAW, 1, 0);
  Grid.Invalidate;
end; {try}

Cualquier consejo será bienvenido.

Saludos!!!
Responder Con Cita