SQL Server - 2 usuarios modifican el mismo registro

 
Vista:

2 usuarios modifican el mismo registro

Publicado por Ignacio Sandoval (4 intervenciones) el 23/03/2007 23:32:54
Trabajando en una BD multiusuario SQL server con ASP / ASP .net.

Un ejemplo seria que si el usuario 1 esta modificando los datos, y el usuario 2 quiere modificarlo, aparesca un error asi como: "El registro esta en uso por el usuario 1", mostrandole la informacion, pero digamos sin la opcion de poder modificar la informacion.

He estado pensando en una forma muy complicada de hacerce, pero quisiera saber si el DBMS tiene esa funcion (que la debe de tener) para no tener yo que programar esas validaciones

Me han comentado algo sobre el Bloqueo Compartido y Exclusivo, pero creo... que cuando el usuario 1 este modificando, el usuario 2 no podra ver la informacion....

Saludos.
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:2 usuarios modifican el mismo registro

Publicado por Isaías (3308 intervenciones) el 24/03/2007 00:21:44
Ignacio

Se supone que una actualizacion debe tardar NONOSEGUNDOS, no veo el porque enviarle un mensaje al usuario 2, cuando el usuario 1 esta actualizando, si ni siquiera se podra ver dicha actualizacion.

Creo que lo que tu quieres es PREVENIR que ambos usuarios modifiquen el mismo registro a la vez (que podria suceder), para esto, existen las transacciones explicitas, te pongo un ejemplo:

CREATE PROCEDURE sPS_ObtieneFolioHost
@iOrigen tinyint = 0,
@iFolioHost int = 0 OUTPUT
AS
BEGIN
SET NOCOUNT ON
-- Inicio la transaccion, bloque el registro
BEGIN TRAN MyTran
UPDATE FOLIADOR WITH (ROWLOCK)
SET FOLIO = ISNULL(FOLIO, 0) + 1
SELECT @iFolioHost = FOLIO FROM FOLIADOR ROWLOCK
COMMIT TRAN MyTran
-- Termino la transaccion, libero el registro
IF @iOrigen = 1
SELECT @iFolioHost
END

Cuando inicia y termina la transaccion, SOLO el usuario que mando ejecutar el store, tiene derecho exclusivo del registro y solo hasta que termina, se libera dicho registro.

Pero esto que ves, sucede en un "abrir y cerrar de ojos", por lo tanto, no podria enviarle al otro usuario un mensaje, "aguantame tantito, porque estan actualizando el registro".

¿Me explico?
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:2 usuarios modifican el mismo registro

Publicado por Isaias (3308 intervenciones) el 25/03/2007 03:48:35
Nuevo

No comparto mucho la idea sobre de que ADO bloquea automaticamente los registros, porque de ser asi, para que existe el BEGIN TRAN, COMMIT TRAN y ROLLBACK TRAN.

Saludos
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:2 usuarios modifican el mismo registro

Publicado por Ignacio Sandoval (4 intervenciones) el 24/03/2007 02:58:06
A ver si me explico de una mejor forma....

Tengo mi aplicacion en ASP, hago click en el registro y me manda a un formulario para editarlo... empiezo a editar los datos, pero... se encuentra el usuario 2 editando el mismo dato y le da guardar.... Al momento que yo termino de modificar mis datos y le doy guardar... Se guardan los cambios mios y no del usuario 2...

¿Si me explico?

Saludos y gracias...
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:2 usuarios modifican el mismo registro

Publicado por Isaías (3308 intervenciones) el 25/03/2007 03:51:54
Perfectamente

Entonces, el problema lo tienes en tu aplicativo (diseño), porque al momento de darle CLICK y te mande a otro formulario para EDITARLO, deberias tener una bandera en tu registro de tipo INT, donde guarde el SPID de quien lo esta editando, si esta en 0, lo tomas y lo actualizas con el spid en cuestion, si es diferente de 0, entonces si, le envias el clasico mensaje al usuario, "por el momento, el registro se esta actualizando por..........spid........".

¿Porque digo que esta mal tu diseño?

Porque ese SPID (que es una conexion de una persona), se pudo ir a tomar un cafecito y platicar sobre lo acontecido de la jornada futbolera y NADIE podria tomar dicho registro, ¿me explico?
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:2 usuarios modifican el mismo registro

Publicado por Ignacio Sandoval (4 intervenciones) el 25/03/2007 07:50:23
Muchas Grcias Isaias, de hecho esa es la idea que tenia sobre como solucionarlo, pero pensaba que se podria hacer algo mas automatico en ese aspecto...

Pero ahora viene la siguiente cuestion... ya tengo el atributo que me guarde el ID del usuario que lo va a estar modificando, ahora, como libero ese cambo si el usuario en lugar de darle click en cualquier otra opcion del sistema, cierra la ventana del explorador, quedando la bandera en que ese usuario la esta usando....

Si tengo pensado hacer una aplicacion de desbloqueo en caso de que esto se presente, pero tienes alguna de como validarlo un poco mas??

Saludos y muchas gracias....
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:2 usuarios modifican el mismo registro

Publicado por Isaías (3308 intervenciones) el 26/03/2007 20:42:48
NUEVO

Gracias por tu comentario, pero dejame aclarte unas cuestiones (muy simples), primero, mi nick, esta completo, con NOMBRE y DIRECCION de correo, al cual si gustas puedes enviarme tus comentarios, "el tal Isaias", me suena un poco DESPECTIVO, puedes ver mi nivel de participacion en este y otros foros y te daras cuenta que cuento con algo de experiencia, por otro lado, soy generacion 82, por lo que he visto mucho de la informatica, conozco y manejo las versiones, 6.0, 6.5, 7.0, 2000 y 2005 de SQL SERVER y bueno, vamos al ejemplo que YO puse (ejemplo REAL, de un CALL CENTER).

Supongamos que un cliente, un BANCO por ejemplo, me contrata 500 posiciones (operadores), para llamarles a sus clientes y actualizar sus DATOS, ¿como seria el flujo? (En un programa en ASP o Visual Studio, como gustes)

El operador 5467 (los identifico por su posicion)

1.- Llamo el registro disponible en la base (el flag = 0), lo actualizo con el id 5467
2.- Marco al cliente en cuestion (automatico o manual)
Q= ¿me contesta el cliente?
No.- Dejo recado y cierro el registro, para reciclaro en 2 horas, por ejemplo
Si
3.-Procedo con la actualizacion de sus datos
NOMBRE
PATERNO
MATERNO
DIRECCION
COLONIA
POBLACION
ESTADO
CODIGO POSTAL
PAIS
etc, etc, etc, etc, etc, etc,

Si en el paso 3, los datos los tengo en un ASP (FORMULARIO de WEB), ¿Como entonces le hago para asegurarme que OTRO operador no me tome el mismo registro que YA esta actualizando el operador en cuestion?

Pues solamente como ya lo explique, colocando en un FLAG, el numero del OPERADOR y hasta en tanto, no lo mande a actualizar dicho registro, no le cambiare el flag.

Ahora bien, para contestarle a IGNACIO SANDOVAL, sobre su duda, de si el operador apaga la terminal o no le da guardar el registro.

Lo PRIMERO que debo hacer (el store que asigna el registro), es verificar que ese operador NO tenga registros asignado, si lo tiene, SIEMPRE le regresare el mismo registro.
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:2 usuarios modifican el mismo registro

Publicado por Isaías (3308 intervenciones) el 26/03/2007 20:47:11
Aclaro, porque me paso en la vida real y antes de que me lo pregunten.

¿Que pasa si el OPERADOR X, lo corren o renuncia'

En mi caso, hice una pantalla de supervision, en al cual, el JEFE DE LINEA, verifica que tantos registros tiene asignador por cada uno de sus operadores, pudiendo en su caso, re-asignar los registros, por AUSENCIAS, LIQUIDACIONES, etc.
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:2 usuarios modifican el mismo registro

Publicado por Isaías (3308 intervenciones) el 26/03/2007 20:43:17
Lee la respuesta que le doy a "nuevo".
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:2 usuarios modifican el mismo registro

Publicado por Isaías (3308 intervenciones) el 26/03/2007 22:37:56
No amigo, no soy Argentino, soy MEXICANO y soy Ingenerio en Sistemas, por el IPN, tengo 47 años, pertenezco al grupo de moderadores de varios foros y miembro del staff de VB-MUNDO.COM.

Como veras, me dedico a la construccion de sistemas, por lo que espero que me des una opinion sobre de como resolver la problematica aqui expuesta.

¿Arrogancia?, No para nada, es de lo que menos tengo, mas bien me sobra MUCHA HUMILDAD para seguir aprendiendo y continuar colaborando en este u otros foros, con los muchos o pocos conocimientos que tengo.

No hay resentimientos personales, simplemente aclaraciones pertinentes.

Un saludo.
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:2 usuarios modifican el mismo registro

Publicado por Isaías (3308 intervenciones) el 27/03/2007 01:03:57
Nuevo

No se que te hayan hecho los Argentinos, yo, tengo muy buenos amigos argentinos, por cierto, en este foro anda una amiga "gauchita" a la cual estimo grandemente (Saludos, Liliana Sorrentino).

Si para denigrar a una persona (segun tu), la comparas con los NEGROS, AMARILLOS o Argentinos, creo que andas muy mal, realiza un acto de constriccion y trata de dar a las gentes su lugar.

Creo que en mis comentarios hacia tu persona (Nuevo), no ha existido ni existira ofensa alguno.

Por mi, queda cerrado.

Recibe un saludo.
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:2 usuarios modifican el mismo registro

Publicado por Ignacio Sandoval (4 intervenciones) el 28/03/2007 22:20:01
Muchas gracias Isaias por tus comentarios, los tomare en cuenta para los proximos proyectos...

Creo que Nuevo mal entendio mi pregunta, pero igual aprecio su apoyo.

Saludos y muchas gracias.
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