PDA

Ver la Versión Completa : Problemas de Actualizacion de Datos


Gangster
16-06-2007, 23:49:50
Hola, a Todos Tengo una aplicacion hecha en delphi7, entonces la tenemos en Red, un servidor tiene la base de datos que comparte a los demas clientes, entonces la misma aplicacion la abren a la ves dos personas, y hacen los mismo los dos pero lo que hace uno no se actualiza en la tabla que estan udsando los dos al mismo tiempo, las tablas las tengo cached updates, ademas que las abro y cierro al entrar y salir de la forma pero como que cada uno abre su session y lo que se hace nuevo en algun lado no aparece en la tabla, y si intento grabar pues sale lo de key violation, entonces como si no hiciera nada sobre la tabla, si pues ya hasta se salio del programa la persona que grabo algo en la tabla, entonces no se que este pasando ya hasta commitupdate hago y nada sigue lo mismo y lo raro es que se abre la aplicacion otra ves y si se ven los cambios pero si aquella ventana del otro cliente no se cierra se queda viendo los datos como el cliente los abrio como si no hubiera ningun solo cambio que problema tendre Espero que se entienda y alguna idea me DAN Gracias y Saludos.

gabrielkc
26-06-2007, 17:23:32
Te recomiendo que leas la guia de estilo o al menos uses parrafos.

Pero bueno. Varias opciones por si no entendí tu punto.

Para evitar el Key Violation te recomiendo usar Triggers, defines un trigger en el Before Insert para que le asigne la siguiente llave:
CREATE TRIGGER NUEVO_REGISTRO FOR TABLA
BEFORE INSERT
AS
BEGIN
NEW.CAMPO_LLAVE=GEN_ID(GENERADOR,1);
END;

Obviamente el generador debe ser definido con anticipacion. Buscate como hacer trigger si no sabes. Para que esto de resultado tendrias que hacer commit despues de guardar cada dato.

Si lo que quieres es que el cliente n vea en tiempo real lo que el cliente n+1 hace. Puedes usar un trigger para cada accion en la bd (en el After Insert, After Update After Delete) que genere un evento y cachar el evento desde tu aplicacion.

En Delphi6 el componente que se usa para interceptar evento es el IBEvents:
seria algo asi:

CREATE TRIGER INSERCION FOR TABLA AFTER INSERT
AS
BEGIN
POST_EVENT 'INSERCION_TABLA_X';
END;
CREATE TRIGER MODIFICACION FOR TABLA AFTER UPDATE
AS
BEGIN
POST_EVENT 'MODIFICACION_TABLA_X';
END;


y en delphi podria ser en el evento OnCreate del DataModule:

IBEvents.Events.Add('INSERCION_TABLA_X');
IBEvents.Events.Add('MODIFICACION_TABLA_X');


Y en el evento: OnEventAlert del IBEvents pondrias el codigo que controlaría la actualización de tus datos. Espero que sea de utilidad la informacion

vtdeleon
27-06-2007, 02:17:29
Antes que todo, Que base de datos utilizas? y Que componentes?

Gangster
27-06-2007, 19:24:34
Antes que todo, Que base de datos utilizas? y Que componentes?

Utilizo Tablas Paradox y ttables y tdatasource ya ideamos algo yo y mi equipo, para resolver esto y salio gracias por sus preguntas y Respuestas.

Saludos y BYe.

vtdeleon
27-06-2007, 23:35:50
Comparte la solucion, caeria bien para otros con la misma duda

Saludos

Gangster
28-06-2007, 20:15:24
Comparte la solucion, caeria bien para otros con la misma duda

Saludos
Pues mi solucion no es algo muy asi de cientfica, lo que hize es manejar un numero aleatorio, y este se lo doy al entrar a hacer algo a algun usuario, entonces si dos usuarios entran pues cada uno toma un valor aleatorio, el que guarde primero en la base de datos se guarda con el numero aleatorio y se lo cambio por el que llevaba determinados folios, y ya despues el otro usuario que entro al mismo tiempo guarda y le toca el numero siguiente al que acabe de terminar de guardar en la tabla, esa fue mi solucion en ves de solucion es como un truquillo, y pues si me sirvio asi lo solucione si ahi mas dudas, me las preguntan y la pongo esta idea por si alguien esta atorado en lo mismo, saludos y bye.