
[RESUELTO] tabla con registros que se autoborren
#1
Escrito 05 enero 2010 - 09:05
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
#2
Escrito 05 enero 2010 - 09:08
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
#3
Escrito 05 enero 2010 - 09:12
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.
#4
Escrito 05 enero 2010 - 09:15
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
#5
Escrito 05 enero 2010 - 09:33
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.
#6
Escrito 05 enero 2010 - 09:45
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:
SELECT * FROM clientes 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
#7
Escrito 05 enero 2010 - 09:51
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.....
#8
Escrito 05 enero 2010 - 10:04
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.
#9
Escrito 05 enero 2010 - 10:25
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
#10
Escrito 05 enero 2010 - 10:29
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.
#11
Escrito 05 enero 2010 - 10:42
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.
#12
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
#13
Escrito 05 enero 2010 - 10:49
Pues tendrás que cachar esas señales para determinar cuando comienzan y cuando acaban las pruebas.
Salud OS
#14
Escrito 05 enero 2010 - 10:53
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
#15
Escrito 05 enero 2010 - 10:54
#16
Escrito 05 enero 2010 - 11:53
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,
#17
Escrito 06 enero 2010 - 05:37
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.
#18
Escrito 06 enero 2010 - 06:46
En verdad la tabla que propones trae mas inconvenientes que soluciones a mi manera de ver las cosas.
#19
Escrito 06 enero 2010 - 07:43
#20
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