** NORMAS DEL FORO **
Inicio del foro Inicio del foro > Access y VBA > Access y VBA
  Mensajes nuevos Mensajes nuevos RSS - Filtrar tabla con varios intervalos de fechas
  Preguntas frecuentes Preguntas frecuentes  Buscar en el foro   Eventos   Registro Registro  Iniciar sesion Iniciar sesion

Filtrar tabla con varios intervalos de fechas

 Responder Responder
Autor
Mensaje
gose Ver desplegable
Habitual
Habitual


Unido: 02/Noviembre/2007
Estado: Sin conexión
Puntos: 73
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita gose Cita  ResponderRespuesta Enlace directo a este mensaje Tema: Filtrar tabla con varios intervalos de fechas
    Enviado: 23/Noviembre/2020 a las 19:59
Hola . Tengo una tabla Tb_Operaciones con los siguientes campos : Id, Fecha_operacion, Concepto e Importe. Tengo tambien la tabla Tb_Intervalos con estos 3 campos :  Fecha_desde, Fecha_hasta y Detalle.

Esta ultima tabla suele tener al menos 10 registros, cada uno de los cuales se corresponden con distintos intervalos de fecha y no son siempre los mismos.

Necesito obtener una tabla o consulta con los registros de Tb_Operaciones que se hayan realizado en cada uno de los intervalos de fechas de Tb_Intervalos.

¿ Como puedo hacerlo de una forma automatizada ?.

Gracias anticipadas por vuestra ayuda.
Arriba
xavi Ver desplegable
Administrador
Administrador
Avatar
Terrassa-BCN

Unido: 10/Mayo/2005
Localización: Catalunya ||||
Estado: Sin conexión
Puntos: 14720
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita xavi Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 24/Noviembre/2020 a las 08:42
Hola,

¿Tienes opción a añadir campos a las tablas?

De ser así yo lo enfocaría de la siguiente forma

En Tb_Intervalos un campo IdIntervalos. Puede ser autonumérico. Es solo por tener valores únicos.
En Tb_Operaciones otro campo IdIntervalos. Numerico Largo. Solo para utilizarse temporalmente.

Primeramente eliminar todos los valores que pudieran existir en el campo IdIntervalos de Tb_Operaciones
Abrir un recordset sobre la Tb_Intervalos y otro sobre Tb_Operaciones. Recorrer el Tb_Operaciones y, en cada registro, localizar el registro de Tb_Intervalos adecuado. Almacenar el tb_Intervalo!IdIntervalos en el campo Tb_Operaciones!IdIntervalos

Al final obtienes la tabla con los IdIntervalos. 

Un saludo
Xavi, un minyó de Terrassa

Mi web
Arriba
gose Ver desplegable
Habitual
Habitual


Unido: 02/Noviembre/2007
Estado: Sin conexión
Puntos: 73
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita gose Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 24/Noviembre/2020 a las 18:07
Muchas gracias Xavi, eres lo "máximo".
El planteamento que haces es perfecto y me va a simplificar otros pasos posteriores.
Tengo el Access un poco "oxidado" y el codigo que hice, aparte de que tal vez pueda simplificarse, me funciona bien ya que me marca perfectamente los registros deseados.
Tan solo me da un pequeño problema y es que no me "cierra" bien, ya que al final me sale el error "3021- No hay ningun registro activo".

Mi código es el siguiente:
    Dim vDatDesde As Date
    Dim vDatHasta As Date
    Dim vIdIntervalos As Double
    Dim rst1 As DAO.Recordset
    Dim rst2 As DAO.Recordset
    
    Set rst1 = CurrentDb.OpenRecordset("Tb_Intervalos", dbOpenDynaset)
    Set rst2 = CurrentDb.OpenRecordset("Tb_Operaciones", dbOpenDynaset)
      
      If rst1.RecordCount = 0 Then
        GoTo Salida:
      End If
           
        rst1.MoveFirst
        rst2.MoveFirst

        Do Until rst2.EOF
            vDatDesde = rst1.Fields("Fecha_desde").Value
            vDatHasta = rst1.Fields("Fecha_hasta").Value
            vIdIntervalos = rst1.Fields("Id_intervalos").Value
           
            If rst2.Fields("Fecha_operacion").Value >= vDatDesde And rst2.Fields("Fecha_operacion").Value <= vDatHasta Then
                rst2.Edit
                rst2.Fields("id_intervalos").Value = vIdIntervalos
                rst2.Update
                rst2.MoveNext
            Else
                rst2.MoveNext
            End If
            If rst2.EOF Then
                rst1.MoveNext
                rst2.MoveFirst
                    If rst2.Fields("DatOpe").Value >= vDatDesde And rst2.Fields("datope").Value <= vDatHasta Then
                       rst2.Edit
                       rst2.Fields("id_intervalos").Value = vIdIntervalos
                       rst2.Update
                        rst2.MoveNext
                     Else
                    End If
           End If
           Loop
Salida:
    rst1.Close
    Set rst1 = Nothing
    rst2.Close
    Set rst2 = Nothing
Arriba
 Responder Responder
  Compartir tema   

Ir al foro Permisos de foro Ver desplegable