Pasar un filtro para una consulta en un módulo

A ver, tengo un código repetido en varios formularios, y me gustaría centralizarlo en un módulo. Sin embargo, uno de los filtros de la instrucción SQL es variable.

Así, la función que he creado ha sido esta:

Public Function Prueba(FName As Form, NumFormato As Long, cmbFormato As String)
    FName.Genero1.RowSource = "SELECT [TGeneros].[Genero], [TLibros].[Estado], [TFormatos].[Formato] " _
        & "FROM TFormatos INNER JOIN ((TGeneros INNER JOIN TSubgeneros ON [TGeneros].[ID] = [TSubgeneros].[Genero]) INNER JOIN TLibros ON [TSubgeneros].[ID] = [TLibros].[Subgenero]) ON [TFormatos].[ID] = [TLibros].[Formato] " _
        & "GROUP BY [TGeneros].[Genero], [TLibros].[Estado], [TFormatos].[Formato] " _
        & "HAVING ((([TLibros].[Estado]) = 'NumFormato') And (([TFormatos].[Formato]) = 'cmbFormato'))" _
        & "ORDER BY [TGeneros].[Genero]"
        FName.Genero1 = ""
        FName.Requery
End Function

Y el formulario, lo tengo así:

Call Prueba(Me, 4, "[Forms]![FPendientes]![Formato1]")

Pero el problema lo tengo con NumFormato y cmbFormato. Me los pilla como campos, y no sé cómo he de ponerlo para que me lo coja bien. También es cierto que esto no será si será posible hacerlo.

1 respuesta

Respuesta
2

Así:

Public Function Prueba(FName As Form, NumFormato As Long, cmbFormato As String)
    FName.Genero1.RowSource = "SELECT [TGeneros].[Genero], [TLibros].[Estado], [TFormatos].[Formato] " _
        & "FROM TFormatos INNER JOIN ((TGeneros INNER JOIN TSubgeneros ON [TGeneros].[ID] = [TSubgeneros].[Genero]) INNER JOIN TLibros ON [TSubgeneros].[ID] = [TLibros].[Subgenero]) ON [TFormatos].[ID] = [TLibros].[Formato] " _
        & "GROUP BY [TGeneros].[Genero], [TLibros].[Estado], [TFormatos].[Formato] " _
        & "HAVING ((([TLibros].[Estado]) = " & NumFormato & ") And (([TFormatos].[Formato]) = '" & cmbFormato & "'))" _
        & "ORDER BY [TGeneros].[Genero]"
        FName.Genero1 = ""
        FName.Requery
End Function

Y para llamarla tendrás que hacer así:

Call Prueba(Me, 4, [Forms]![FPendientes]![Formato1])

y no como pones, sino le estás pasando la cadena "[Forms]!FPendientes]![Formato1]" y no el valor de ese campo del formulario.

Comentarte también que una función se crea cuando quieres que devuelva un valor, si solo vas a ejecutar acciones (como es el caso), crea un procedimiento Sub y no uno Function

Muchas gracias. Me has resuelto la duda, y, encima, me has enseñado otra cosa más. He probado de todo y no lo conseguía. En cuanto al campo que ves, yo quería pasarle esa cadena, así que he quitado una de las comillas, y funciona. Saludos.

La pregunta no admite más respuestas

Más respuestas relacionadas