Ver Mensaje Individual
  #1  
Antiguo 20-10-2020
webmasterplc webmasterplc is offline
Miembro
 
Registrado: mar 2008
Posts: 277
Reputación: 19
webmasterplc Va por buen camino
Optimizacion de actualizacion de Campo

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;

Última edición por Neftali [Germán.Estévez] fecha: 20-10-2020 a las 17:19:09. Razón: Corregir la SQL para mejorar la visualizacion
Responder Con Cita