Cargar datos con dobleclick sobre un registro

Tengo un formulario llamado "FiltroInciden" que realiza consultas filtrando por tipo de hechos y entre fechas y las muestra más abajo, en un subforumlario (tipo Hoja de datos) llamado "ResultInciden". Pues bien, lo que quiero hacer, es que cuando el usuario pinche con el ratón dos veces en cualquiera de los registros listados del subformulario "ResultInciden", se abra un nuevo formulario "Inciden" mostrando todos los campos relacionados con el registro seleccionado. Esto lo he visto en muchas bases de datos, pero no consigo hacerlo, imagino que el código debe de ir en el evento al hacer doble click de los campos del subformulario "ResultInciden". ¿Puedes decirme el código correcto para hacerlo?

2 Respuestas

Respuesta
1
Soy a suponer que, ademas de ser en cualquiera de los registros, es en cualquiera de los controles que muestran los campos de ese registro. Obviamente eso solo se puede realizar en controles que admitan el doble-clic (TextBox o ComboBox) ya que, por ejemplo los CheckBox no lo admiten.
Lo que yo hago habitualmente es, cuando un código se va a utilizar en múltiples eventos (en tu caso tantos eventos doble-clic como controles lo admitan), crear una función en el propio módulo del formulario. Esa función, en tu caso, debe disparar la apertura de un formulario filtrado al registro en cuestión.
Vamos por la función.
Private Function AbrirFormularioFiltrado()
  DoCmd.OpenForm "Inciden", , , "[Identificador]=" & Me!controlidentificador
  ' se supone que el identificador es un numérico. SI no lo fuera, ponle apostrofes asi
  ' DoCmd.OpenForm "Inciden", , , "[Identificador]='" & Me!controlidentificador & "'"
End Function
Ahora solo debes pasar por cada uno de los controles que deban ejecutar esa función y, en la hoja de propiedades, en el evento Al hacer doble-clic, poner:
=AbrirFormularioFiltrado()
Ya que estamos, aquí va un truco para evitar hacer todo eso a mano. En el evento Open del formulario puedes asignar el evento doble-clic por código. Yo utilizo un array con todos los nombres de los controles. Lo recorro y asigno la función:
Dim misControles() As Variant
misControles = Array("uncontrol", "otrocontrol", "otromas")
Dim i As Integer
For i = 0 To UBound(misControles)
  Me(misControles(i)).OnDblClick = "=AbrirFormularioFiltrado()"
Next
De esa forma, si mañana añades un control, solo tienes que añadirlo al Array.
Otra forma que se me ocurre, ya que trabajas con hojas de datos, es recorrer los controles de la sección detalle y hacer lo mismo:
Dim ctl As Control
For each ctl In Me.Section(acDetail).Controls
  If ctl.ControlType = acTextBox Or ctl.ControlType = acComboBox Then
    ctl.OnDblClick = "=AbrirFormularioFiltrado()"
  End If
Next
Todos los códigos escritos del tirón. Revísalos y adaptalos a tus nombres de controles
Xavi
Respuesta
1
- Crea primero el subformulario 'Inciden' y que admita como parámetro el ID del dato que quieres mostrar.
Una vez que lo tengas en el DbldClick codificas un inciden. Open y le pasas el FK del dato sobre el que has clickado y que lo relaciona con el otro formulario ( si mal no recuerdo incluso existe un wizard). Con eso debería funcionar.
Si te cuesta coméntamelo y hago el ejemplo para ponerte el código exacto que de memoria no me fio :-)
Hola amigo experto. Muchas gracias por tu rapidez en responder.
Disculpame, pero necesito que me aclares algo más, soy bastante inexperto todavía. Ya he creado un formulario llamado "Inciden" y he creado en el evento doble click un "inciden.open", pero en el "FK" que me comentas me pierdo, no se a qué te refieres con esto. ¿Puedes ayudarme un poco más?
La Fk es el valor del formulario 1 que está vinculado con el formulari 2 por ejemplo el ID de incidencia o algo por el estilo.
Para mostrar un registro en el detalle necesitas tener un valor por donde buscar, eso es lo que tienes que pasar.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas