Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Firebird e Interbase (https://www.clubdelphi.com/foros/forumdisplay.php?f=19)
-   -   Genrar registros a partir de una fecha y numero (https://www.clubdelphi.com/foros/showthread.php?t=15744)

mosorio 03-11-2004 18:55:24

Genrar registros a partir de una fecha y numero
 
Hola compañeros,
Después de tanto tiempo, vuelvo a consultar en el foro, estaba bastante alejado por otras obligaciones que me impedían llegar, pero aqui estamos.
Al grano.
Tengo una fecha ej: 01-10-03 y una cantidad ej: 10. Necesito generar una cantidad de registros = 10 con un campo de fecha a partir de la fecha dada, claro esta que debe ser independiente del dia, es decir el día puede varia a 15-10-03 ó 11-10-03.
He buscado en los otros registros del foro y no he encontrado algo similar que me permita dar un inicio.

Gracias de antemano.
Nota: hacerlo en la misma BD y no en código Delphi.

Gracias nuevamente.

celades 04-11-2004 16:08:03

Hola

Lo que he entendido es esto

Código SQL [-]
cREATE PROCEDURE Inserta_dates (data date,n integer)
AS
declare variable i integer;
begin
i=0;
while (:i<:n) do
begin
insert into tabla_dates (data) values (:data+:i);
i=:i+1;
end
end

Saludos

mosorio 05-11-2004 09:40:16

Hola, Ya he logrado hacerlo, y por si a alguien le sirve, lo coloco aquí, creo que es importante para alguien que quiera hacer un programa donde se calcular el número de cuotas que se deben pagar en un crédito. Claro que la pega que tengo hasta ahora y que aún no he realizado es el calcular la cuota a partir de una formula dada, que sería lo optimo para el funcionamiento del mismo. Si alguien tiene una idea para completar el procedure que lo ponga aqui.
Ahí va:
Cita:

/* Procedure para generar el número de cuotas de un crédito
04/11/2004 : mosorio
Ver 1.0
*/

CREATE PROCEDURE GENERARCUOTAS (
IDOBLIGA INTEGER, INICIOPAGO DATE, CUOTAS INTEGER,
VALORCUOTA NUMERIC(12,2))
/* Retorna la última fecha de pago */
RETURNS ( FINALIZAPAGO TIMESTAMP)
AS
DECLARE VARIABLE INC INTEGER;
DECLARE VARIABLE DIA INTEGER;
DECLARE VARIABLE MES INTEGER;
DECLARE VARIABLE ANYO INTEGER;
DECLARE VARIABLE FECHACUOTA TIMESTAMP;
BEGIN
DIA = EXTRACT(DAY FROM :INICIOPAGO);
MES = EXTRACT(MONTH FROM :INICIOPAGO);
ANYO = EXTRACT(YEAR FROM :INICIOPAGO);
INC = 1;
FECHACUOTA = CAST(DIA||'/'||MES||'/'||ANYO AS TIMESTAMP);
WHILE (INC <= :CUOTAS) DO
BEGIN
INSERT INTO
DETALLEOBLIGACION (IDOBLIGACION, CUOTANUM, VALOR, FECHA, ESTADO)
VALUES
(:IDOBLIGA, :INC, :VALORCUOTA, :FECHACUOTA, 'PENDIENTE');

MES = MES + 1;
IF (MES = 13) THEN
BEGIN
ANYO = ANYO + 1;
MES = 1;
END
INC = INC + 1;
FECHACUOTA = CAST(DIA||'/'||MES||'/'||ANYO AS TIMESTAMP);
END
FINALIZAPAGO = :FECHACUOTA;
END

Habrán algunas cosas que no le serviran, pero la idea general es esta.
Lo he implementado en Firebird 1.5.1 y funciona correctamente.
El campo de VALORCUOTA, se puede asignar mediante una formula que la genere, esto es lo que aún no se como implementar, ya que como todos los comercios implementan operaciones distintas y porcentajes dif., no se como
hacerlo, es por tanto si alguien tiene aportaciones bienvenida sean.
También se le pueden adicionar cosas, para eso esta o mejorar, a ver que opinan los expertos en SQL, yo soy novato hago lo que puedo.

Saludos

Hago la anotación que he utilizado algún codigo de este mismo foro que me dio la idea y complementarlo.


La franja horaria es GMT +2. Ahora son las 06:53:24.

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