Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Procedimientos Almacenados (https://www.clubdelphi.com/foros/showthread.php?t=77189)

guachalla 31-12-2011 01:21:44

Procedimientos Almacenados
 
Buenas noches...

Disculpen la molestia, soy nuevo en el foro, tengo una pregunta:

Tengo una tabla (solo para el control de los pagos, no de detalle de pagos que es otra tabla) donde se almacenan los datos de los pagos de los alumnos con los siquientes campos:
codigo, concepto, nro_cuota, monto_cuota, pagos_cuota, saldo_cuota, estado, cod_de_concepto
11....... PENSION .......1 ...........100 ...............0 ................100 ...........D ...........1
11....... PENSION .......2 ...........100 ...............0 ................100 ...........D ...........1
11....... PENSION .......3 ...........100 ...............0 ................100 ...........D ...........1
11....... PENSION .......4 ...........100 ...............0 ................100 ...........D ...........1
11....... PENSION .......5 ...........100 ...............0 ................100 ...........D ...........1
11....... PENSION .......n ...........100 ...............0 ................100 ...........D ...........1


Quisiera crear un procidimiento para que segun un monto(parametro) se actualice los datos supongamos que le envio 250 como parametro y en la tabla se deberia de actualizar de la siguiente manera

codigo, concepto, nro_cuota, monto_cuota, pagos_cuota, saldo_cuota, estado, cod_de_concepto
11....... PENSION .......1 ...........100 .............100 ................0 .............C ...........1
11....... PENSION .......2 ...........100 .............100 ................0 .............C ...........1
11....... PENSION .......3 ...........100 ..............50 ................50 ............P ...........1
11....... PENSION .......4 ...........100 ...............0 ................100 ...........D ...........1
11....... PENSION .......5 ...........100 ...............0 ................100 ...........D ...........1
11....... PENSION .......n ...........100 ...............0 ................100 ...........D ...........1

creo que se podria hacer con tres updates desde el cliente pero lo que quisiera es si se podria hacer un procedimiento almacenado donde solo envio el parametro del monto cobrado para que se procese en el servidor.

Gracias por sus comentarios y su ayuda.

Cañones 31-12-2011 02:48:55

En cuanto a usar un SP para esto me parece correcto ya que optimizas el uso de la red con el servidor.
Y el servidor es.....?
Saludos.

Casimiro Notevi 31-12-2011 14:34:18

Bienvenido a clubdelphi, ¿ya leiste nuestra guía de estilo?, gracias por tu colaboración.

guachalla 31-12-2011 15:31:29

Gracias por sus comentarios, el servidor es Firebird 2.0, gracias

guachalla 02-01-2012 02:27:49

Ya cree el SP siguiente:
Código SQL [-]
CREATE PROCEDURE ACT_COBRANZ(
  COD INTEGER,
  MONTO NUMERIC(12, 2),
  CODCON INTEGER)
AS
DECLARE VARIABLE MONTOX NUMERIC(12, 2);
DECLARE VARIABLE ESTADOX CHAR(1);
DECLARE VARIABLE CODX INTEGER;
DECLARE VARIABLE CODCONX INTEGER;
DECLARE VARIABLE NCUX SMALLINT;
DECLARE VARIABLE PRIMERPAGO SMALLINT;
DECLARE VARIABLE CUOTAX SMALLINT;
DECLARE VARIABLE DEUDOR CHAR(1);
DECLARE VARIABLE CUOTAACT SMALLINT;
DECLARE VARIABLE DEUDA_BSX NUMERIC(12, 2);
DECLARE VARIABLE DEUDA_ACT NUMERIC(12, 2);
BEGIN
  CODCONX = CODCON;
  CODX = COD;
  MONTOX = MONTO;
  CUOTAX = 0;
  DEUDOR = 'D';
  CUOTAACT = 0;

  WHILE (MONTOX>0)DO
      BEGIN
      FOR SELECT CNU,ESTADO,DEUDA_BS FROM COBRANZ 
      WHERE (COBRANZ.CODIGO=:CODX AND COBRANZ.OC =:CODCONX)
      INTO :CUOTAX,:ESTADOX,:DEUDA_BSX DO
      BEGIN
            IF (ESTADOX=DEUDOR) THEN
               CUOTAACT=CUOTAX;
               DEUDA_ACT=DEUDA_BSX;
            
            IF (MONTOX>=DEUDA_ACT) THEN
                BEGIN
                  UPDATE COBRANZ SET PAGO_BS =PAGO_BS+:DEUDA_ACT,DEUDA_BS=0,ESTADO='C' 
                  WHERE OC=:CODCONX AND CODIGO=:CODX AND CNU=:CUOTAX;
                  MONTOX = MONTOX - DEUDA_ACT;                         
                END
            else
            BEGIN
                UPDATE COBRANZ SET PAGO_BS =PAGO_BS+:MONTOX,DEUDA_BS=CARGO_BS-:MONTOX,ESTADO='D'
                 WHERE OC=:CODCONX AND CODIGO=:CODX AND CNU=:CUOTAX;
                 MONTOX = 0;
            END
      END
  END    
 
END;


sin embargo a veces sale un mensaje de conflicto de bloqueo en el primer UPDATE COBRANZ que estara mal? les agradezco su tiempo y ayuda


La franja horaria es GMT +2. Ahora son las 19:54:37.

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