Usar recordset en una sentencia sql para access (vba)

Estoy desarrollando una macro para access con vba.

Tengo un cuadro combinado (como un combobox) en un formulario. Este formulario consta de varios campos y de varios subformularios. Quiero que al seleccionar un valor del cuadro combinado se filtre todo el formulario (con los subformularios asociados) según ese valor.

Lo había logrado con la propiedad Filter y FilterOn, pero al hacer la consulta salía una pop-up que a mi jefe no le gustaba y me ha dicho que cambie el código.

Ahora en vez de hacerlo con Filter, me he construido la sentencia SQL en VBA pero no se como aplicar el filtro al seleccionar el valor. Creo que la solución estaría en aplicar la propiedad RecordSource, pero en los ejemplos que he encontrado se refieren a aplicarla desde un formulario a un subformulario, no a todo el formulario, incluidos los subformularios y no se muy bien como adaptarla... ¿me podéis ayudar?

Mi código es:

Private Sub comboCruises_Change()

Dim sqlCompletaSelect As String

' Construyo la parte del SELECT de la sentencia SQL

Dim sqlCompletaFrom As String

' Construyo la parte del FROM de la sentencia SQL

Dim where As String

'Construyo la parte del WHERE de la sentencia SQL

where = Me.comboCruises.Value

Dim sqlCompleta As String

'Compongo la sentencia SQL. La he tenido que partir en varias partes porque al ser demasiado larga, me daba error.

sqlCompleta = sqlCompletaSelect & sqlCompletaFrom & where & ";"

'Aquí es donde creo que debería tener el código con RecordSource para aplicar el filtro

End Sub

1 Respuesta

Respuesta
1

Entiendo que formulario y subformularios están ligados por un campo, con lo que si cambias de registro en el formulario también se cambia en el subformulario.

Por eso, simplemente tienes que añadirle en tu código la asignación del recordsource a tu SQL

...

me.recordsource = sqlCompleta

End Sub

...

Automáticamente los subformularios deberían "acompañar" al registro que tengas en el formulario principal.

Hola Neckkito, gracias por tu respuesta.

Por lo que entiendo, al poner "me." ya hago referencia a mi formulario, entonces no necesitaría poner entre medias form, que es lo que yo estaba haciendo.

Mañana lo pruebo en el trabajo y te digo que tal me ha ido.

Besos!

Entiendes bien... De hecho, cuando haces referencia al combo que hay en el formulario tú misma escribes:

where = Me.comboCruises.Value

A ver si te va bien.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas