Inicio > Bases de datos > mristol > Manejo de concurrencia con SQL server 2000 y VB 6

Manejo de concurrencia con SQL server 2000 y VB 6

Experto:
Usuario:
Fecha: 16/05/2008
Valoración: (4,00 sobre 5) Categoría: Bases de datos
16/05/2008
jenolip, usuario preguntando en Bases de datos
Usuario
Hola, estoy desarrollando una aplicación en visual 6.0 y como base de datos utilizo SQL Server 2000, la aplicación esta instalada en varias pc´s y la BD en un servidor. El problema es cuando 2 usuarios tratan de insertar al mismo tiempo un registro, ya que las peticiones son al mismo tiempo y en SQl server solo se guarda la ultima petición. ¿Como manejo esta concurrencia?, ¿es desde código en VB6 o en SQL? Me urge solución, gracias.
 
16/05/2008
jenolip, experto respondiendo en Bases de datos
Experto
Buena pregunta....
Dependerá de quien debe tomar la decisión al introduir los datos.
Me explico, imaginemos que tenemos dos usuarios que tienen una funcion: funcionAEstudiar() la cual se encarga de mirar cual el es ultimo código asignado dentro de la base de datos para devolverlo a VB y que luego el usuario rellene unos campos y al darle a aceptar rellene la base de datos.
A mi entender el metodo más sencillos es mediante un semaforo dentro de la BBDD, un campo dentro de una tabla que indique que mientras se esta haciendo un delete, insert o update que ninguna otra funcion puede acceder a esa tabla.
¿Pero desde donde se controla el semaforo? Se puede hacer en el SQL o en el VB, yo te recomiendo en el SQL para que todas las funciones se mantengan como standards dentro del manejo de la BBDD.
No se si sabes muy bien como va el tema de los semaforos/sockets. Si no lo acabas de conocer avisame y te lo explico con mas profundidad.
16/05/2008
jenolip, usuario preguntando en Bases de datos
Usuario
Hola te agradezco mucho hayas tomado en cuenta mi pregunta, resolvi el problema desde codigo en visual basic, con un bloqueo, sin embargo no siempre desarrollare en visual basic, me interesa saber mas acerca de los semaforos que me comentas losd cuales me dices que se pueden hacer en en SQL server, ¿como los programas?, ¿es en el Query analizer, a través de una función, etc?, me gustaria saber más. Gracias
16/05/2008
jenolip, experto respondiendo en Bases de datos
Experto
A ver dos cosas antes que me lie, el SS ya incorpora semaforos de base. Pero a veces sabes que entre una solicitud y la respuesta de otro servidor puede dar problemas. Luego es un buen momento para pensar en esto.
De hecho se trata de un chapucilla que a veces hace falta. Te creas una tabla tSemaforo con los campos: nTabla (nVarchar(50)) y iBloqueo (int)
se trata de tener dos Procedures: fBloquearTabla(@nombreTabla), fLiberarTabla(@nombreTabla)
El fBloquearTabla hara lo siguiente: buscara la tabla indicada dentro de nTabla y mirará si el campo iBloqueo esta a 1, si esta a uno se esperará (wait: hay varios tipos puedes escojer el que prefieras) y lo volvera a comprovar hasta encontrarla a 0.
El fLiberarTabla encambio ara: Buscar la tabla indicada dentro de nTabla y actualizará el campo iBloqueo a 0.
Teniendo estas dos funciones luego si sabes que vas a lanzar un proceso muy grande y no quieres que hayan choques con otras funciones y te bloqueen la tabla. Antes de empezar cada lanzamiento usaras el fBloquearTabla(tablaABloquear), luego lanzaras lo que quieras hacer y luego lanzarás el fLiberarTabla(tablaABloquear).
Ya esta es sencillo.
16/05/2008
jenolip, usuario preguntando en Bases de datos
Usuario
Muy Bien. Me ha sido de gran utilidad
Enlaces patrocinados