![]() |
problemas de actualización con interbase y delphi
Hola a todos/as;
tengo una aplicación hecha con delphi 6 que funciona con interbase 6. Esta aplicación la tienen que usar a un mismo tiempo varios usuarios, y tendría que aparecerles los campios que los demás hagan de un modo inmediato. El problema es que esto no sucede. tengo un database, y un transaction, que me controlan todas las TIbQuerys y las TIbTable. ¿Alguien puede ayudarme? Gracias Virginia |
Hola,
Cita:
El control transaccional se basa en el aislamiento entre transacciones, mientras no cierres (commit) la transacción desde la que se están aplicando los cambios en la base de datos, el resto de transacciones (usuarios) no pueden "enterarse" de los mismos. Saludos. |
prueba a ver si el TIBEvents puede servir para eso, aunque lo que pretendes va un poco contra la filosofia del cliente servidor (creo).
|
Hola,
hace tiempo, en los foros antiguos, recuerdo que se debatió el uso de los eventos InterBase para la sincronización de transacciones (usuarios). En mi opinión, por supuesto discutible, no es buena idea. Los eventos InterBase es un mecanismo asíncrono de comunicación Servidor -> Cliente, insuficiente para la sincronización entre aplicaciones, y que además puede dar muy poca información de los "objetos" implicados en la base de datos; como mucho la tabla implicada y el tipo de operación, pero no los registros concretos implicados. Además está el problema del tráfico de red que puede generar; no serían necesarias muchas transacciones para que se disparase hasta hacerse tal vez intolerable. Por supuesto todo es cuestión de probar para casos concretos, pero como regla general yo lo desaconsejaría. Saludos. |
gracias, ya lo he solucionado
Virginia |
Oyer perdona yo tambien tengo el problema que tu dices y me gustaria si es posible que me indicaras como has echo para que los cambios se reflejen de manera automaticas en todos los clientes?
|
Hola,
Lo que hice fue, hacer doble click sobre mi transacción y ponerma en "ReadCommitted" Después, todas mis tablas las vinculé con los siguientes dos procedures en eventos: *Events --> AfterPost procedure TForm1.TableAfterPost(DataSet: TDataSet); begin IBTransCenta.CommitRetaining; end; *Events --> AfterCancel procedure TFrmMainCenta.TableAfterCancel(DataSet: TDataSet); begin IBTransCenta.RollbackRetaining; end; //donde IBTransCenta es el nombre de la transaccion que tengo asociada a mi BD La llamada CommitRetaining es para almacenar constantemente en el servidor de la base de datos, todas las actualizaciones, inserciones, y cancelaciones de los datos asociados a la transacción actual y después para conservar el contexto de la transacción. (mira en el help de delphi) La llamada RollbackRetaining es para deshacer en el servidor de la base de datos todas las actualizaciones, inserciones, y cancelaciones de los datos asociados a la transacción actual y después para conservar el contexto de la transacción. (mira el help de delphi) espero que esto te sirva de ayuda. Saludos Virginia |
Hola,
un comentario con respecto a ... Cita:
isc_commit_retaining cierra la transacción actual y crea una nueva aprovechando el contexto de la antigua, con el consiguiente ahorro de tiempo, pero como desventaja está que no lanza el mecanismo de recolección cooperativa de basura, vital para eliminar registros obsoletos en la Arquitectura MultiGeneracional (MGA) de InterBase. Este tipo de recolección de registros obsoletos sólo es lanzada con un hard-commit (una llamada a la función isc_commit, o método Commit en IBTransaction). El resultado del uso continuado de CommitRetaining es una degradación paulatina del rendimiento hasta que se haga una limpieza, bien forzada por un sweeping o por un backup/restore de la base de datos. En mi página web: http://www.clubdelphi.com/users/kinobi tengo un documento donde se explica más el tema. Saludos. |
La franja horaria es GMT +2. Ahora son las 03:35:43. |
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