PDA

Ver la Versión Completa : No se ven los cambios a traves de la red??


Argaron
21-05-2003, 20:32:19
Hola a todos, tengo una aplicacion en red corriendo bajo interbase, la aplicacion se conecta perfectamente a la base de datos. Mi problema es el siguiente:

Arranco el programa en 2 ordenadores, hago modificaciones en una tabla por ejemplo clientes y hasta que no cierro la aplicacion el otro ordenador no se entera de los cambios en la base de datos. Estoy algo perdido porque no utilizo las actualizaciones en cache. El componente que uso es el ibdataset, con su correspodiente codigo en el insertsql. Para iniciar el alta pongo tablaclientes.insert y para grabar tablaclientes.post. la base de datos la tengo conecta a un ibtransaction. ¿Que me falta para que se actualize automatica la base de datos?. Si arranco la aplicacion 2 veces en el mismo ordenador, donde tengo la base, me pasa lo mismo, asi que no es problema de la red.
¿alguna idea? Grcias por todo.

marcoszorrilla
21-05-2003, 21:05:04
Si el tipo de base de datos o conexión lo permite tienes que hacer un Refresh, para que te actualice los datos en el ordenador 2, es decir que en la consulta que estas viendo y tienes 4 registros cuando debiera de haber 5, le aplicas refresh.

Es posible que no soporte refresh, en este caso habría que cerrar y abrir de nuevo la tabla y si es una consulta, ejecutarla de nuevo o usar Requery, si es que te lo permite.

Un Saludo.

lbuelvas
22-05-2003, 02:14:13
Hola club,

Debe tenerse en cuenta que las operaciones se tramitan por medio de una transaccion y mientras no des un COMMIT a la base de datos,los demas usuarios no veran los cambios.

Aplica un IBTransaction1.COMMITRETAINING;

Argaron
22-05-2003, 11:55:59
Gracias he usado IBTransaction1.COMMITRETAINING;

en el afterinsert y funciona, la base de datos se actualiza automaticamente, pero tengo un problema, si tengo 2 aplicaciones abiertas y en una hago cambios la base de datos si actualiza los cambios pero la otra aplicacion no se entera, es como si tuviera una copia anterior de la base y hasta que no la cierra y la vuelvo arrancar no actualiza no carga los nuevos cambios. ¿Existe una forma de "actulizar" la informacion de la base datos automaticamente en la aplicacion sin tener que cerrarla y arrancarla otra vez y sin cerrar el database y abrilo otra vez?

Iván
22-05-2003, 12:08:13
Esta es la pregunta del millón :D

Veamos, hay formas de hacerlo, y todas tienen sus problemas.

Una de ella es a traves del uso de Eventos.

Tras hacer una inserción/modificación/eliminación, haces saltar un evento de IB, que lo notificará al resto de conexiones existentes. Así todas las aplicaciones se enteraran de que se ha producido el evento, y podrías hacer a la segunda aplicación, refrescarse para tener los nuevos datos actualizados.

Esa es una posible solución.

Pero otra por ejemplo, es no actualizar, y confiar en las reglas de integridad referencial de la BD. En el momento en que tu intentes hacer una inserción, si repites el registro... te tiene que dar error. Si intentas modificar el mismo registro, dependerá de como lo hayas configurado que actue de una forma u otra, y a la hora de hacer consultas, antes de hacerlas refresca y verás el último estado.

Pero la solución dependerá de tus necesidades reales.

Un saludo.

kinobi
22-05-2003, 13:05:18
Hola,

Posteado originalmente por Argaron
¿Existe una forma de "actulizar" la informacion de la base datos automaticamente en la aplicacion sin tener que cerrarla y arrancarla otra vez y sin cerrar el database y abrilo otra vez?

hace unos días se trato el tema en otro hilo del foro ...

http://www.clubdelphi.com/foros/showthread.php?s=&threadid=577

Saludos.

Argaron
22-05-2003, 15:05:03
Gracias por contestar, pero una pregunta, cuando dices refrescar te refieres a ¿realizar otra vez el select?. Te cuento yo tengo un formulario cliente en mdi, cada vez que lo abro hago un SELECT * FROM CLIENTES, con lo que se supone que tendria que obtener los nuevos datos que se hayan metido en la base de datos no? pero en cambio me muestra solo los datos que tenia cuando arranque la aplicacion.

Iván
22-05-2003, 16:54:56
Eso te pasa porque aunque cada vez haces un nuevo select, debes estar siempre en la misma transacción.

O no llevas el control de transacciones tú, o tienes que refrescar la vista de la transacción antes de hacer el select.

Saludos.