Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Update Con For (https://www.clubdelphi.com/foros/showthread.php?t=95960)

kainchu3102 11-11-2022 05:35:00

Update Con For
 
Buenas gente estoy trabajando de hacer un delete con a dos tablas Venta y detalle_venta, pero a las vez en detalle_venta necesito que me devuelva los produtos en stock, intenten hacer con ciclo por pero parece que no pego una, por favor necesitaria que me orienten un poco desde ya muy agradecido
Código Delphi [-]
   with MDATOS_SAGA.FDQSEL_ABM_VEN2 Do
              Begin
              SQL.Clear;
              SQL.Add('SELECT * FROM det_venta WHERE id_ven_detven = :ID_DETVEN');
              ParamByName('ID_DETVEN').AsInteger := ID_VENTA;
              open;
             C := MDATOS_SAGA.FDQSEL_ABM_VEN2.Fields.FieldByName('can_detven').AsInteger;
             end;

             With MDATOS_SAGA.FDQABM_DET_VENTA do
               Begin
               SQL.Clear;
               SQL.Add ('DELETE FROM det_venta WHERE id_ven_detven = :ID_DETVENE');
               Params.ParamByName('ID_DETVENE').AsInteger := ID_VENTA;
               ExecSQL
               end;

               I:= MDATOS_SAGA.FDQSEL_ABM_VEN2.Fields.FieldByName('id_pro_detven').AsInteger;

              for I :=0  to DBGDET_VENTA.SelectedRows.Count -1 do

              begin
               with MDATOS_SAGA.FDQACTUAL_STOCK do
                begin
                SQL.Clear;
                SQL.Add('UPDATE producto SET producto.sto_prod = producto.sto_prod + :CANT1  WHERE producto.id_prod = :PROD');
                Params.ParamByName('CANT1').AsInteger := C;
                Params.ParamByName('PROD').AsInteger := I;
                ExecSQL;
                end;
                end;

               MDATOS_SAGA.FDTDET_VENTA.Refresh;
               FORMABMVENTA.DBGABMVENTA.DataSource.DataSet.Refresh;

               ID_VENTA := 0;

               MessageDlg('SU REGISTRO FUE ELIMINADO CON EXITO!.', mtInformation,[mbOk], 0, mbOk);
             end;   }

mRoman 11-11-2022 16:48:06

Hola que tal.

Para poderte orientar mejor, comentanos que B.D. estas usando y que componentes.

Por lo pronto, te diré que deberias aprovechar las virtudes de las bases de datos SQL (Firebird, SQL Server, etc), ya que puedes utilizar los triggers que ejecutan instrucciones SQL cada vez que insertas, borras o modificas.

Asi que yo lo resolvería usando trigger y procedimientos almacenados.

Saludos.

kainchu3102 11-11-2022 17:29:53

Bd
 
Hola mucho gusto, estoy usando Mysql Worbench, y ese procendimiento lo desde un Boton.Click pense con el for se podia recorrer todas las ID que se eliminan y devolver la cantidad de producto de una venta anulada. pero no me sale. muchas gracias por tu respuesta

cloayza 11-11-2022 19:34:42

Estimado kainchu3102,debe ser mas claro en la explicación de su duda o problema. Como le indica el colega mRoman, esto podria ser implementado con triggers (Disparadores) en la base de datos.

A continuación le propongo una opción de acuerdo a lo que creo comprender de su problema...

Código Delphi [-]
{1: Recuperar registro de ventas}
QVenta.Sql.Clear;
QVenta.Sql.Add('Select id_venta ');
QVenta.Sql.Add('from Ventas');
QVenta.Sql.Add('where id_venta=:id_Venta');
QVenta.ParamByName('id_venta').AsInteger:=Id_Venta;
QVenta.Open;

{2: Recuperar detalle de la venta}
QVentaDet.Sql.Clear;
QVentaDet.Sql.Add('Select id_pro_detven, can_detven)'
QVentaDet.Sql.Add('From det_venta)'
QVentaDet.Sql.Add('Where id_ven_detven = :id_Venta)';
QVentaDet.ParamByName('id_venta').AsInteger:=Id_Venta;
QVentaDet.Open;

{3: Ciclo para recorrer detalle de ventas y Reversar stock a tabla Productos}

QReversaStock.SQL.Clear;
QReversaStock.SQL.Add('Update Producto');
QReversaStock.SQL.Add('SET producto.sto_prod = producto.sto_prod + :CANT1');
QReversaStock.SQL.Add('Where producto.id_prod = :PROD');

While not QVentaDet.Eof Do
begin
     QReversaStock.Params.ParamByName('CANT1').AsInteger := QVentaDet.FieldByName('CAN_DETVEN').AsInteger;
     QReversaStock.Params.ParamByName('PROD').AsInteger  := QVentaDet.FieldByName('ID_PRO_DETVEN').AsInteger;
     QReversaStock.ExecSQL;

     QVentaDet.Next;
end;

{5: Eliminar Detalle de venta}
QDelete.Sql.Clear;
QDelete.Sql.Add('Delete From Det_venta');
QDelete.Sql.Add('Where id_ven_detven = :ID_DETVENE');
QDelete.ParamByName('ID_DETVENE').AsInteger:=Id_Venta;
QDelete.ExecSQL;

{6: Eliminar venta}
QDelete.Sql.Clear;
QDelete.Sql.Add('Delete From Ventas');
QDelete.Sql.Add('Where id_venta = :ID_Venta');
QDelete.ParamByName('id_venta').AsInteger:=Id_Venta;
QDelete.ExecSQL;

Espero le ayude...Saludos cordiales

kainchu3102 11-11-2022 20:50:24

Bd
 
Nose como agradecerte me sirvio de mucho, siempre entro y cunsulta alguna veces son buenas otras no, pero creo que deberían premiar a los que ayudamos o ponemos el granito de arena, o el club tambien deberia pedir una cuenta bancaria aparte de otros datos para que gentilmente se pueda cobrar una consulta, porque alguna veces vale la pena ayudar o viceversa. gracias nuevamente.

kainchu3102 11-11-2022 22:56:06

codigo
 
Código Delphi [-]
procedure TFORMVENTA.Eliminar1Click(Sender: TObject);

begin
if ID_VENTA  <> 0 then
 begin
   if MessageDlg('SU REGISTRO SERA ELIMINADO, ¿REALMENTE DESEA ELIMINAR REGISTRO?',mtConfirmation,mbOKCancel,0) <> idOk then
   begin
   ID_VENTA  := 0;
   abort
   end
   else
    begin
       with MDATOS_SAGA.FDQSEL_ABM_VEN2 Do
       Begin
       SQL.Clear;
       SQL.Add('SELECT  id_pro_detven, can_detven FROM det_venta WHERE id_ven_detven = :ID_DETVEN');
       ParamByName('ID_DETVEN').AsInteger := ID_VENTA;
       open;
      end;

        with MDATOS_SAGA.FDQACTUAL_STOCK do
      begin
      SQL.Clear;
      SQL.Add('UPDATE producto SET producto.sto_prod = producto.sto_prod + :CANT1  WHERE producto.id_prod = :PROD');
      While not MDATOS_SAGA.FDQSEL_ABM_VEN2.Eof Do
        begin
            Params.ParamByName('CANT1').AsInteger :=  MDATOS_SAGA.FDQSEL_ABM_VEN2.FieldByName('CAN_DETVEN').AsInteger;
            Params.ParamByName('PROD').AsInteger  :=  MDATOS_SAGA.FDQSEL_ABM_VEN2.FieldByName('ID_PRO_DETVEN').AsInteger;
            ExecSQL;
            MDATOS_SAGA.FDQSEL_ABM_VEN2.Next;
        end;
       end;

         With MDATOS_SAGA.FDQABM_VENTA do
         Begin
           SQL.Clear;
           SQL.Add ('DELETE FROM venta WHERE id_ven = :ID_VENE');
           Params.ParamByName('ID_VENE').AsInteger := ID_VENTA;
           ExecSQL;
           if RowsAffected = 1 then


            With MDATOS_SAGA.FDQABM_DET_VENTA do
           Begin
           SQL.Clear;
           SQL.Add ('DELETE FROM det_venta WHERE id_ven_detven = :ID_DETVENE');
           Params.ParamByName('ID_DETVENE').AsInteger := ID_VENTA;
           ExecSQL;


           end;
           MDATOS_SAGA.FDTVENTA.Refresh;
           DBGVENTA.DataSource.DataSet.Refresh;

           MDATOS_SAGA.FDTDET_VENTA.Refresh;
           DBGDET_VENTA.DataSource.DataSet.Refresh;
         end;
      end;
 end
  else
 begin
    ShowMessage('DEBE SELECCIONAR UN REGISTRO DE LA GRILLA PARA ELIMINAR, VERIFICAR');
 end;
end;

Asi quedo :)

cloayza 12-11-2022 00:11:57

Que bien...me alegra el haber aportado...

Casimiro Notevi 12-11-2022 07:34:50

Cita:

Empezado por kainchu3102 (Mensaje 549146)
Nose como agradecerte me sirvio de mucho, siempre entro y cunsulta alguna veces son buenas otras no, pero creo que deberían premiar a los que ayudamos o ponemos el granito de arena, o el club tambien deberia pedir una cuenta bancaria aparte de otros datos para que gentilmente se pueda cobrar una consulta, porque alguna veces vale la pena ayudar o viceversa. gracias nuevamente.

Arriba del todo tienes un par de enlaces por si quieres colaborar: teaming.net si estás en España y paypal para cualquier lugar del mundo.
Saludos.
:)


La franja horaria es GMT +2. Ahora son las 22:10:26.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi