Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Oracle (https://www.clubdelphi.com/foros/forumdisplay.php?f=22)
-   -   Iniciar nº secuencia el primer día del año (https://www.clubdelphi.com/foros/showthread.php?t=24277)

Jose Manuel 13-08-2005 21:36:45

Iniciar nº secuencia el primer día del año
 
Trabajo con D6 con Update2, componentes ODACnet 4.50.3.24 y Oracle 9i y tengo el siguiente problema:

En una tabla he creado un campo llamado N_NUM_ORDEN, que se actualiza con el valor de una “secuencia” que se “dispara” al insertar un registro.

Los códigos de la secuencia y del disparador son:

Código:

CREATE SEQUENCE "DESARROLLO"."TA_LIQ_NUM_ORDEN" INCREMENT BY 1
    START WITH 5000 MAXVALUE 99999 MINVALUE 1 NOCYCLE
    NOCACHE ORDER;

Código:

CREATE OR REPLACE TRIGGER "DESARROLLO"."TA_LIQ_GENERAR_NUM_ORDEN"
BEFORE INSERT OR UPDATE OF "NUM_ORDEN" ON "REGISTRO"
FOR EACH ROW
begin
  if :new.num_orden is null then
  select TA_LIQ_NUM_ORDEN.NextVal
  into :new.num_orden
  from Dual;
  end if;
end;

Aunque ambos funcionan correctamente, yo necesito lo siguiente:

1º Que la secuencia se reinicie siempre a 5000 el primer día del año. ¿Se puede modificar desde Delphi la SEQUENCE, o como podría hacerse? La única forma que conozco es borrar la SEQUENCE y volver a crearla.
2º El nº de orden que me devuelve la “SEQUENCE”, lo graba correctamente en la base de datos, pero yo quisiera saber que nº ha puesto sin tener que hacer una consulta, pues es necesario mostrar el nº de orden del registro grabado.
El campo “Num_Orden.Text” lo dejo en blanco cuando quiero que se dispare la secuencia, es decir que si escribo un nº no se dispara, esto lo hago para grabar directamente nº del 1 al 5000.
¿La pregunta es cómo paso el valor que me devuelve la secuencia al campo “Num_orden.text” o a cualquier otra variable que pueda manejar?

Este es parte del codigo utilizado para insertar el registro.


Código:

Procedure  TfLiq.grabaSQLliq;
begin
  fdm.OraSQL_liq.SQL.clear;
  fdm.OraSQL_liq.SQL.Text:=
  'INSERT INTO Desarrollo.registro'+#13+
  '(C_NUM_OFICINA, N_NUM_YEAR, N_NUM_ORDEN)'+#13+
  ' VALUES '+#13+
  '(:C_NUM_OFICINA, :N_NUM_YEAR, :N_NUM_ORDEN,'+#13+
  'RETURNING'+#13+ 
  ' N_NUM_ORDEN'+#13+
  'INTO'+#13+
  ' :N_NUM_ORDEN';

    fdm.OraSQL_liq.ParamByName('C_NUM_OFICINA').AsString  := num_oficina.text;
    fdm.OraSQL_liq.ParamByName('N_NUM_YEAR').AsString    := Num_year.text;
    fdm.OraSQL_liq.ParamByName('N_NUM_ORDEN').AsString    := Num_Orden.Text;

    fdm.OraSQL_liq.prepared;
    fdm.OraSQL_liq.execute;

    Num_orden.text:= fdm.OraSQL_liq.ParamByName('N_NUM_ORDEN').AsString;
End;



La franja horaria es GMT +2. Ahora son las 09:57:06.

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