Power Builder - Multiusuario!!!

 
Vista:

Multiusuario!!!

Publicado por Pedro Pablo (1 intervención) el 10/03/2003 16:56:26
Utilizo una base de datos SQL server 2000 y tengo un sistema hecho en Power 8.0 el problema es que cuando lo utilizo en multiusuario los usuarios se traban entre ellos. es decir cuando un usuario entra en la misma tabla que el otro la pantalla se congela ¿como puedo hacer para evitar eso? la aplicacion en monousuario funciona perfectamente.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Multiusuario!!!

Publicado por Oscar (54 intervenciones) el 11/03/2003 01:37:55
Que tal Pedro!!,
Espero poder ayudarte en lo que necesitas, Yo tenia un problema similar con una vetana de captura, intentaba entrar con distintos usuarios a esa ventana y me sucedia lo mismo que a ti, lo que hice fue que despues de guardar la captura de los datos le ponia commit despues del update, con esto la ventana funcione perfectamente, espero que tambien a ti te funcione, acontinuación te escribo un pequeño codigo de ejemplo:

int li_update
li_update = dw_datawindow.update()
if li_update = 1 then
COMMIT USING SQLCA;
Else // Hubo Errores en la actualización
ROLLBACK USING SQLCA;
end if
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Multiusuario!!!

Publicado por eduardo.v (208 intervenciones) el 11/03/2003 06:24:00
Amigo Pedro
Quisiera agregar a lo que dijo Oscar que 'el problema' que tienes en SQL se llama Bloqueo. El Bloqueo es una funcion crucial en cualquier manejador de base de datos multiusuario, es una manera de proteger la integridad de los datos y SQL lo hace bloqueando los datos de manera automatica para impedir que los cambios realizados por un usuario tengan un efecto imprevisto en el trabajo realizado por otro usuario, sobre la misma base de datos, en el mismo instante. Para desbloquear un grupo de datos, como dice Oscar, hay que aplicarle un COMMIT; para liberar los datos y ponerlos a disposicion de quien los necesite en ese momento. Si utilizas objetos padre yo te recomiendo que en el evento updateend de cada datawindow coloques un COMMIT, para asi aligerar el codigo en tus datawindows descendientes.
Saludos desde Peru 'Cuna del verdadero Pisco'
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Multiusuario!!!

Publicado por eduardo.v (208 intervenciones) el 11/03/2003 06:29:56
Me olvidaba, tambien puedes poner el COMMIT; en el evento retrieveend de cada datawindow, puesto que es cuando recuperas los datos cuando se produce el Bloqueo. Y logicamente despues de algun SQL incrustado. Ahora si me voy.
Suerte!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Multiusuario!!!

Publicado por marcelo (78 intervenciones) el 13/03/2003 17:08:24
Hola PP. Agrego alguito más.
El tema de los bloqueos, (como dicen más adelante) es un tema crucial y complejo.
Hay que tener en cuenta que lo mejor que puede suceder es que todos los bloqueos que se realicen en una BD, los haga el mismo motor, y a solicitud del programador, es decir cuando vos REALMENTE necesites bloquear los registros. Las sentencias en SQL son BEGIN TRANSACTION COMMIT Y ROLLBACK ...
No me parece recomendable que sea el PB, que realice los bloqueos. Eso se logra poniendo en el sqlca.autocomitmode = true, es decir que no sea el PB, el que maneje las transacciones y que siempre sean a través de Stores Procedures.
2 lecturas recomendadas:
a) Ayuda en PB, sobre el objeto transaccional SQLCA,
b) Transacciones en Transac-SQL (SQL-7.0 ó 2000).
Suerte!!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar