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)
-   -   Ver registros recien grabados en FireBird y Delphi (https://www.clubdelphi.com/foros/showthread.php?t=18611)

sercornejov 17-02-2005 17:21:17

Ver registros recien grabados en FireBird y Delphi
 
Hola

D60, FB1.5, IBX 6.0 (creo... los que vienen con delphi 6.0 enterprice), Win XP Pro SP1

La idea de la aplicación es una. pero con dos ejecutables: uno que entra visitantes y otro que los saca.

cada uno funciona a las 1000 maravillas :cool: , la cosa es que lo que hace uno no se refleja en el otro.

Ambos EXE miran la misma base de datos, en el mismo PC, en el mismo directorio, en la misma ciudad, en el mismo planeta....

Cuando un visitante llega, se registra y el EXE E (asi llamo al de entradas) lo registra, y genera la información pertinente en la tabla que controla las visitas y todo...

Lo deseado es que una vez que ENTRA el paciente, el EXE S (el de sacar la gente) se entere de que entro alguien. Yo le coloque un dbgrid que muestra los que están adentro, pero NO LO MUESTRA, tengo que cerrar EXE S y ejecutar de nuevo y ahi sí, como no, se VE.

Las tabla de visitantes tiene 40000 registros (incluida la foto del paciente), luego para buscar un paciente en el momento en que llega lo hago mediante un StoreProcedure para no MOVER los registro. uns vez se toman los datos, lo grabo con otro SP con una clausula UPDATE, para no MOVER la tabla.

Todo eso funciona de maravillas... En la tabla de visitantes tengo un trigger que coloca un evento 'VIS_CAMBIO' en el insert o el update (after). Y LO MAS DE CURIOSO: :rolleyes: : Cuando entro a un visitante, el otro exe (EXE S, que coloco en depuración) lo capta, y ejecuta el OnEvenAlert (este cierra la consulta y la ejecuta de nuevo) Y NAADAAAAAAAAAAAAAAAAA.

Tengo que entregar esto mañana o de lo contrario me van a correr pólizas de cumplimiento y todo lo demás...

AAAAAYUUUUUUUUUUDAAAAAAAAAAAAAAAAAA

Sergio

Luis F. Orjuela 15-11-2009 17:44:38

Por lo que entendí de tu problema. te diría lo siguiente:

1. Cada vez que hagas una entrada (EXE E) inmediatamente debes hacer un commitretaining a tu base de datos, esto con el fin de efectivamente escribir los cambios de tus registros en la base de datos (escribir físicamente el registro), para que así otros programas o procesos que trabajan con la misma base de datos tengan acceso a la nueva información.
2. Como veo que estás utilizando los EVENTOS dentro de la base de datos (IBEvents), pues es así como se debe hacer, es decir, al momento de crear un nuevo registro, o actualizar alguno, programas el evento para que se dispare e informe a las demás aplicaciones. una vez disparado dicho evento como por ejemplo al momento de ingresar un nuevo registro, entonces en tu otro programa (EXE S), debes capturar dicho evento y justo ahí debes cerrar y abrir nuevamente tu consulta para que veas refledos los nuevos datos.

PERO RECUERDA debes hacer un IBTransaction1.CommitRetaining en tu (EXE E ) justo después de haber ingresado tus nuevos datos.

:)

Delfino 15-12-2009 13:22:36

Cita:

esto con el fin de efectivamente escribir los cambios de tus registros en la base de datos (escribir físicamente el registro)
Los registros se escriben físicamente aunq no haya commit..
Ademas de hacer un commit, la transaccion del segundo exe tiene q estar configurada a Read Commited..


La franja horaria es GMT +2. Ahora son las 12:53:22.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi