PDA

Ver la Versión Completa : Problema de Actualización de Queries Firebird


Cannabis
19-10-2007, 19:54:37
Hola, buen día.

Tengo un problema de actualización.

Utilizo D7, Firebird 2 e IBx.

El asunto es que cuando desde una pc/computadora/ordenador actualizo una tabla por medio de un query, desde otro equipo no se notan los cambios.

Este es un ejemplo deel query que utilizo:
query1.close;
query1.sql.clear;
query1.sql.add('SELECT .........');
....
....
query1.open;

IBTransaction1.CommitRetaining;



Al salir de la aplicación e ingresar de nuevo, la información es correcta.

Gracias por su ayuda.

Salud.

gluglu
19-10-2007, 23:05:20
Se ha hablado bastantes veces en el foro ya acerca de este asunto.

El otro ordenador no verá los cambios hasta que hagas un Refresh del Registro (si es a nivel de registro), o cerrar y volver a abrir la base de datos (si son cambios a nivel de la base de datos completa), o implementes avisos que notifiquen al otro ordenador que se ha realizado un cambio.

Además tendrás que tener la transacción definida de tal manera que permita ver los cambios realizados (en principio, CommitRetaining).

Si buscas en el foro encontrarás varios hilos que tratan el tema.

Cannabis
21-10-2007, 05:48:42
Gracias por la respuesta Gluglu.

Expliqué mal la situación:

1.- Los dos equipos están en la misma Ventana/Forma
2.- La información se despliega en un DBGrid
3.- En uno de los equipos se modifican los datos.
4.- En el otro equipo, el usuario sale de la forma y vuelve a entrar y la información no ha cambiado en el DBGrid.

Utilizo queries para actualizar, modificar y eliminar registros.

Cuando el usuario entra a la forma/ventana:
qry_Libros:= TMDOQuery.Create(nil);
qry_Libros.Database:= dm_Master.FBDB;
qry_Libros.SQL.Add('SELECT * FROM Libros');
qry_Libros.SQL.Add('ORDER BY Libro_Nom');
qry_Libros.Open;
ds_Libros:= TDataSource.Create(nil);
ds_Libros.DataSet:= qry_Libros;


Cuando el usuario sale de la forma/ventana:
qry_Libros.Close;
qry_Libros.Free;
ds_Libros.Free;


El problema es que a pesar de eliminar el Query cuando el usuario sale de la ventana/forma y de crearlo de nuevo cuando el usuario entra, la información no ha cambiado.

Si el otro usuario sale de la aplicación y vuelve a entrar, los datos aparecen actualizados.

Gracias.

Editado por mal formato de las etiquetas

pvizcay
22-10-2007, 03:50:48
te debe faltar el commit del que actualiza en ese caso..
salu2

gluglu
22-10-2007, 10:35:32
O como han dicho, te falta el Commit en la transacción, o el nivel de aislamiento de la transacción a la que está asociado el Query no es ReadCommited.

Para comprobarlo, deberás hacer doble click encima del componente de la transacción y comprobar lo que te he dicho.

Gabo
22-10-2007, 11:01:15
Revísate éste (http://dn.codegear.com/article/27201)enlace sobre lo que te ha dicho gluglu...

Cannabis
22-10-2007, 12:11:20
Soy nuevo usando Firebird (y al parecer muy tonto) Jamás se me hubiera ocurrido hacer doble clic sobre Ttransaction.

Leí acerca de isolation level y sus opciones. Asunto arreglado.

Gluglu, pvizcay, Gabo, les agredezco su ayuda


Salud.