Estimado Dexter182, le propongo esta opción.
La idea es crear una clase que se encarga de recuperar la información requerida del producto a través del código.
La clase se encarga de realizar la consulta y asignar los datos a sus propiedades. Como no indica que componentes de acceso a datos utiliza, asumo que son FireDac (TFDConnection, TFDQuery).
Por supuesto los puede cambiar por los que usa.
Código Delphi
[-]
TProducto=Class
private
FConexion:TFDConnection;
fQry :TFDQuery;
fCod_Producto :string;
fDesc_Producto:String;
fPrecio :Single;
public
constructor Create(AConexion:TFDConnection);
destructor Destroy;
property Cod_Producto : integer read fCod_Producto write fCod_Producto;
property Desc_Producto: String read fDesc_Producto write fDesc_Producto;
property Precio : single read fPrecio write fPrecio;
function GetData(pCod_Producto):Boolean;
end;
implementation
constructor TProducto.Create(AConexion:TFDConnection);
begin
fConexion:=AConexion;
fqry := TFDQuery.Create(nil);
fqry.Connection := fConexion;
end;
destructor TProducto.Destroy;
begin
fqry.close;
fqry.free;
fConexion:=nil;
end;
function TProducto.GetData(pCod_Producto:String):Boolean;
begin
try
result:=false;
fqry.Sql.Add('SELECT Cod_Producto, Desc_Producto, Precio ');
fqry.Sql.Add('FROM Productos');
fqry.Sql.Add('WHERE Cod_Producto = : pCod_Producto');
fqry.Parameters.ParamByName('pCod_Producto').Value := pCod_Producto;
fqry.Active:=true;
result:=not fQry.IsEmty;
if result then
begin
fCod_Producto :=fqry.FieldByName('Cod_Producto').AsString;
fDesc_Producto:=fqry.FieldByName('Desc_Producto').AsString;
fPrecio :=fqry.FieldByName('Precio').AsSingle;
end;
finally
fqry.close;
end;
end;
....
Var
Producto:TProducto;
begin
Grid.Perform(WM_SETREDRAW, 0, 0);
Try
Producto:=TProducto.Create(Conexion_A_DB);
Repeat
ParseRecord(Datos[i],Delimitador, Codigo_Articulo, Precio_Articulo);
If Producto.GetData(Codigo_Articulo) then
If Producto.Precio <> StrToFloat(Precio_Articulo) then
begin
Grid.Cells[0, Grid.RowCount -1] := Producto.Cod_Producto;
Grid.Cells[1, Grid.RowCount -1] := Producto.Desc_Producto;
Grid.Cells[2, Grid.RowCount -1] := Producto.Precio;
Grid.Cells[3, Grid.RowCount -1] := Precio_Articulo;
If (TryStrToFloat(Grid.Cells[3, Grid.RowCount -1], temp) = TRUE) then
Grid.Cells[4, Grid.RowCount -1] := Format('%.2n',[((StrToFloat(Precio_Articulo) / Producto.Precio).AsFloat) - 1) * 100]);
Grid.RowCount := Grid.RowCount + 1;
end
Else
Omitidos := Omitidos + 1;
i := i + 1;
Until i > Datos.Count -1;
Finally
Producto.free;
Grid.Perform(WM_SETREDRAW, 1, 0);
Grid.Invalidate;
end;
end;
End.
Espero que esta sugerencia le sirva.
Saludos cordiales