FoxPro/Visual FoxPro - Concurrencia en SQL Server

 
Vista:

Concurrencia en SQL Server

Publicado por Diego (23 intervenciones) el 08/07/2006 01:30:46
Hola a todos,
como se puede hacer para controlar un caso de concurrencia de 2 o mas usuarios en un mismo registro de una tabla en SQL Server 2000? Estoy trabajando con VFP 9.0 y SQL Server 2000 (usando SPT para conversar con la BD).
Expongo esta situacion:

- en un sistema 2 usuarios seleccionan un mismo cliente para modificar sus datos.
- se les abre a cada uno, una pantalla con los datos listos para editar.
- Uno de ellos le cambia el nombre original 'Juan' por 'Mario' y se va para el baño. Mientras tanto el otro usuario le empieza a cambiar el nombre que en su pantalla se ve como 'Juan', pero resulta que el primero ya le cambio por 'Mario'. A continuacion le coloca 'Luis' y graba el registro. Entonces vuelve el primer usuario y graba el registro con el nombre 'Mario' pero resulta que ya habia sido grabado con el nombre 'Luis' por el segundo usuario.

Como se puede evitar el llamado 'El ultimo graba' ?
Como hacer para que mediante bloqueo optimista del registro, se conozca que otro usuario ya lo habia cambiado y grabado, un segundo antes ?
O seria mejor efectuar un bloqueo pesimista ?

Muchas Gracias

Diego
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
sin imagen de perfil

RE:Concurrencia en SQL Server

Publicado por Ernesto Hernandez (4623 intervenciones) el 08/07/2006 01:35:42
Diego leiste esto ayer ??

Sabemos que todos los servidores de SQL (inclusive MS SQL 2000) no tiene LOCK, FLOCK, y RLOCK. ¿Usted puede preguntar por qué? ¡Por que todos los bloqueo es realizado automáticamente! ¿Cómo y cuándo? Sucede durante el proceso de la transacción. Durante una transacción SQL necesita cerrar completamente y automáticamente registros y tablas, las alarmas (y previene) posibles conflictos de comparticion de registros.
Es bueno por una parte. Nosotros no necesitamos preocuparnos por estas cosas. Todos trabajos acerca de cerrar y bloquear son responsabilidades del server. Por otra parte, parece que no tenemos flexibilidad de FoxPro. Malas noticias? No. No piense acerca de la transacción como la operación pesada.

BEGIN TRANSACTION – Instruimos al servidor para prepararse…
* Hacemos movimientos con los datos. En este momento los registros y las tablas se bloquean por el mismo server

* Automaticamente! Si el servidor detecta conflictos al compartir, entonces la transaccion falla
* Los datos se regresan autmaticamente!
END TRANSACTION Si llegamos aqui todo bien !

La mejor forma de usar un servidor de transacciones SQL desde VFP es pasando por SQL. Tambien puedes utilzar Stored Procedures

Tambien puedes leer acerca de :
SQLSETprop() -
SQLGETPROP() -
CursorSETPROP() - Creo que con este puedes logralo
CURSORGETPROP() -
tableUpdate() -
TableRevert() -

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