Principales respuestas
¿cómo reaccionar ante un evento de la base de datos?

Pregunta
-
hola a todos. mi pregunta tiene que ver con lo siguiente:
tengo una aplicacion pequeña en vb.net 2010 y una tabla en una base de datos postgres
lo que quiero es que cuando se agrega un nuevo registro en esa tabla que cumpla con una condicion WHERE de SQL (por ejemplo "select * from alumnos where edad=22") me lo muestre en cualquier lado (puede ser una grilla, una caja de text, lo que sea)
por ejemplo: cada vez la consulta arroja al menos un resultado o mas, que me los muestre en un datagridview
lo que hago actualmente es usar un timer que realiza la consulta cada 5 segundos y ademas uso el backgroundworker
MI PREGUNTA ES: ¿hay una forma más efectiva de lograr esto?
porque puede ser que en ciertos momentos de poca actividad haga 12 consultas por minuto y si por media hora no ocurre ningún evento son demasiadas consultas realizadas inutilmente. pienso que quizas haya una forma de que el vb.net reaccione solamente en caso de que haya un registro que cumpla con la consulta deseada.
gracias desde ya y estoy seguro que alguien puede encontrar la solución
- Cambiado Enrique M. Montejo domingo, 5 de febrero de 2012 10:58 acceso a datos (De:Lenguaje VB.NET)
Respuestas
-
lo que hago actualmente es usar un timer que realiza la consulta cada 5 segundos y ademas uso el backgroundworker
MI PREGUNTA ES: ¿hay una forma más efectiva de lograr esto?
Para que la consulta sea lo menos costosa posible, una solución es la siguiente:
- Crea una pequeña tabla auxiliar con un solo registro y una sola columna de tipo numérico. Inicializala a cero.
- Sobre la tabla en la que quieres consultar tu condición, crea un trigger, de forma que cada vez que se modifique la tabla el trigger compruebe si se cumple la condición, y en ese caso incrementas el valor del campo de la tabla auxiliar.
- Desde el programa cliente, ejecutas con el backgroundworker (o con un Timer) una consulta cada 5 segundos, pero esta consulta la ejecutas contra la tabla auxiliar. Como solo tiene un registro y un campo, esta consulta debería ser rapidísima. Simplemente compruebas si el valor numérico es mayor que el último que leíste, y en ese caso sabes que se han producido cambios en la tabla principal.
- Marcado como respuesta nkne domingo, 5 de febrero de 2012 16:27
Todas las respuestas
-
perpo las personas no llevan a la edad cada 5 segundos, porque un timer con tan corto tiempo, entre cada intervalo dfe 5 seg que probabilidad hay que alguien llegue a los 22 años ?
porque no pones al menso un tomer de varias horas que total dara el mismo efecto, es ams porque solo no cargas el valor cuando se abre la aplicacion, con que al menso se eejcute uan vez al dia ya sabras si para ese dia alquien llego a los 22 años
no ocurre ningún evento son demasiadas consultas realizadas inutilmente. pienso que quizas haya una forma de que el vb.net reaccione solamente en caso de que haya un registro que cumpla con la consulta deseada.
tu lo ahs dicho, no tiene sentido ese intervalo que defines, con lanzar la consulta cada 24 hs sera mas que suficiente, de un dia para otro alguien puede llegar a cumplir 22 años, pero de un seg al otro nunca
saludos
Leandro Tuttini
Blog
Buenos Aires
Argentina -
gracias Leandro pero no es lo que necesito. suponte que hago cualquier otra aplicacion en la que necesito hacer un control cada 5 segundos o menos (cada 1 segundo) como un sistema de chat... mi pregunta fue genérica, no específica. me gustaría encontrar una forma, si es que la hay. gracias desde ya y saludos
- Editado nkne domingo, 5 de febrero de 2012 0:21
-
Verificate a ver si la notificacion de evento planteada en este hilo aporta a tu necesidad
http://social.msdn.microsoft.com/Forums/es/vbes/thread/e666e263-68c9-4d0e-a769-a5ad4a2d98dd
Angel R. Jimenez G.
Software Development
Santo Domingo
Republica Dominicana
My Blog -
-
lo que hago actualmente es usar un timer que realiza la consulta cada 5 segundos y ademas uso el backgroundworker
MI PREGUNTA ES: ¿hay una forma más efectiva de lograr esto?
Para que la consulta sea lo menos costosa posible, una solución es la siguiente:
- Crea una pequeña tabla auxiliar con un solo registro y una sola columna de tipo numérico. Inicializala a cero.
- Sobre la tabla en la que quieres consultar tu condición, crea un trigger, de forma que cada vez que se modifique la tabla el trigger compruebe si se cumple la condición, y en ese caso incrementas el valor del campo de la tabla auxiliar.
- Desde el programa cliente, ejecutas con el backgroundworker (o con un Timer) una consulta cada 5 segundos, pero esta consulta la ejecutas contra la tabla auxiliar. Como solo tiene un registro y un campo, esta consulta debería ser rapidísima. Simplemente compruebas si el valor numérico es mayor que el último que leíste, y en ese caso sabes que se han producido cambios en la tabla principal.
- Marcado como respuesta nkne domingo, 5 de febrero de 2012 16:27
-
lo que hago actualmente es usar un timer que realiza la consulta cada 5 segundos y ademas uso el backgroundworker
MI PREGUNTA ES: ¿hay una forma más efectiva de lograr esto?
Para que la consulta sea lo menos costosa posible, una solución es la siguiente:
- Crea una pequeña tabla auxiliar con un solo registro y una sola columna de tipo numérico. Inicializala a cero.
- Sobre la tabla en la que quieres consultar tu condición, crea un trigger, de forma que cada vez que se modifique la tabla el trigger compruebe si se cumple la condición, y en ese caso incrementas el valor del campo de la tabla auxiliar.
- Desde el programa cliente, ejecutas con el backgroundworker (o con un Timer) una consulta cada 5 segundos, pero esta consulta la ejecutas contra la tabla auxiliar. Como solo tiene un registro y un campo, esta consulta debería ser rapidísima. Simplemente compruebas si el valor numérico es mayor que el último que leíste, y en ese caso sabes que se han producido cambios en la tabla principal.