** NORMAS DEL FORO **
Inicio del foro Inicio del foro > Access y VBA > Access y VBA
  Mensajes nuevos Mensajes nuevos RSS - Recordsouce con filtro
  Preguntas frecuentes Preguntas frecuentes  Buscar en el foro   Eventos   Registro Registro  Iniciar sesion Iniciar sesion

Tema cerradoRecordsouce con filtro

 Responder Responder
Autor
Mensaje
gabores Ver desplegable
Habitual
Habitual
Avatar

Unido: 06/Agosto/2007
Localización: Bolivia
Estado: Sin conexión
Puntos: 123
Enlace directo a este mensaje Tema: Recordsouce con filtro
    Enviado: 30/Marzo/2021 a las 20:41
Hola a todos.
Los molesto para ver si pueden echarme una mano con algo que me esta complicando

Tengo un informe que tiene aplicado un filtro en el evento AL ABRIR y funciona perfectamente.

Ese informe ahora debo aplicarlo como subinforme dentro de otro y ya el filtro no funciona.
He buscado por todos lados y dí con una publicación que comenta que los filtros no funcionan en subinformes por lo que lo correcto seria en el mismo evento aplicar un RECORDSOURCE donde se aplique ese filtro a la condición WHERE pero he dado mil vueltas y no consigo hacer que el código funcione.

el recordsource sería 

Me.RecordSource = "Select * from rpt_cobros_001_sub_3_csl where 

y el where sería

 "[caja_fecha] Between #" & Format(Forms!frm_rpt_seleccion!desde, "mm/dd/yyyy") & "#" & " and #" & Format(Forms!frm_rpt_seleccion!hasta, "mm/dd/yyyy") & "#"

pero cuando los uno no funciona y no tengo idea de donde le estoy errando.

Alguien podría orientarme.

Desde ya muchas gracias.
 
Arriba
GOOO Ver desplegable
Asiduo
Asiduo
Avatar

Unido: 08/Mayo/2012
Localización: Guatemala
Estado: Sin conexión
Puntos: 351
Enlace directo a este mensaje Enviado: 31/Marzo/2021 a las 19:41
Generalmente lo que hago es mandar un msgbox con la cadena para verificar exactamente que es lo que esta recibiendo.

Msgbox "Select * from rpt_cobros_001_sub_3_csl where [caja_fecha] Between #" & Format(Forms!frm_rpt_seleccion!desde, "mm/dd/yyyy") & "#" & " and #" & Format(Forms!frm_rpt_seleccion!hasta, "mm/dd/yyyy") & "#"

Alli podras verificar exactamente que estás enviadole al informe

Si es un subinforme, ya probaste cargar el RecorSource desde el informe principal o padre.

Me.SubInforme.RecordSource ....tu codigo

Editado por GOOO - 31/Marzo/2021 a las 19:45
Viendo se aprende y practicando se mejora
Arriba
rokoko Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 16/Febrero/2008
Localización: Pamplona
Estado: Sin conexión
Puntos: 3062
Enlace directo a este mensaje Enviado: 31/Marzo/2021 a las 20:12
Esto he sacado de mis apuntes

RECORDSET ENTRE FECHAS Tiene que ir entre # y tener formato fecha

 

Dim rst As DAO.Recordset

Set rst = CurrentDb.OpenRecordset("SELECT tbVentas.NumFactura, tbVentas.FacturaCreada, tbVentas.Cliente, tbVentas.FacturarRemesa FROM tbVentas WHERE (((tbVentas.FechaVenta) Between # " & Format(Me.Texto0, "mm/dd/yyyy") & " # And # " & Format(Me.Texto2, "mm/dd/yyyy") & " # ))GROUP BY tbVentas.NumFactura, tbVentas.FacturaCreada, tbVentas.Cliente, tbVentas.FacturarRemesa HAVING (((tbVentas.NumFactura) Is Null) AND ((tbVentas.Cliente) Is Not Null))")



Quizas alguna comilla doble mal puesta?



Editado por rokoko - 31/Marzo/2021 a las 20:13
Arriba
gabores Ver desplegable
Habitual
Habitual
Avatar

Unido: 06/Agosto/2007
Localización: Bolivia
Estado: Sin conexión
Puntos: 123
Enlace directo a este mensaje Enviado: 05/Abril/2021 a las 21:54
Buenas tardes...
Antes que nada gracias por las respuestas pero les cuento que no he tenido éxito.
Seguí buscando en la WEB y encontré una opción que a muchos parece funcionarle que es la siguiente:

Me.RecordSource = "Select * from rpt_cobros_001_sub_3_csl where " & Me.Parent.Filter

donde el recordsource imitaría las condiciones del filtro del reporte padre en el sub reporte pero cuando abro en reporte padre me dice que

"No se puede establecer el Origen del registro en el modo de vista preliminar ni despues que haya comenzado la impresion" y en mi caso es muy importante poder ver el reporte en vista preliminar.

Existe alguna otra posibilidad?
Desde ya muchas gracias por las ideas que puedan aportarme.
Arriba
Mihura Ver desplegable
Administrador
Administrador
Avatar

Unido: 06/Mayo/2005
Localización: En la dehesa
Estado: Sin conexión
Puntos: 13990
Enlace directo a este mensaje Enviado: 05/Abril/2021 a las 22:39
Como te dice el mensaje 'de error' el recordsource del subformulario lo tienes que establecer antes de lanzar la visualización / impresión del informe y una vez hecho ya no puedes tocarlo.

Nada te impide, crearte el recordsource antes de abrirlo.

Aunque de todas formas, si le aplicas el mismo filtro que al formulario padre ... ¿no podrías relacionar ambos por el campo al cual le aplicas el filtro?  -vincular por ese campo en principal/secundario-




Editado por Mihura - 05/Abril/2021 a las 22:40
Jesús Mansilla Castells.
Saludos desde Móstoles.

Access Aplicaciones
Tecsys.es
Arriba
gabores Ver desplegable
Habitual
Habitual
Avatar

Unido: 06/Agosto/2007
Localización: Bolivia
Estado: Sin conexión
Puntos: 123
Enlace directo a este mensaje Enviado: 13/Abril/2021 a las 23:22
Hola Mihura. 
Ante todo gracias por tu respuesta!

Te cuento que no era posible (al menos con mis conocimientos básicos de Access) relacionar los informes principal/secundario ya que lo que básicamente necesitaba era un rango de fechas y hasta donde conozco puedo relacionar un campo pero no un rango.. espero no estar diciendo una tonteria pero hasta ahí llega mi conocimiento.

Te cuento a ti y a todos los que tal vez no cuenten con mucha experiencia en programación por código como yo;  que buscando mucho por la web pude utilizar otro recurso que terminó siendo la solución en mi caso...( no se si la mejor pero pude salir del paso )

Lo que hice fue crear 2 subinformes... (rpt_cobros_001_sub_3 y rpt_cobros_001_sub_4 )cada uno con los datos tal cual los necesitaba en el origen de datos y en el informe principal puse un subform sin origen de datos (rpt_cobros_001_sub_x)

una vez hecho esto en el "evento al abrir" según el filtro aplicado al informe cambio el origen del subinforme con el que filtra los datos de la misma forma que el filtro aplicado al informe principal con SOURCEOBJECT.

Les dejo aquí como lo solucioné y se que seguramente no será la mejor solución pero me sacó del apuro.

---------------------------------------------------------------------------------------------------

Dim periodo As String

If Forms!frm_rpt_seleccion!frm_rpt_seleccion_subform.Form.reporte_id = 9 And Forms!frm_rpt_seleccion!sucursal_id = 0 Then
periodo = "[caja_fecha] Between #" & Format(Forms!frm_rpt_seleccion!desde, "mm/dd/yyyy") & "#" & " and #" & Format(Forms!frm_rpt_seleccion!hasta, "mm/dd/yyyy") & "#"
DoCmd.ApplyFilter , periodo

        Me.rpt_cobros_001_sub_x.SourceObject = "rpt_cobros_001_sub_3"

ElseIf Forms!frm_rpt_seleccion!frm_rpt_seleccion_subform.Form.reporte_id = 9 And Forms!frm_rpt_seleccion!sucursal_id <> 0 Then
periodo = "[caja_fecha] Between #" & Format(Forms!frm_rpt_seleccion!desde, "mm/dd/yyyy") & "#" & " and #" & Format(Forms!frm_rpt_seleccion!hasta, "mm/dd/yyyy") & "# And caja_sucursal_id = " & Forms!frm_rpt_seleccion!sucursal_id
DoCmd.ApplyFilter , periodo

        Me.rpt_cobros_001_sub_x.SourceObject = "rpt_cobros_001_sub_4"

End If

-------------------------------------------------------------------------------------------------


Muchas gracias como siempre a todos por ayudarme. Se puede cerrar el hilo.
Arriba
 Responder Responder
  Compartir tema   

Ir al foro Permisos de foro Ver desplegable