Ver Mensaje Individual
  #1 (permalink)  
Antiguo 05/12/2006, 08:03
mauricio76
 
Fecha de Ingreso: enero-2004
Mensajes: 77
Antigüedad: 20 años, 4 meses
Puntos: 0
Trabajar en línea

Tengo el siguiente problema.

Existe una aplicación Visual Basic que trabaja con una tabla determinada. En todo caso este ejemplo se puede tomar para cualquier tipo de aplicación, pues existirá el mismo problema.

La aplicación guarda códigos que se incrementan solos. O sea existe un Select max(cod_convenio) y el resultado quedará en la variable Codigo y se le sumará uno. Luego existirá un insert convenio (cod_convenio, algo, algo) values (codigo,algo,algo)

Al trabajar solo no hay ningún problema, pero, ¿qué pasa si hay dos personas grabando?, o peor aún, ¿qué pasa si hay un call center completo con 20 telefonistas grabando una misma tabla...AL MISMO TIEMPO?.

Imaginemos a dos personas grabando, la primera tomo el máximo y la segunda tomó el máximo. Supongamos el código 20.

Luego la primera le incrementa uno al máximo (21) y la segunda también le incrementó uno (21).

Luego el primero graba con el insert, y bien. Luego el segundo graba con el insert y saltó el error de Primary Key.

Lo otro sería preguntar si existe el código que se eligió y antes de grabar preguntar si el max + 1 existe e incrementarlo de nuevo y luego grabarlo.

Incluso un amigo me dijo que hiciera un ciclo recursivo, que hasta que no exista grabe, pero igual existe la posibilidad de que una vez que encontró uno que no exista la persona del lado sea más rapida tome el valor, lo grabe, y en el momento de grabar yo, nuevamente choque. Es más dificil pero no imposible.

Lo que he averiguado hasta el momento es que eiste algo que se llama bloqueo de tablas, y que bloquea la tabla mientras alguien la esté ocupando.

¿A quién le ha pasado algo similar?.