Todoexpertos.com
http://www.todoexpertos.com
La respuesta está en Internet
Información de la pregunta
Título: Manejo de concurrencia con SQL server 2000 y VB 6
Experto: mristol
Valoración: 4
Fecha: 16/05/2008


Manejo de concurrencia con SQL server 2000 y VB 6
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.  

Manejo de concurrencia con SQL server 2000 y VB 6
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.

Manejo de concurrencia con SQL server 2000 y VB 6
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

Manejo de concurrencia con SQL server 2000 y VB 6
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.

Pregunta finalizada. Valoración: 4
Muy Bien. Me ha sido de gran utilidad


Volver al mensaje
http://www.todoexpertos.com/categorias/tecnologia-e-internet/bases-de-datos/respuestas/1844782/manejo-de-concurrencia-con-sql-server-2000-y-vb-6