Ir al contenido


Foto

[RESUELTO] tabla con registros que se autoborren


  • Por favor identifícate para responder
31 respuestas en este tema

#1 luk2009

luk2009

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.040 mensajes
  • LocationSanto Domingo

Escrito 05 enero 2010 - 09:05

Hola a todos

Lo que deseo hacer es crear una tabla con registros que se borren en una fecha u hora especificas.

La idea es que algo no se refleje durante un intervalo de fechas y horas, pero luego de terminado este intervalo si quiero que se refleje.

ejemplo

cliente 
fechainicio
fechafin
horaini
horafin

Cual seria la mejor forma de hacerlo con un SP (store procedure) o desde el programa en delphi.

gracias por adelantado
  • 0

#2 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.448 mensajes
  • LocationMéxico

Escrito 05 enero 2010 - 09:08

Hola

Como que no entiendo bien a bien lo que necesitas hacer, ¿ será que quieres que se oculten en lugar de que se borren ?

Salud OS
  • 0

#3 luk2009

luk2009

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.040 mensajes
  • LocationSanto Domingo

Escrito 05 enero 2010 - 09:12

Vamos a poner en contexto el asunto.

Es un programa que maneja sistemas de alarmas, estas señales llegan desde diferentes clientes. En un momento dado se estan haciendo pruebas con un cliente o varios clientes y llegan muchas señales de esos clientes. La idea es poder decirle al sistema que si son esos clientes no haga nada durante el tiempo que esten en prueba.

Espero haberme explicado mas o menos claro.



  • 0

#4 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.448 mensajes
  • LocationMéxico

Escrito 05 enero 2010 - 09:15

Hola

Y porque no mejor agregar un campo de STATUS donde se indique que está en pruebas, una vez que se terminen le asignan el STATUS correspondiente.

Salud OS
  • 0

#5 luk2009

luk2009

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.040 mensajes
  • LocationSanto Domingo

Escrito 05 enero 2010 - 09:33

La idea es buena, pero como puede haber varios clientes en prueba o pasivos  al mismo tiempo, pero por intervalos diferentes tendria que tener muchos timers u otras cosas para poder establecer en que momento cambiar el status.

La idea de la tabla es porque puedo crear los registros y en el momento en que lleguen las fechas u horas correspondientes estos se borrarian y volverian estos clientes a estar activos.


  • 0

#6 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.448 mensajes
  • LocationMéxico

Escrito 05 enero 2010 - 09:45

Bueno,

De cualquier forma requieres de un operador para hacer al proceso ya sea de asignar la fecha y hora a ciertos clientes o asignarles un status a los mismos.

Veamos un ejemplo real de como sería esto que te digo.

Si sabemos que los clientes con status 0 son los activos y el status 1 los de prueba, solo asignas el status 1 a los clientes de pruebas y te olvidas de las fechas y horas, tu query funcionará para cualquier fecha y hora y solo harias esto:



sql
  1. SELECT * FROM clientes
  2. WHERE STATUS <> 1



En cambio si utilizas fechas y hora de los clientes se requiere de algo mas complejo, primero hacer una lista de clientes, luego determinar la fecha y hora que van a estar de prueba, si todos son al mismo tiempo esto no tiene mucho problema, pero si son en diferentes horarios y fechas, el asunto se complica y debes de hacer un query por cada fecha y hora.

Salud OS
  • 0

#7 Rolphy Reyes

Rolphy Reyes

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.092 mensajes
  • LocationRepública Dominicana

Escrito 05 enero 2010 - 09:51

Saludos.

A ver si entendí, dada una alerta de un cliente el mismo pasa a prueba, pero como se ha activado la alarma esta sigue enviando registros para indicar que existe una alarma porque todavía no se ha solucionado el problema.

Sí es así porque no "rechazas" esos registros nuevos hasta tanto tu usuario termina de realizar la prueba, dando esta por finalizada cambias tu estatus a pasivo.

Sigue dándonos pistas para poder seguirte.....
  • 0

#8 luk2009

luk2009

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.040 mensajes
  • LocationSanto Domingo

Escrito 05 enero 2010 - 10:04

No Rolphy la idea es que el supervisor establezca que uno o mas clientes van a estar pasivos o en prueba por un intervalo de tiempo especifico, el cual puede ser de dias u horas. Asi cuando llegue una señal de esos clientes el sistema no emite ninguna alerta.


hay varias razones por la que un sistema de alarmas se puede poner en pasivo o en prueba.
1.- cuando se esta instalando el sistema de alarmas
2.- porque haya algun problema con el sistema de alarmas y este enviando muchas señales
3.- porque los tecnicos esten haciendo alguna reparacion
etc

La idea es que mientras alguna de estas cosas suceden ese cliente no emita ninguna señal activa

pretendo hacerlo comparando el numero del cliente de la señal que llega con los numeros de los clientes en la tabla que quiero crear.

El problema es que deseo que esos registros se autoborren despues que se termine el intervalo de prueba o que ya no se desee que esten pasivos.

Es necesario que se autoborren porque si por ejemplo de 1:00pm a 5:25pm del dia X este cliente va a estar en prueba, no quiero que pase de ese tiempo y no me gustaria tener al programa haciendo una verificacion de los clientes en prueba todo el tiempo.




  • 0

#9 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.448 mensajes
  • LocationMéxico

Escrito 05 enero 2010 - 10:25

Hola

Yo sigo insistiendo con mi idea amigo, que pasa si de 1:00 a 2:00 los clientes 2,5,7,9 estan a prueba y de la 1:30 a las 2:30 los clientes 1,3,6,8 estan a prueba, como vas a hacer para que de la 1:30 a las 2:00 tengas a todos los clientes en el mismo rango.

¿ Me explico ? a veces hay que buscar la solución menos complicada, por eso te digo que si hubiese un campo de status, no importa a que hora sean las pruebas ni cuanto se tardan, mientras tenga el status de pasivo no lo va a mostrar o lo muestras depende como lo quieras ver.

Salud OS
  • 0

#10 Rolphy Reyes

Rolphy Reyes

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.092 mensajes
  • LocationRepública Dominicana

Escrito 05 enero 2010 - 10:29

Saludos.

Pues te recomiendo analizar la opción de Egostar con un campo Estatus.  A mí entender debe haber alguien (osea un usuario) que diga este cliente(s) está(n) en prueba desde este tiempo; y el usuario determine cuando se termina dicha prueba.

Ahora bien, puedes ver si encuentras en la Web algún componente tipo agenda o alerta del Outlook para que una vez digas estos clientes están en prueba hasta este periodo el componente haga estilo Reminder entonces en vez de mostrar dicho mensaje cambies el estatus.


  • 0

#11 luk2009

luk2009

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.040 mensajes
  • LocationSanto Domingo

Escrito 05 enero 2010 - 10:42

Gracias por sus respuestas.

Egostar no importaria si chocan las horas, porque cada registro es independiente.

La idea de Egostar es muy buena, pero tengo algunos incovenientes para usarla. Se puede dar el caso de que un cliente no haya sido registrado en la base de datos, pero esta comunicando señales. No le puedo poner un estatus, porque ese cliente todavia no existe.

Sin embargo si hay una tabla ese numero de cuenta que esta comunicando puede ser puesta en pasiva y no generar ninguna alerta.

Rolphy no es que quiera que solo se autoborren, claro que tambien podran borrarse manualmente. De cualquier manera aunque se use un campo status, tengo que hacer que el sistema lo maneje de forma automatica, pues no puede depender de un usuario recordar el cambiar el status de un cliente.

Por esta razon tengo que establecer un metodo que borre el registro o cambie el status tan pronto llega el final del intervalo de prueba.



  • 0

#12 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.448 mensajes
  • LocationMéxico

Escrito 05 enero 2010 - 10:47

La idea de Egostar es muy buena, pero tengo algunos incovenientes para usarla. Se puede dar el caso de que un cliente no haya sido registrado en la base de datos, pero esta comunicando señales. No le puedo poner un estatus, porque ese cliente todavia no existe.


Fijate, con la consulta que te puse al principio resuelves tu problema de tajo, es decir, solo vas a tener los usuarios que estan activos, los pasivos o nuevos que no tienen # de cliente y estan en pruebas no estarán en la consulta por lo que no tomarás esas señales como válidas.

Salud OS
  • 0

#13 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.448 mensajes
  • LocationMéxico

Escrito 05 enero 2010 - 10:49

Por el lado de el asunto de automatizar este proceso, me imagino que las alarmas envían cierto código para determinar si es una etapa de pruebas o una señal de auxilio silencioso, etc.

Pues tendrás que cachar esas señales para determinar cuando comienzan y cuando acaban las pruebas.

Salud OS
  • 0

#14 luk2009

luk2009

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.040 mensajes
  • LocationSanto Domingo

Escrito 05 enero 2010 - 10:53

Egostar pero como automatizo el cambio del status segun el intervalo de tiempo que quiero que permanezca asi.

Porque te reitero que no quiero que dependa del usuario, porque este podria olvidar cambiar el status.
necesito por lo menos una tabla de horas y fechas para automatizar esto o algun procedimiento almacenado que cambie el status si el tiempo de prueba a pasado
  • 0

#15 luk2009

luk2009

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.040 mensajes
  • LocationSanto Domingo

Escrito 05 enero 2010 - 10:54

No egostar las señales son las mismas en todo caso, lo que determina si esta en prueba o pasivo es el supervisor que se lo debe indicar al programa.
  • 0

#16 Delphius

Delphius

    Advanced Member

  • Administrador
  • 6.295 mensajes
  • LocationArgentina

Escrito 05 enero 2010 - 11:53

Hola,
Yo soy de la idea de que en cuanto se está pensando en borrar algún registro debe pensarcelo 5 veces.

Y lo digo porque no es deseable, en el mediano ni a largo plazo algo como eso. Uno de los motivos de porqué no es deseable la baja física es que se pierde información que puede ser útil o valiosa en el futuro. Imagínate que además de esto necesitas elaborar reportes y justo uno de ello consiste en una consulta sobre el listado de clientes que han estado "activo" en un rango de fechas, o ver el histórico para un cliente en particular.
Y ya saben... lo mucho que les gusta a los jefes los informes, lo gráficos, y esas cosillas que uno diría que son minúsculas. ;)

Por lo general, y es lo que se recomienda, en cambio, es el borrado lógico. En las tablas se agregan un campo booleano BORRADO. Análogo al campo STATUS que describe Eliseo.

Yo, en lo particular, interpreto una tabla más de interés en el contexto que describes: la tabla Activaciones. En esta tabla se van insertar los registros de cada activación para los clientes. Hay dos modos de verlo:
1. Un contexto simple: donde las activaciones se hacen en particular a cada cliente. Es decir:
Clientes - 1 --- M - Activaciones

2. Un contexto general y completo: en donde es posible tener un grupo de activaciones para un grupo determinado de clientes. Es decir:
Clientes - 1 --- M - DetalleActivaciones - M --- 1 - Activaciones

Ya sea el contexto 1 o 2 es necesario disponer, como describes, de los debidos campos de Fecha. De ese modo es posible llevar el registro de comienzo y fin de cada una. Ergo, es posible indirectamente determinar cuando cada cliente está activo.
Como dato, quizá a modo opcional (hace falta más análisis en esto) aunque lo recomiendo, es añadir el campo que señala Egostar en la tabla Clientes. No es por llevar la contraria pero creo que es necesario ambas cosas.

Repito nuevamente: la idea del borrado no es nada buena.... si tanto insistes, opta (como consejo) el borrado lógico. Aunque es redundante, como he dicho antes: si se sabe Inicio y Fin, se sabe por tanto cuando y durante está activa. Cuanto mucho, se puede disponer de un campo en activaciones (o detalle, según el contexto) a modo de ACTIVO o STATUS.

Como vez, de una u otra se llega al dicho campo. O es que todos estamos comprendiendolo mal.

De lo que si estoy seguro es que hay algo que no estás analizando ni describiendo en profundidad. Con el debido respeto.

Saludos,
  • 0

#17 luk2009

luk2009

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.040 mensajes
  • LocationSanto Domingo

Escrito 06 enero 2010 - 05:37

Gracias Delphius por tu respuesta.

Los registros de esta tabla no son necesarios mas que para referencia. Ya existe una tabla que guarda en registros todas las señales de todos los clientes.

El problema es que por ejemplo el cliente 0022 comienza a emitir señales activas es decir que abren un formulario que debe procesar el operador o usuario:

0022  ba04  robo zona 04  05/01/2010  10:20Am
0022  ba05  robo zona 05  05/01/2010  10:22Am
0022  ba04  robo zona 04  05/01/2010  10:28Am

entonces esto mantiene ocupado al operador procesando estos eventos que son parte de una prueba. Lo que quiero es decirle al programa que las señales del cliente 0022 no deben abrir el formulario durante el dia 05/01/2010 hasta las 8:00Pm

La idea de egostar esta bien, pero tendria que hacer una consulta de todos los clientes para saber el status en que estan al momento de que llega una señal.

Por otro lado si utilizo una tabla, el sistema solo tiene que verificar si la tabla esta vacia y si no lo esta comparar el numero del cliente de la señal que esta llegando con los numeros de los clientes y la fecha y hora final de una tabla mas pequeñita que solo tendria unos pocos registros o ninguno.

ejemplo:

if zquery1clientnumero = zquery2clientenumero and zquery2fechafin+zquery2horafin < fecha  y hora actual then

no hagas nada

else

abre formulario

end;

En este caso no es mas que una tabla temporal, que en muchas ocasiones podria estar vacia.

Ahora lo que quiero hacer es que cuando llegue esa fecha u hora especifica el registro se borre.

Espero tengamos una idea mas clara del asunto.








  • 0

#18 eduarcol

eduarcol

    Advanced Member

  • Administrador
  • 4.483 mensajes
  • LocationVenezuela

Escrito 06 enero 2010 - 06:46

A ver amigo, pienso que tienes una idea preconcebida y no quieres abandonarla, yo también voy con la idea de egostar de un campo estatus.  y si lo que deseas es automatizar el cambio de estatus agregas otro campo que indique el fin de las pruebas.  Cuando el cliente emita la próxima señal verificas si el estatus esta en prueba de ser asi verificas que el campo que determina el final de las mismas tenga una fecha posterior a la actual.

En verdad la tabla que propones trae mas inconvenientes que soluciones a mi manera de ver las cosas.
  • 0

#19 luk2009

luk2009

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.040 mensajes
  • LocationSanto Domingo

Escrito 06 enero 2010 - 07:43

Bueno como no se puede ir contra la marea y reconociendo que ustedes saben mucho mas que yo de todo esto , dejame trabajar en la idea de Egostar y ver como la puedo implementar.
  • 0

#20 eduarcol

eduarcol

    Advanced Member

  • Administrador
  • 4.483 mensajes
  • LocationVenezuela

Escrito 06 enero 2010 - 07:54

Bueno como no se puede ir contra la marea y reconociendo que ustedes saben mucho mas que yo de todo esto , dejame trabajar en la idea de Egostar y ver como la puedo implementar.


Dale sin miedo, cualquier duda pregunta para llevar la idea a feliz termino
  • 0




IP.Board spam blocked by CleanTalk.