Inicio > Bases de datos > llodax > Abrir formulario filtrado con dobleclick en un registr

Abrir formulario filtrado con dobleclick en un registr

Experto:
Usuario: Anónimo Fecha: 29/10/2009
Valoración: (5,00 sobre 5) Categoría: Bases de datos
28/10/2009
Usuario
Hola experto:
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?
 
Saludos y muchas gracias de antemano.
28/10/2009
beneitor, experto respondiendo en Bases de datos
Experto
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. Obviemente 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 multiples 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 cuestion.
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, aqui 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 funcion:
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 tiron. Revisalos y adaptalos a tus nombres de controles
Xavi
 
 
 
 
 
29/10/2009
Usuario
Muchísimas gracias amigo Experto.
Funciona perfectamente, me has solucionado un gran problema para mí.
Saludos
Enlaces patrocinados