Bloqueo en access 2003

Hola como estas disculpa la molestia pero tengo un problema y no se como resolverlo en un formulario tengo 30 grupos de opciones que van del 1 al 30, cada grupo de opciones tienen 4 opciones que son a, b, c, d
Lo que quiero hacer es que al seleccionar a de cualquier grupo de opciones se bloqueen los que están adelante,
es decir selecciono del grupo de opciones 5 la opción a
que del 6 en adelante se bloqueen las opciones c y d y que se seleccione la opción e con la posibilidad de seleccionar la opción a de otro grupo de opciones y que se haga lo anteriormente descrito, también los grupos de opciones que estén antes del seleccionado solo puedan tener las opciones a, b y c habilitadas para su selección, realmente no se me ocurre una forma de hacerlo y agradezco de antemano la ayuda que se me pueda brindar.

7 Respuestas

Respuesta
1
En los formularios de Access, tienes un control que se llama "Grupo de opciones", o "Cuadro de opciones" (según qué version uses). Tiene un asistente que te permite crear el cuadro con las opciones que desees, y en el momento que seleccionas una, se bloquean los demás opciones.
Otra cosilla, es que desees bloquear solo algunas de las opciones dependiendo de la selección... esto ya es un proceso más manual, y lo que deberás hacer es ir bloqueándolas manualmente... te expongo el código necesario para esto:
If opción5 = true      'si está activada la opcion1....
    opcion1.enabled = false         'Desactiva la opcion1
    opcion2.enabled = false         'Desactiva la opcion2
    opcion3.enabled = false         'Desactiva la opcion3
    opcion4.enabled = false         'Desactiva la opcion4
End If
Respuesta
1
Creo que tienes un error en la explicación
dices "4 opciones que son a, b, c, d"
Y luego hablas de la opción e
"las opciones c y d y que se seleccione la opción e con"
Y la b, que le paso a la b
Bueno, de todas maneras solo tienes que hacerlo a mano
cada vez que elijas una opción bloquea las que quieras en la siguiente
y así sucesivamente
también podrás crear una función que te ayude ha hacerlo más fácilmente
te sugeriría me enviaras lo que tienes para ayudarte más
si los grupos de opciones son marcos de opciones, puedes colocar cada opción inavilitada (enabled=false)
Pero cuntame mas despues, eviamelo a [email protected]
Muchas gracias por la ayuda men y que chido que existan personas interesadas en ayudar
De antemano gracias por tu tiempo
El ejemplo estuvo muy bien lo adapte y me sirvió de maravilla
Gracias ...
Respuesta
1
Un tanto lioso lo que planteas. Lo primero intentar entender lo que quieres.
Entiendo que has creado 30 grupos de botones de opciones. Cada grupo de botones estará dentro de un 'Frame' y su nombre será opcA, opcB, opcC y opcD. Crearemos el primer grupo y después, seleccionando el frame y los 4 botones daremos a copiar-pegar.
A la pregunta de si queremos crear una matriz de controles diremos que sí. Con lo que nos irá creando los controles con los nombres indicados 'opcA' más un índice (0, 1, 2...). Por ello, para referirnos a la opción B del grupo 6 miraremos el control opcB(6).
Otra cosa, dices que si en grupo 5 tiene valor 'a' se selecciona el valor ¿e? A partir del grupo 6, dejando también activa la 'a'. Supongo que se selecciona la 'b', ya que la 'e' no existe.
Por último indicas que si el grupo 5 tiene seleccionado la 'a', los grupos anteriores tienen que desactivar la 'd', pero... ¿qué ocurre si tuvieran elegida esa opción antes de cambiar el grupo 5 a la opción 'a'?. Como no dices nada, desactivaremos la opción "D" y no haremos nada más
Bueno, el código que tendrías que poner en tu programa es el siguiente:
Option Explicit
Const numCopias = 30
Private Sub opcA_Click(Index As Integer)
    comprobarEstadoOpciones
End Sub
Private Sub opcB_Click(Index As Integer)
    comprobarEstadoOpciones
End Sub
Private Sub opcC_Click(Index As Integer)
    comprobarEstadoOpciones
End Sub
Private Sub opcD_Click(Index As Integer)
    comprobarEstadoOpciones
End Sub
Private Sub comprobarEstadoOpciones()
    Dim i As Integer
    Dim j As Integer
    ' Desactivamos el formulario para que no puedan tocar nada durante el proceso
    Me.Enabled = False
    ' Activamos todos los controles
    For i = 0 To numCopias - 1
        opcA(i).Enabled = True
        opcB(i).Enabled = True
        opcC(i).Enabled = True
        opcD(i).Enabled = True
    Next i
    ' Comprobamos la opción A de todos los controles
    For i = 0 To numCopias - 1
        If opcA(i) Then ' Activada la opción A.
            ' Marcamos la opcion B y desactivamos las opciones C y D posteriores
            For j = i + 1 To numCopias - 1
                opcB(j) = True
                opcC(j).Enabled = False
                opcD(j).Enabled = False
            Next j
            ' Desactivamos la opción "D" de las anteriores
            For j = 0 To i - 1
                opcD(j).Enabled = False
            Next j
        End If
    Next i
    ' Volvemos a activar el formulario
    Me.Enabled = True
End Sub
Si me mandas una dirección de correo te envío el programa que utiliza ese código.
Bueno gracias me parece interesante tu propuesta y de antemano gracias bueno mi correo es [email protected] y si la opción e ni al caso es que estoy haciendo un sistemita y esa es parte del sistema pero pues apenas estoy comenzando a programar y se me hace complicado y pues las opciones comienzan desactivadas y pues en primer lugar se debe fijar la opción a de algún grupo de opciones para que se haga el proceso que te había comentado
Creo que tienes razón es un tanto liosa mi explicación a lo mejor me debo plantear bien que es lo que debo de hacer de mis 30 opciones tienen 4 radio button
a, b, c, d
la a sirve para fijar un plan
la b, c y la d son su estatus
todo comienza desactivado
debemos seleccionar la a de cualquier grupo digamos de la 20 entonces de la 21 en adelante solo deberían poder seleccionar la a y la d
y de la 19 para atrás la b y la c
pero aqui ahy una esepcion digamos que quiero seleccionar la opcion a de la 23 entonces de la 24 en adelante solo se deberan seleccionar la a y la d
y de la 23 para atras la b y la c
y asi en todos los casos
De antemano muchas gracias y aquí estoy para ayudar si en algo puedo
Muchas gracias creo que es la mejoropcion ya que no soy experto en programación se que va a llevar tiempo pero pues así es esto
¿Disculpa eso de las matrices de controles como se haría ya que no hace eso de que pregunta al copiarlo?
Te acabo de enviar un correo con un programa en VB que hace 'algo parecido' a lo que quieres.
Muchas gracias por la ayuda men y que chido que existan personas interesadas en ayudar
De antemano gracias por tu tiempo y con el ejemplo me sirvió mucho
Respuesta
1
Usa la propiedad 'Enabled' y para cada grupo de opciones comprueba o modifica las que quieres cambiar en el evento 'click
algo como
Sub Option1_Clik()
Grupo1.enabled=True
Grupo2.Enabled=False
Option2.Enabled=False
etc etc...
end sub
También puedes usar algunas variables para agrupar casos y simplificar el código pero eso ya lo dejo a tu elección.
Te va a resultar largo pero es más seguro, hay otras opciones más cómodas pero hay que meterse en arrays de controles y demás que si no te sientes cómodo con ellos te va a complicar más la vida.
Respuesta
1
Disculpa la demora.. bueno tengo una duda..
¿Cuándo mencionas la opción "e" significa que tienes otra opción más, aparte de a, b, c y d?
No perdón solo fue error de sintaxis
Bueno creo que me debo explicar un poquito mejor tengo 30 grupos de opciones de la 1 a la 30
cada un con opción a b c d
cuando entras al form no hay ni una seleccionada lo primero que se debe seleccionar es la opción a de cualquier grupo digamos de la 20 entonces de la 21 en adelante solo estarán disponinbles la a y la d y de la 19 para atrás la b y la c
Aquí la excepción como de la 21 en adelante esta también desbloqueada la a la puedo seleccionar
ejemplo ahora me posiciono en la 23 y selecciono la a se tiene que hacer el proceso anterior
Bueno según entiendo tienes que validar la activación de una opción..
Podemos empezar con asignar bien los nombres con el fin de poder manipularlos por código.
Agregas cada uno con los siguientes nombres:
Grupo1
Opcion11
Opcion12
Opcion13
Opcion14
Grupo2
Opcion21
Opcion22
Opcion23
Opcion24
Grupo3
Opcion31
Opcion32
Opcion33
Opcion34
Grupo4
Opcion41
Opcion42
Opcion43
Opcion44
Etc...
Una variable pública boleana para que te valide si se están borrando o no los "opcion".
Public borrado as boolean
Después una función de borrado, para quitar el botón activado y desbloquear los "opcion"..
function borrar()
dim grupo as integer, opcion as control, opcion_a_borrar as integer
borrado=true
for grupo=1 to 30
    for opcion_a_borrar=1 to 4
        set control= "OPCION" & grupo & opcion_a_borrar
        control.value=0
        control.enabled=true
    next opcion_a_borrar
next grupo
borrado=false
end function
Ahora la función con el ciclo donde manejas las comparaciones
function comparar(letra_opcion as string, numero_opcion as integer)
dim grupo as integer, opcion as control, opcion_a_trabajar as integer
borrado=true
select case letra_opcion
   case "A": 
   for grupo=1 to numero_opcion-1 ' for para que te valide los últimos grupos
       set control= "OPCION" & grupo & 1
       control.value=1
       control.enabled=true
       set control= "OPCION" & grupo & 2
       control.value=0
       control.enabled=false
       set control= "OPCION" & grupo & 3
       control.value=0
       control.enabled=false
       set control= "OPCION" & grupo & 4
       control.value=1
       control.enabled=true
   next grupo
   for grupo=numero_opcion to 30' for para que te valide los anteriores grupos
       set control= "OPCION" & grupo & 1
       control.value=0
       control.enabled=false
       set control= "OPCION" & grupo & 2
       control.value=1
       control.enabled=true
       set control= "OPCION" & grupo & 3
       control.value=1
       control.enabled=true
       set control= "OPCION" & grupo & 4
       control.value=0
       control.enabled=false
   next grupo
   case "B":
   'agregas otras comparaciones
   case "C":
   'agregas otras comparaciones
   case "D":
   'agregas otras comparaciones
end select
borrado=false
end function
Y finalmente código en el evento click en cada opción, lo copias y pegas en cada opción, eso si reemplazar según corresponda "A", "B" etc, igualmente con el número de opción
Private Sub Opción11_Click()
if borrado=false then 
   call borrar
   call comparar("A", 1) '1 porque el número de opcion en el grupo es la 1.
end if
End Sub
Como sabes esto es código VBA, cualquier cosa me escribes.
Respuesta
1
Exactamente no se lo que pretendes hacer, porque entiendo que hay en tu formulario 120 casillas de verificación todas ellas reunidas en 30 grupos de opciones,... pero no me dices si el origen de datos proviene de una tabla, o por el contrario controlas las variables el en módulo interno del form. Te pido en tal caso que me dieras algún dato más o que quieres conseguir y así quizás comprendas mejor lo que necesitas.
Hola gracias por responder creo que no supe plasmar bien lo que quiero lo que paa es que tengo un formulario con 30 grupos de opciones
del 1 al 30
cada uno con 4 opciones
a b c d
todos van a ir ligados a una tabla
al iniciar el form todos devén estar desactivados
lo primero que se debe de hacer es seleccionar la opción a de cualquier grupo
por ejemplo de la 20
entonces de la 21 a la 30 solo se bloquearan la b y la c
de la 19 para atrás la a y la d
aquí vendría una excepción como quedo desbloqueada la opción a de la 21 en adelante entonces se puede seleccionar digamos que ahora selecciono la a de la opción 25
entonces se tenfria que hacer lo antes mencionado y quitando de la 21 la opción a y solo dejando las opciones b y c ya que quedaría atrás
todo esto es para seguir un estatus de acciones se guardan en una tabla así por que cada acción deben tener un seguimiento osea 32 revisiones y la a es en el limite que se tiene si pasas del limite seria calificación negativa y la b y la c son positivas
bueno gracias por tu tiempo y espero que me puedas ayudar
de antemano gracias
Vamos a ver... si bloqueas un control ... no puedes activarlo desde ese control bloqueado, tienes que desbloquearlo desde otro control que se encuentre activo, y todo esto lo tienes que hacer creándote las funciones y procedimientos necesarios mediante vb y lo procedimientos de evento. Si tienes algo ya hecho y quieres que te eche un visazo me lo puedes enviar.
Respuesta
1
En este caso me aclaraste en el titulo sobre que estas trabanado, pero no conozco la sitanxis de la prgramacion dentro de access 2003. Te copio lo que ete respondí en la otra pregunta para que tengas fresca la idea general, abría que traducirla al lenguaje.
Saludos
_______________________________________________________________________
Tratando de generalizar, lo que precisas es tener una matriz similar a la siguiente donde pode consultar que hacer ante la seleccion de cada grupo de opciones
grupo[1]opcion[1]accion[1]grupo[2]opcion[1]estado=enabled
grupo[1]opcion[2]accion[1]grupo[2]opcion[1]estado=disabled
grupo[1]opcion[2]accion[2]grupo[2]opcion[2]estado=enabled
grupo[2]opcion[1]accion[1]grupo[1]opcion[2]estado=disabled
grupo[2]opcion[1]accion[2]grupo[1]opcion[2]estado=enabled
grupo[2]opcion[2]accion[1]grupo[1]opcion[2]estado=disabled
Según el lenguaje que uses deberás adaptarlo.. pero la idea es que parado en el evento change del grupo, sabiendo su id y que opción elijieron, puedas consultar en la matriz que hacer con el resto de los grupos.
Para el ejemplo que te di, al seleccionar la opción 2 del grupo 1, tendrás dos acciones para realizar, primero setear el estado de la opción 1 del grupo 2 en disabled, y luego setear el estado de la opción 2 del grupo 2 en enabled.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas