Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Firebird e Interbase (https://www.clubdelphi.com/foros/forumdisplay.php?f=19)
-   -   Sistema de Tickets con base de datos Firebird (https://www.clubdelphi.com/foros/showthread.php?t=90005)

sonjeux 17-03-2016 16:05:32

Sistema de Tickets con base de datos Firebird
 
Saludos, deseo hacer un sistema de tickets usando una base de datos en firebird, tengo una duda, como podria saber que se realizo un nuevo registro en la base de datos en las maquinas clientes? hay algun componente para eso? gracias.

AgustinOrtu 17-03-2016 16:15:35

Podrias investigar sobre eventos

PD: No das informacion suficiente

Luis M. 17-03-2016 20:45:42

Hola.
Así a groso modo, podrías guardar en una tabla temporal el número de registro de
la tabla tickets y comprobar cada X tiempo si hay algún registro más.

Osorio 18-03-2016 17:54:00

Post_Event
 
En mis tiempos usaba una funcionalidad e InterBase (y tambiend e Firebird) que es el post_event combinada con un componente TIBEvent.

Aqui hay info viejita (aun dice borland) pero creo que igual de válida en nuestros dias.

http://www.devgear.co.kr/pdf/ib_events.pdf

Lepe 18-03-2016 19:58:50

Para Firebird es igual, pero usa mejor su PDF: http://www.firebirdsql.org/file/docu...ird_events.pdf

Tiene sus límites, así que no abuses de él. Ten en cuenta que en "cualquier inesperado momento puede llegar ese evento", imagina que el usuario está modificando un registro, llega el evento y ordenas cerrar consultas y abrirlas de nuevo para refrescar... Ups! se perdió la modificación que estaba realizando...

Quizás mejor un botón de "refrescar datos", o que el evento solo sea para cambiar el color del botón "refrescar datos" (poniendo otro icono). Así el usuario sabe que hay nuevos datos y decide pulsar o no.

AgustinOrtu 18-03-2016 21:06:23

Cita:

Empezado por Lepe (Mensaje 503469)
Ten en cuenta que en "cualquier inesperado momento puede llegar ese evento", imagina que el usuario está modificando un registro, llega el evento y ordenas cerrar consultas y abrirlas de nuevo para refrescar... Ups! se perdió la modificación que estaba realizando...


Eso se puede solucionar facilmente, basicamente si el DataSet esta en edicion no refrescas la consulta

Lepe 19-03-2016 11:15:44

Un TIBEventAlert, solo puede registrar 15 eventos como máximo. Además es asíncrono y te da un contador con las "repeticiones que ha habido".

Cita:

Empezado por AgustinOrtu (Mensaje 503475)
Eso se puede solucionar facilmente, basicamente si el DataSet esta en edicion no refrescas la consulta

Sí, por supuesto, pero eso puede complicarse muy mucho cuando tienes 10 tablas dependientes unas de otras, con eventos informando de cambios en cada tabla. Estas en tu editor de textos, queriendo mostrar datos de un vencimiento de la factura del cliente, mientras los demás puestos modifican cosas que tú necesitas.

Debes tener en cuenta que ese evento puede llegar en cualquier momento. La complicación en la programación no justifica la necesidad de refrescar los datos automáticamente, a menos que sea un sistema "en tiempo real"

Es más, imagina que no estás en edición, y llegan 10 eventos, uno por tabla, en sistemas multiusuarios, multiplica por 10 puestos; ¿actualizas todos los datos de tus 10 terminales? puede que el usuario esté usando el Word.

¿Y si está mirando un listado de tickets por fechas y éste no para de actualizarse en pantalla? Lo normal es que inicies una transacción y el listado que estás mirando sea estático, en el momento que pediste los datos.

Una inserción en la tabla clientes no es importante. Una inserción en la tabla ChatEntreUsuarios sí lo es. A eso me refería con "no abusar de los eventos".

Pero vamos, igual me estoy poniendo en casos de uso que no se van a dar...

Saludos

Casimiro Notevi 19-03-2016 11:58:51

Cita:

Empezado por Lepe (Mensaje 503482)
Un TIBEventAlert, solo puede registrar 15 eventos como máximo. Además es asíncrono y te da un contador con las "repeticiones que ha habido".
Sí, por supuesto, pero eso puede complicarse muy mucho cuando tienes 10 tablas dependientes unas de otras, con eventos informando de cambios en cada tabla. Estas en tu editor de textos, queriendo mostrar datos de un vencimiento de la factura del cliente, mientras los demás puestos modifican cosas que tú necesitas.
Debes tener en cuenta que ese evento puede llegar en cualquier momento. La complicación en la programación no justifica la necesidad de refrescar los datos automáticamente, a menos que sea un sistema "en tiempo real"
Es más, imagina que no estás en edición, y llegan 10 eventos, uno por tabla, en sistemas multiusuarios, multiplica por 10 puestos; ¿actualizas todos los datos de tus 10 terminales? puede que el usuario esté usando el Word.
¿Y si está mirando un listado de tickets por fechas y éste no para de actualizarse en pantalla? Lo normal es que inicies una transacción y el listado que estás mirando sea estático, en el momento que pediste los datos.
Una inserción en la tabla clientes no es importante. Una inserción en la tabla ChatEntreUsuarios sí lo es. A eso me refería con "no abusar de los eventos".
Pero vamos, igual me estoy poniendo en casos de uso que no se van a dar...
Saludos

Totalmente de acuerdo con lo que dices.

AgustinOrtu 19-03-2016 22:41:44

Gracias por la aclaracion, sin duda de acuerdo

Nunca he trabajado con eventos ni con componentes como los TIBxxx, es mas que nada la teoria lo que tengo presente

Por otro lado mi forma de trabajar usando objetos y no el el combo controles data aware + dataset; prefiero usar los controles tradicionales y mantener la info en memoria (objetos) y luego enviar los datos cuando se pulsa "aceptar"

De este modo quiza sea "mas codigo" hacer algunas cosas pero no tengo problemas tales como "cerre el dataset y ups perdi los datos"

En los casos que describes como "una insercion en la tabla ChatEntreUsuarios", podria capturar ese evento y en lugar de refrescar autmaticamente como decis, podria poner un cartel de que "hay nuevas ... bla bla". Por ejemplo el propio ClubDelphi lo hace de esta manera :)


La franja horaria es GMT +2. Ahora son las 17:05:14.

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