Buenas mi consulta tiene que ver mas con optimización de esta consulta que aunque hace lo que requiero que este caso es actualizar precios calculándolos en base a una tasa, una la hago general o por clasificación aquí adjunto mi código uso firebird 2.5 con firedac,
Código Delphi
[-]case rgtipoajuste.ItemIndex of
0: begin
with datos.sqlproductos do
begin
Close;
SQL.Clear;
SQL.Add('SELECT * from productos');
Open;
end;
while not datos.sqlproductos.Eof do
begin
precio1:=datos.sqlproductos.FieldByName('PRECIO1').AsCurrency;
precio2:=datos.sqlproductos.FieldByName('PRECIO2').AsCurrency;
precio3:=datos.sqlproductos.FieldByName('PRECIO3').AsCurrency;
precio4:=datos.sqlproductos.FieldByName('PRECIO4').AsCurrency;
precio5:=datos.sqlproductos.FieldByName('PRECIO5').AsCurrency;
precio6:=datos.sqlproductos.FieldByName('PRECIO6').AsCurrency;
vcodigo:=datos.sqlproductos.FieldByName('CODIGO').AsString;
nprecio1:=((precio1 / tasa_old) * tasa_new);
nprecio2:=((precio2 / tasa_old) * tasa_new);
nprecio3:=((precio3 / tasa_old) * tasa_new);
nprecio4:=((precio4 / tasa_old) * tasa_new);
nprecio5:=((precio5 / tasa_old) * tasa_new);
nprecio6:=((precio6 / tasa_old) * tasa_new);
with datos.sqlactualizar do
begin
Close;
SQL.Clear;
SQL.Add('UPDATE productos set PRECIO1 = :nprecio1, PRECIO2 = :nprecio2, PRECIO3 = :nprecio3, PRECIO4 = :nprecio4,
PRECIO5 = :nprecio5, PRECIO6 = :nprecio6 ');
SQL.Add('WHERE CODIGO = :CODIGO');
ParamByName('codigo').AsString:=vcodigo;
ParamByName('nprecio1').AsCurrency:=nprecio1;
ParamByName('nprecio2').AsCurrency:=nprecio2;
ParamByName('nprecio3').AsCurrency:=nprecio3;
ParamByName('nprecio4').AsCurrency:=nprecio4;
ParamByName('nprecio5').AsCurrency:=nprecio5;
ParamByName('nprecio6').AsCurrency:=nprecio6;
ExecSQL;
end;
datos.sqlproductos.Next;
end;
MessageBox(Handle, 'Precios Actualizados', PChar(Caption), MB_OK);
end;
1: begin
with datos.sqlproductos do
begin
Close;
SQL.Clear;
SQL.Add('SELECT * from productos');
SQL.Add('WHERE ID_LINEA = :linea ');
ParamByName('linea').AsString:= lkclinea.Value;
Open;
end;
while not datos.sqlproductos.Eof do
begin
precio1:=datos.sqlproductos.FieldByName('PRECIO1').AsCurrency;
precio2:=datos.sqlproductos.FieldByName('PRECIO2').AsCurrency;
precio3:=datos.sqlproductos.FieldByName('PRECIO3').AsCurrency;
precio4:=datos.sqlproductos.FieldByName('PRECIO4').AsCurrency;
precio5:=datos.sqlproductos.FieldByName('PRECIO5').AsCurrency;
precio6:=datos.sqlproductos.FieldByName('PRECIO6').AsCurrency;
vcodigo:=datos.sqlproductos.FieldByName('CODIGO').AsString;
nprecio1:=((precio1 / tasa_old) * tasa_new);
nprecio2:=((precio2 / tasa_old) * tasa_new);
nprecio3:=((precio3 / tasa_old) * tasa_new);
nprecio4:=((precio4 / tasa_old) * tasa_new);
nprecio5:=((precio5 / tasa_old) * tasa_new);
nprecio6:=((precio6 / tasa_old) * tasa_new);
with datos.sqlactualizar do
begin
Close;
SQL.Clear;
SQL.Add('UPDATE productos set PRECIO1 = :nprecio1, PRECIO2 = :nprecio2, PRECIO3 = :nprecio3,
PRECIO4 = :nprecio4, PRECIO5 = :nprecio5, PRECIO6 = :nprecio6 ');
SQL.Add('WHERE CODIGO = :CODIGO');
ParamByName('codigo').AsString:=vcodigo;
ParamByName('nprecio1').AsCurrency:=nprecio1;
ParamByName('nprecio2').AsCurrency:=nprecio2;
ParamByName('nprecio3').AsCurrency:=nprecio3;
ParamByName('nprecio4').AsCurrency:=nprecio4;
ParamByName('nprecio5').AsCurrency:=nprecio5;
ParamByName('nprecio6').AsCurrency:=nprecio6;
ExecSQL;
end;
datos.sqlproductos.Next;
end;
MessageBox(Handle, 'Precios Actualizados', PChar(Caption), MB_OK);
end;
end;