Programación General > Visual Basic 6.0 e inferiores
Bloqueo De Registros
Juan C:
Hola a todos:
La situación es la siguiente:
Tengo un programa que está trabajando muy bien, es de ventas, inclusive para red y la base de datos esta en un servidor.
El problema es que si quiero añadir un registro por ejemplo para grabar (añadir con addnew) una venta, pero si de dos maquinas o mas quieren añadir al mismo tiempo el registro (exactamente al mismo tiempo oprimen la tecla para grabar), como tiene que registrar el numero de la venta tengo conflicto con la actualización de los datos o que me de el número consecutivo de la venta.
Este problema solo lo hace si se oprime la tecla de grabar al mismo tiempo en diferentes máquinas, si pasa una fracción de segundo, no hay problema.
Alguien por favor me puede decir si hay que bloquear el registro si es asi como le hago, o de que manera lo puedo solucionar.
Muchas gracias
PD realmente me urge
Saludos
Juanolo:
Hola, Juan.
Tengo un par de dudas: ¿De dónde sacas el número de la venta? ¿En que momento se produce el error?
Te lo pregunto porque realmente no veo que el problema esté al añadir registros. Yo tengo un sistema similar en donde el número de factura está en una tabla de la base de datos. Cuando se realiza una venta, voy a esa tabla, tomo el número actual para el documento y lo incremento en uno para la nueva venta.
Es en esta tabla donde se debe controlar un posible error por encontrar el registro bloqueado (debo usar 'edit' para incrementar el número). En caso de error, puedes colocar un simple retardo como el siguiente:
--- Código: Text ---for i=0 to 1000 i=i+1next i
y luego vuelves a intentarlo con la instrucción resume.
Ahí nos cuentas.
Salu2.
Juan C:
Juanolo:
De antemano muchas gracias por interesarte a ayudarme
Efectivamente es algo muy similar a lo que escribiste.
El número consecutivo lo tomo del ultimo registro de la tabla de ventas ( o facturas) y lo incremento en uno, el problema que me da es que pueda suceder que exactamente al mismo tiempo de dos maquinas quieran acceder a ver el ultimo registro para tomar el numero e incrementarlo, asi tendria dos ventas con el mismo número y como no se aceptan duplicados ahi estará el problema, voy a itrabajar un poco con lo que me dices, lo que no entiendo para ponerlo en EDIT, yo uso lo sig. para abrir la tabla:
Set rsVenta = New ADODB.Recordset
rsVenta.Open "Select * from ventas", cnC, adOpenKeyset, adLockOptimistic
Gracias y saludos
Juanolo:
Ok... Es que yo estoy en el pasado... Uso DAO.
Efectivamente cuando intenté con ADO me volví loco buscando el comando Edit; je, je.
Lo que hago es ir al registro y editarlo (al tiempo que leo el número). Mientras lo estoy editando, que es una fracción de segundo, el registro permanece bloqueado, lo que hace que otra máquina que intente lo mismo reciba un error interceptable.
El manejo de error a que me refiero más arriba, permite a la máquina intentar nuevamente el cambio, entonces el registro ya estará desbloqueado y con el número ya actualizado.
Ahora bien, eso es en DAO, en donde el registro se bloquea automáticamente cuando recibe la instrucción edit. Me imagino que en ADO debe existir la posibilidad de realizar un manejo similar.
Suerte.
Juan C:
Hola:
En DAO es buena opción al usar edit se bloquea el registro, pero como le hago en ADO, para indicarle que bloquee un registro determinado, esa sería ahora mi duda
si alguien me ayuda mil gracias:
Juan Carlos
Navegación
[#] Página Siguiente
Ir a la versión completa