Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 11-11-2022
kainchu3102 kainchu3102 is offline
Miembro
 
Registrado: jul 2021
Posts: 79
Poder: 3
kainchu3102 Va por buen camino
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;   }
Responder Con Cita
  #2  
Antiguo 11-11-2022
Avatar de mRoman
mRoman mRoman is offline
Miembro
 
Registrado: nov 2003
Posts: 599
Poder: 21
mRoman Va por buen camino
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.
__________________
Miguel Román

Afectuoso saludo desde tierras mexicanas....un aguachile?, con unas "cetaseas" bien "muertas"?, VENTE PUES !!
Responder Con Cita
  #3  
Antiguo 11-11-2022
kainchu3102 kainchu3102 is offline
Miembro
 
Registrado: jul 2021
Posts: 79
Poder: 3
kainchu3102 Va por buen camino
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
Responder Con Cita
  #4  
Antiguo 11-11-2022
cloayza cloayza is offline
Miembro
 
Registrado: may 2003
Ubicación: San Pedro de la Paz, Chile
Posts: 913
Poder: 23
cloayza Tiene un aura espectacularcloayza Tiene un aura espectacular
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
Responder Con Cita
  #5  
Antiguo 11-11-2022
kainchu3102 kainchu3102 is offline
Miembro
 
Registrado: jul 2021
Posts: 79
Poder: 3
kainchu3102 Va por buen camino
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.
Responder Con Cita
  #6  
Antiguo 11-11-2022
kainchu3102 kainchu3102 is offline
Miembro
 
Registrado: jul 2021
Posts: 79
Poder: 3
kainchu3102 Va por buen camino
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
Responder Con Cita
  #7  
Antiguo 12-11-2022
cloayza cloayza is offline
Miembro
 
Registrado: may 2003
Ubicación: San Pedro de la Paz, Chile
Posts: 913
Poder: 23
cloayza Tiene un aura espectacularcloayza Tiene un aura espectacular
Que bien...me alegra el haber aportado...
Responder Con Cita
  #8  
Antiguo 12-11-2022
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.044
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por kainchu3102 Ver Mensaje
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.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Que es el update 3? Debo descargar el update 3? Nicomaco Varios 4 23-04-2009 00:53:24
deadlock update conflict with concurrent update! JuanErasmo Firebird e Interbase 6 10-07-2008 20:58:10
UPDATE con seccion llamada UPDATE sql's MyDAC karlaoax SQL 4 25-04-2007 22:10:50
OLD y NEW en UPDATE micayael Firebird e Interbase 3 20-10-2005 15:50:14


La franja horaria es GMT +2. Ahora son las 20:25:33.


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
Copyright 1996-2007 Club Delphi