Actualizar opciones de una lista desplegable al cambiar el valor de otro campo en formulario de access

Tengo un formulario con un campo lista llamado UsuarioAsignado y otro campo lista llamado OrdenadorDevuelto.

Mi intención es que cuando elija en un usuario de la lista "UsuarioAsignado", se actualice la otra lista y muestre los ordenadores en los que ese usuario aparece como usuario del equipo. Puede ser ninguno, uno o varios.

La tabla Ordenadores tiene los campos:

  • IdOrdenador: numérico, clave. Almacena el numero de id de ordenador
  • IdUsuario: numérico. Almacena el numero de ID del usuario
  • Equipo: texto corto. Almacena el nombre del ordenador

En el formulario, he configurado el campo lista "OrdenadorDevuelto" con el "origen de la fila" siguiente:

SELECT Ordenadores.IdOrdenador, Ordenadores.Equipo, Ordenadores.IdUsuario FROM Ordenadores WHERE (((Ordenadores.IdUsuario)=[UsuarioAsignado])) ORDER BY Ordenadores.Equipo; 

Con el fin de que el campo lista "OrdenadorDevuelto" se actualice cada vez que cambie de usuario asignado, en el campo lista "UsuarioAsignado" he configurado este evento "después de actualizar":

Private Sub UsuarioAsignado_AfterUpdate()
    If UsuarioAsignado <> Null Then
        Me.EquipoDevuelto.Requery
    End If
End Sub

Sin embargo, cuando pruebo el formulario, la lista "OrdenadorDevuelto" solo se actualiza la primera vez que elijo un usuario de la lista "UsuarioAsignado". Si cambio de usuario, me siguen apareciendo las mismas opciones en la lista "OrdenadorDevuelto"; es decir, no se actualiza.

¿Alguien podría ayudarme diciéndome qué error estoy cometiendo?

Y otra pregunta curiosa. Cada vez que hago un campo lista que muestra como opciones el resultado de una consulta, siempre se muestra vacío y hay que desplegar para elegir una opción. ¿Hay alguna forma de decirle que muestre como opción predeterminada el primer resultado de la consulta?

3 respuestas

Respuesta
1

El problema era el "IF UsuarioAsignado <> Null". Lo he quitado y ya funciona perfectamente

Private Sub UsuarioAsignado_AfterUpdate()
        Me.EquipoDevuelto.Requery
End Sub

Muchísimas gracias por vuestras amplias explicaciones, que por cierto tambien me han ayudado a entender mejor cómo funciona vba y access. 

Respuesta
1

No necesitas el requery para nada, ya que el origen de la fila del segundo cuadro de lista se lo da el primer cuadro de lista. Por ejemplo, si tengo un formulario con dos cuadros de lista, el segundo no tiene origen de la fila.

Y selecciono Argentina

Me muestra los clientes de argentina, que en tu caso sería los ordenadores de ese Idusuario. Y acto seguido hago clic en España y

Y el código no puede ser más sencillo

Private Sub Lista80_AfterUpdate()
Lista84.RowSource = "select nombrecliente from clientes where pais='" & Me.Lista80 & "'"
End Sub

No necesitas eliminar nada. Basta con ponerlo como

If not isnull([idusuario])

Respuesta

Le preparé este ejemplo:

TABLAS USUARIOS

TABLA ORDENADORES

FORMULARIO ORDENADORES

Observe que el usuario "Pedro" tiene 4 ordenadores, ahora hago clic sobre "Jairo" y obtengo:

Efectivamente tiene asignados 3 computadores.

CODIGO DEL FORMULARIO

El primer procedimiento es el código para crear el origen de datos del cuadro de lista "lstUsuarios" y el segundo es para actualizar el origen de datos del cuadro de lista "lstEquipos" al hacer clic sobre el nombre del cuadro de lista usuario.

Si quiere el ejemplo puede solicitarlo a [email protected], favor anotar en el asunto su preegunta.

Creo que el error esta en el nombre que actualiza la consulta del cuadro de lista OrdenadorDevuelto

Private Sub UsuarioAsignado_AfterUpdate()
If UsuarioAsignado <> Null Then
Me.OrdenadorDevuelto.Requery
End If
End Sub

Siga el ejemplo de Julián es ideal cuando solo se require unicamente el id del primer cuadro de lusta.

Ahora si no quiere crear el origen del cuadro de lista OrdenadorDevuelto por código, puede hacer que éste tome el origen de datos de la tabla tblOrdenadores y después modificar en Origen de de la fila de la consulta para fijar el criterio con base en el primer cuadro de lista lstUsuarios, puede utilizar el asistente para generar el criterio.

Y en el evento Al hacer Click del cuadro de lista lstUsuarios hace el Requery. Este sería el único código.

Cambie los nombres de los cuadros de lista por los suyos.

Estas son alternativas para usuarios que no saben SQL, pero vuelvo y le insisto el ejemplo de Julián es la mejor opción.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas