Programación General > Visual Basic 6.0 e inferiores

 Bloqueo de Registros

(1/2) > >>

[Zerox]:
Ante todo buenas colegas, se que este tema ya se ha tocado en el foro, pero la verdad es que no he hayado ninguna solución concreta...

Bueno ante todo decirles que mi problema es el siguiente:

Tengo una aplicación cliente-servidor corriendo en mas de 5 Pcs, y lo que quisiera es bloquear un registro, les pongo un ejemplo:

Tengo una tabla Productos con el campo Stock... (BD Ventas)
(* Esto solo es un ejemplo)

ID         DESCRIPCION              STOCK
--         ----------------              --------
1          MUEBLE XXXX                 2

Al momento en que 2 o 3 personas ingresan al Sistema y justamente en ese momento llegan 2 clientes y piden los 2 muebles cada uno en diferentes sucursales, en el Formulario de Ventas les aparecera 2 muebles a cada vendedor que este usando el sistema...
Logicamente el primero que haga la venta descargara el stock de muebles y el otro vendedor al momento de vender, obtendra un mensaje diciendo que ya se vendieron (previo controlador de errores)...

La idea es no hacer esperar al cliente para decirle despues que se acabo el stock...

Ojala me haya dejado entender
Lo que quisiera es bloquear el registro, o de alguna forma especificar que ese registro esta siendo usado para una venta...

Gracias de antemano

m0skit0:
Pues añade un byte que indique si ese registro está siendo usado (byte = 1, usado, = 0 libre). Cuidado con la concurrencia, es decir, es posible que 2 vendedores accedan exactamente a la vez al campo y vean que está a 0 los dos. Aunque la probabilidad de que ello ocurra teniendo tan sólo 5 accesos simultáneos, la Ley de Murphy siempre está ahí. Un saludo.

F_Tanori:
El bloqueo de registros se hace por medio del DBMS, quien es quien se debe de encargar de estas tareas. al menos que estes usando archivos...

Este problema no debe resolverse con programacion

independientemente del patron de diseño que estas utilizando;es en la capa de datos  donde debe resolverse incluso creo que la duda esta en el foro incorrecto ( ya que VB es un lenguaje de programacion  :o :P ) , deberias de especificar que DBMS utilizas y cuales son las formas o metodos en que accesas a los datos.

Comentanos mas sobre tu base de datos, conexiones, y consultas


--- Cita de: "m0skit0" ---Pues añade un byte que indique si ese registro está siendo usado (byte = 1, usado, = 0 libre). Cuidado con la concurrencia, es decir, es posible que 2 vendedores accedan exactamente a la vez al campo y vean que está a 0 los dos...
--- Fin de la cita ---

 :blink:


Saludos

m0skit0:

--- Cita de: "F_Tanori" ---    m0skit0 escribió:Pues añade un byte que indique si ese registro está siendo usado (byte = 1, usado, = 0 libre). Cuidado con la concurrencia, es decir, es posible que 2 vendedores accedan exactamente a la vez al campo y vean que está a 0 los dos...


:blink:


--- Fin de la cita ---

 :blink:

[Zerox]:
Bueno ante todo gracias por la debida atencion

Decirles primero que uso SQL Server 2000, (procedimientos almacenados para inserciones, actualizaciones y eliminaciones)...
Ahora bien, uso recordsets, pero solo para cargar registros y hacer las respectivas consultas y setearlas a sus respectivos Grids..
Para insertar o hacer cualquier movimiento... uso el metodo Execute de la Conexion, al cual le paso el SP respectivo...

Ahora bien, moskito, gracias por el aporte, a lo que entendi, es que cree yo un campo mas en la tabla con el valor de un estado, para saber si esta siendo usado o no... ahora bien, que pasa si un usuario del sistema ingresa y bloquea el registro (poniendole el estado a 1), pero justo en ese momento  se reinicia la PC, el registro se va a quedar bloqueado y nadie podra acceder ya que sigue estando bloqueado... no es que sea muy extremista, pero ustedes saben que como ing. de sistemas o informaticos, tenemos que hacer el programa tan robusto que resista a cualquier imprevisto.

F_Tanori
Agradezco tu aporte, en parte creo que tienes razon, ya que usando transacciones o ISOLATION LEVEL, en este caso con SQL Server se puede boquear tablas o en su defecto con la transaccion evitar errores...

Pero = el cliente perderia tiempo esperando a que en cualquiera de los puntos le digan que justo en ese momento ya se acabo de vender el producto a otra persona.... esto es lo que me preocupa mas que todo

Ver la forma de como poder solucionar este problema...
Gracias de antemano

Navegación

[0] Índice de Mensajes

[#] Página Siguiente

Ir a la versión completa