Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Firebird e Interbase
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 16-02-2018
Avatar de MAXIUM
MAXIUM MAXIUM is offline
Miembro
 
Registrado: may 2005
Posts: 1.485
Poder: 20
MAXIUM Va camino a la fama
Limitar el número de registros a guardar

Hola, aquí les traigo mis problemas nuevamente

En esta ocasión, me gustaría poder guardar en una tabla un log que vaya realizando cada usuario. Por supuesto una base de datos esta prácticamente limitada por el espacio en disco duro. Aún así, me gustaría poder limitar la cantidad de registro a por ejemplo 2.000 y cuando alcance el tope, se elimine el más antiguo.

No se si esto sea posible. Si no lo es, no importa

Lo que si me importa es que se guarde en la misma DB del servidor
Responder Con Cita
  #2  
Antiguo 16-02-2018
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.233
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por MAXIUM Ver Mensaje
...me gustaría poder limitar la cantidad de registro a por ejemplo 2.000 y cuando alcance el tope, se elimine el más antiguo.
Seguramente, de todo el problema que plantesas, esa sea la parte más sencilla.
Debería bastar con un Stored Procedure (por ejemplo) que cada vez que lo llames haga un Count de la tabla y elimine los más antiguos.
Si usas un campo autoincremental, no te haría falta ni siquiera el Count, bastaría con eliminar aquellos cuyo ID es menor que el máximo menos 2000.
Y seguro que pensando un poco salen más formas de hacerlo.

Cuando llamar a este SP dependerá de cómo estés implementando ese Log para todo lo que hace el usuario, cosa que se me antoja que no es fácil (al menos si se intenta hacer bien).

Si das un poco más de información de cómo estás implementando ese LOG, tal vez podamos afinar más la respuesta.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #3  
Antiguo 16-02-2018
Avatar de MAXIUM
MAXIUM MAXIUM is offline
Miembro
 
Registrado: may 2005
Posts: 1.485
Poder: 20
MAXIUM Va camino a la fama
Gracias Neftali.

Básicamente registrar fecha-hora, registro que fue eliminado, editado o agregado y el usuario que lo realizó.
Responder Con Cita
  #4  
Antiguo 16-02-2018
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola.
Cita:
Empezado por MAXIUM Ver Mensaje
Gracias Neftali.

Básicamente registrar fecha-hora, registro que fue eliminado, editado o agregado y el usuario que lo realizó.
Podes crear un archivo donde guardar toda la actividad que realiza un usuario sobre determinada tabla y al efecto crear un trigger que realize la tarea, por ejemplo:
Código SQL [-]
SET TERM ^ ;

CREATE OR ALTER TRIGGER PERSONA_BI FOR PERSONA
ACTIVE BEFORE INSERT OR UPDATE OR DELETE POSITION 0
AS
  DECLARE VARIABLE V_ACTION   VARCHAR(12);
  DECLARE VARIABLE V_ID       INTEGER;
  DECLARE VARIABLE V_NOMBRE   VARCHAR(40);
  DECLARE VARIABLE V_DIRECC   VARCHAR(40);
  DECLARE VARIABLE V_LOCALID  INTEGER;
  DECLARE VARIABLE V_TELEF    VARCHAR(15);
BEGIN

  IF (INSERTING) THEN  
  BEGIN
    IF (NEW.ID IS NULL) THEN
      NEW.ID       = GEN_ID(G_PERSONA, 1);
    V_ID           = NEW.ID;
    V_NOMBRE       = NEW.NOMBRE;
    V_DIRECC       = NEW.DOMICILIO;
    V_LOCALID      = NEW.LOCALID;
    V_TELEF        = NEW.TELEFONO;
    V_ACTION       = 'INSERCION';
  END
  ELSE IF (UPDATING) THEN  
  BEGIN
    V_ID     = OLD.ID;
    V_NOMBRE       = NEW.NOMBRE;
    V_DIRECC       = NEW.DOMICILIO;
    V_LOCALID      = NEW.LOCALIDAD_ID;
    V_TELEF        = NEW.TELEFONO;
    V_ACTION       = 'MODIFICACION';
  END
  ELSE             
  BEGIN 
    V_ID           = OLD.ID;
    V_NOMBRE       = OLD.NOMBRE;
    V_DIRECC       = OLD.DOMICILIO;
    V_LOCALID      = OLD.LOCALIDAD_ID;
    V_TELEF        = OLD.TELEFONO;
    V_ACTION       = 'BORRADO';
  END

 
  INSERT INTO PERSONA_HISTO (ID, PERSONAID, NOMBRE, DOMICILIO, LOCALIDADID,
    TELEFONO, USER_NAME, DATETIME, REMOTE_ADDR, SESSION_ID, TYPE_ACTION)

  VALUES (GEN_ID(G_PERSONA_HISTO, 1), :V_ID, :V_NOMBRE, :V_DIRECC, :V_LOCALID, :V_TELEF, 
    (SELECT CURRENT_USER FROM RDB$DATABASE),
    (SELECT CURRENT_TIMESTAMP FROM RDB$DATABASE),
    (SELECT RDB$GET_CONTEXT('SYSTEM', 'CLIENT_ADDRESS') FROM RDB$DATABASE),
    (SELECT RDB$GET_CONTEXT('SYSTEM', 'SESSION_ID') FROM RDB$DATABASE),
    :V_ACTION);

END^

SET TERM ; ^
Donde PERSONA es la tabla a controlar y G_PERSONA su secuenciador. Mientras que PERSONA_HISTO sería la tabla de historial y G_PERSONA_HISTO su secuenciador.

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #5  
Antiguo 16-02-2018
Avatar de MAXIUM
MAXIUM MAXIUM is offline
Miembro
 
Registrado: may 2005
Posts: 1.485
Poder: 20
MAXIUM Va camino a la fama
Cómo siempre, la mejor comunidad Analizaré las propuestas. Gracias
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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
Limitar el numero de lineas de detalle a imprimir identsoft Impresión 3 04-12-2012 17:52:49
Firebird Limitar Numero de registros JXJ Firebird e Interbase 3 26-08-2011 18:42:07
limitar Número de caracteres de un DBGRid georgejg Varios 8 29-04-2008 15:21:26
Limitar ingreso a un solo numero arespremium OOP 16 26-09-2007 20:58:36
Limitar número de usuarios concurrentes mlara Firebird e Interbase 0 25-11-2006 22:13:38


La franja horaria es GMT +2. Ahora son las 17:19:32.


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