border

Miembros:
Mensajes:
Temas:
Online:

Ultimo Miembro:

 
 

  #1 (permalink)  
Antiguo 21-05-2008, 16:32:16
Buena Participación en el Foro
 
Registrado: dic 2005
Ubicación: Burgos
Posts: 61
josemiguel Valoración +2
Predeterminado Bloqueo

Hola de nuevo, me gustaría plantear una cuestión sobre un programa en visual basic.
Un programa principal ejecuta una librería. Antes de crear una serie de objetos, comprueba que no hay otra instancia del programa principal utilizando la misma librería. La forma de comprobar si se está ejecutando esta librería, se me ocurre que puede ser mediante un bloqueo. Ahora bien es la primera vez que tengo que hacer algo parecido. Entonces se me ocurre que puedo hacerlo mediante una tabla en la base de datos que utiliza el programa, dicha tabla la bloquearía el primer usuario que entrase al programa y las sucesivas instancias comprobarian si dicha tabla está bloqueada. La base de datos está en Access.
Tambien he pensado en un archivo txt que escriba un valor para indicar que ya está bloqueada, pero el problema es si el programa sale de forma imprevista y no escribe el desbloqueo en el archivo txt, eso haria que nadie mas pudiera bloquear hasta que manualmente se desbloqueara el txt.
Me imagino que alguien mas ha tenido este mismo problema, por eso me gustaría su opinión
Un saludo
Responder Con Cita
  #2 (permalink)  
Antiguo 21-05-2008, 20:17:08
Avatar de Black_devil
Gran Participación en el Foro
 
Registrado: jun 2006
Ubicación: San Carlos, VIII Reg.
Posts: 415
Black_devil Valoración +2
Predeterminado Re: Bloqueo

Hola, a ver no entendí mucho tu problema, quiero saber que hace esta librería y en que objetos (form, consulta u otra cosa) la ocupas, bueno mi idea es tener en una tabla los objetos que ocupan dicha librería y un campo de estado que sea verdadero o falso o 1 o 0 para comprobar si el formulario o utro objeto carga la librería ...

ej: El form x hace referencia a esa librería, que al cargar ese form consulte a la tabla si ese objeto o lo que sea la esta utilizando mediante el campo verdadero o falso si es verdadero que aparezca un mensaje u otra cosa, es mi idea ...


saludos
__________________
TAMD MYM
Responder Con Cita
  #3 (permalink)  
Antiguo 22-05-2008, 06:11:18
Avatar de Alella
Moderador
 
Registrado: mar 2004
Ubicación: BARCELONA - ESPAÑA
Posts: 967
Alella Valoración +2
Predeterminado Re: Bloqueo

Hola, que tal.

Cuando abres una base de datos access se genera automaticamente en el mismo directorio un fichero con el nombre de la base y extensión ldb que es un fichero de información del bloqueo de Access. Podrías consultar si existe este fichero y consecuentemente ya hay alguien consultando dicha base. Espero que te sirva.

Ya nos contarás.
__________________
Un saludo.

Alfredo
Barcelona-España
_________________
Visual Basic
Videos Programacion
Foro Programacion
Tutoriales Programacion
Responder Con Cita
  #4 (permalink)  
Antiguo 22-05-2008, 07:48:41
Buena Participación en el Foro
 
Registrado: dic 2005
Ubicación: Burgos
Posts: 61
josemiguel Valoración +2
Predeterminado Re: Bloqueo

A la respuesta de Black_devil le veo un problema. Si el programa se cuelga sale de forma anormal y no actualiza el campo en la base de datos, el programa queda en estado bloqueado aunque nadie lo esté ejecutando.
A la de Alella otro pequeñito problema. Hay veces en que la base de datos se cierra y no se desbloquea, es decir no se destruye ese archivo ldb, o permanece durante un tiempo. Entonces puede que nadie esté usando la base de datos y sin embargo esté bloqueada.

De todos modos las dos respuestas me parecen inteligentes y no se me habían ocurrido, gracias a ambos.
José Miguel
Responder Con Cita
  #5 (permalink)  
Antiguo 22-05-2008, 09:48:04
Avatar de J.M.Movilla
Administrator
 
Registrado: dic 2002
Ubicación: BURGOS - ESPAÑA
Posts: 5.167
J.M.Movilla Valoración +2
Predeterminado Re: Bloqueo

Yo uso un sistema que me funciona "casi" perfecto:

Tengo una tabla que llamo "Acceso" con sólo un campo: "Bloqueo" de tipo numérico-Integer.

Ese campo se inicializa con valor 0.

Cuando necesito tener bloqueado el fichero, que en realidad sólo es necesario en ocasiones especiales, como por ejemplo para incrementar el número de Factura (la última más uno...) donde no podrían acceder dos usuarios simultáneamente por ambos obtendrían el mismo número de factura, hado esto:
Código:
' Abro el recordset (rsBloqAcc) con el campo Bloqueo de la tabla Acceso
' Cada usuario tiene asignado un Número de Usuario (NumUsu)

'  ATENCIÓN.  Para DESBLOQUEAR si se salió por error...
If rsBloqAcc!Bloqueo = NumUsu Then
   rsBloqAcc!Bloqueo = 0
   rsBloqAcc!Bloqueo.Update
End If

' CONTROL DEL BLOQUEO
Dim nPasos As Long
Dim nMaxPas As Long

nMaxPas =  20000 'Este valor puede ser menor o mayor, dependiendo del tiempo que dure el proceso de grabación del registro...
EstudiaBloqueo:
For nPasos = 0 To nMaxPas
   If rsBloqAcc!Bloqueo = 0 Then Exit For
Next nPasos

If nPasos > nMaxPas
   ' El registro está bloqueado...
   ' Abro un mensaje preguntando si quiero INSISTIR en esperar el desbloqueo ->  Si contesta afirmativamente... Goto EstudiaBloqueo
End If

'  Proceso de búsqueda de último número de Factura.  Incremento este número...  Grabo el registro.  Updateo...

' Reinicio campo Bloqueo
rsBloqAcc!Bloqueo = 0
rsBloqAcc!Bloqueo.Update

' Y cierro el recordset.
Además de esto, tengo una opción, habilitada sólo para el Administrador, que puede poner a 0 el campo Bloqueo de la tabla Acceso, para el caso de que un usuario lo deje bloqueado y no vuelva a entrar... Porque, ya sinos que si entra de nuevo ese usuario, se desbloquea automáticamente.
__________________
José María Movilla Cuadrado
______________________

Visual Basic Videos Programacion Foro Programacion
Tutoriales Programacion Trucos Programacion Codigos Programacion
Responder Con Cita
  #6 (permalink)  
Antiguo 22-05-2008, 10:49:39
Buena Participación en el Foro
 
Registrado: dic 2005
Ubicación: Burgos
Posts: 61
josemiguel Valoración +2
Predeterminado Re: Bloqueo

Muchas gracias José Maria, veo que tu método es muy elaborado, por lo que voy a hacer una serie de pruebas. El rreintento de desbloqueo no es necesario, ya que la librería de la que hablo hace un trabajo que puede hacer cualquier usuario, pero no quiero que lo hagan mas de uno a la vez, por tanto si un usuario ya lo está ejecutando no hace falta que lo haga nadie mas.
Un saludo José María, no te he vuelto a ver pasear, a ver si coincidimos un día.
Responder Con Cita
  #7 (permalink)  
Antiguo 22-05-2008, 14:31:06
Buena Participación en el Foro
 
Registrado: dic 2005
Ubicación: Burgos
Posts: 61
josemiguel Valoración +2
Predeterminado Re: Bloqueo

Hola de nuevo, estoy probando de la siguiente forma a ver que os parece:
Como necesito un bloqueo por cada base de datos que tengo, cada vez que un usuario elige una base de datos para trabajar o proyecto el sistema crea un archivo txt con el nombre de la base de datos y el bloqueo de lectura
Open archivo For Binary Access Read Lock Read As #1
Si alguien mas quiere acceder a la base de datos intentará crear el mismo archivo y leerlo pero se generará un excepción que capturaré, informando al usuario de que el archivo está bloqueado.
Cuando el usuario salga del programa el sistema borrará el archivo creado, y un nuevo usuario podrá crearlo y con ello bloquear el proyecto o base de datos.
Si el sistema acaba de forma anormal puede que el sistema no tenga tiempo de borrar el archivo de bloqueo pero si lo cerrará, y otro usuario lo bloqueará sin necesidad de crearlo porque ya lo está, cuando este último usuario salga lo borrará.
Si alguien ve algo que pueda fallar le agradecería que me lo dijera. gracias
Responder Con Cita
Respuesta


Herramientas
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Trackbacks are habilitado
Pingbacks are habilitado
Refbacks are habilitado



La franja horaria es GMT. Ahora son las 00:56:25.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO 3.1.0
A vBSkinworks Design

Alojado en el servicio Premium de Masquewebs | Diseño mejorado por MasqueWebs

right