Foros del Web » Programación para mayores de 30 ;) » Programación General » Visual Basic clásico »

Trabajar en línea

Estas en el tema de Trabajar en línea en el foro de Visual Basic clásico en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 05/12/2006, 08:03
 
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?.
  #2 (permalink)  
Antiguo 05/12/2006, 09:53
 
Fecha de Ingreso: diciembre-2004
Mensajes: 129
Antigüedad: 19 años, 4 meses
Puntos: 0
por que no le dejas ese trabajo a la tabla?, que el primarykey sea un autonumerico
  #3 (permalink)  
Antiguo 06/12/2006, 09:41
Avatar de aavg  
Fecha de Ingreso: abril-2002
Ubicación: Morelia México
Mensajes: 356
Antigüedad: 22 años
Puntos: 1
Re: Trabajar en línea

Al abrir tu Recordset en la propiedad LocType puedes ponerlo de manera que solo una persona pueda escribir al mismo tiempo en un mismo registro, de cualquier manera si no utilizas autoincremento, deberás hacer una ultima validación de ese valor antes de escribirlo.
__________________
Abraham Velasco
Usuario # 516 en los Foros del Web.
El hombre no vale por lo que sabe, sino por lo que transmite
C'est parce qu'il y a un Dieu que nous sommes libres
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 19:41.