Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Oracle
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 13-08-2005
Jose Manuel Jose Manuel is offline
Miembro
 
Registrado: may 2003
Posts: 112
Poder: 22
Jose Manuel Va por buen camino
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;
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


La franja horaria es GMT +2. Ahora son las 06:11:19.


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