Filtrar registros que deben aparecer en una consulta

Ando dándole vueltas pero mis conocimientos no llegan a esto.
El caso es que tengo una tabla de contactos donde, entre otros campos hay 3 con casillas de verificación para marcar en que listas de correo esta suscrito cada contacto. Los campos son ListID1, ListID2 y ListID3.
También he creado un formulario independiente en el que aparecen 3 casillas de verivicación correspondientes a las diferentes listas. Pretendo que, a través de este formulario se seleccionen los contactos que deben aparecer en una consulta, para lo cual he creado un botón con el procedimiento abrir consulta y aplicar filtro. Esta es la condición WHERE que he fijado:
SiInm([Formularios]![Filtro de Listas de Correo]![Verificación2]=-1,[Consulta Listas de correo]![ListID2]=-1,) o SiInm([Formularios]![Filtro de Listas de Correo]![Verificación0]=-1,[Consulta Listas de correo]![ListID1]=-1,)
Hasta aquí todo bien pero como verás falta la función SiInm para la tercera casilla, se debe a la limitación de 256 caracteres. Access me insta a utilizar ApplyFilter en VB pero ahí no llego. ¿Puedes explicarme como hacerlo o se te ocurre otra forma?

1 respuesta

Respuesta
Si este código lo tienes en el mismo formulario para que hechas tanto rollo, en ves de poner SiInm([Formularios]![Filtro de Listas de Correo]! [Verificación2]=-1,[Consulta Listas de correo]! [ListID2]=-1,) o SiInm([Formularios]![Filtro de Listas de Correo]! [Verificación0]=-1,[Consulta Listas de correo]! [ListID1]=-1,)
Pon
SiInm(me.Verificación2=-1,[Consulta Listas de correo]![ListID2]=-1,) o SiInm(me.Verificación0=-1,[Consulta Listas de correo]![ListID1]=-1,)
Y evita poner esos nombres tan largos, trata de crear tu propia nomenclatura para abreviar, a las casilla de verificación les llamo poe ejemplo así vEmail1, vEmail2 etc, también el nombre de la consulta está muy grande, prueba a ver si con eso solucionas tu problema, bueno esto es lo que entendí a tu pregunta no se se entendí bien.
Si es que a veces parezco tonto, era tan fácil como abreviar las rutas. Pero ya por aprender, me.Verificación2 da error. ¿Qué falta?
He abreviado algunos nombre de controles y que así (a la espera de ver si entiendo la propiedad me.):
SiInm([Formularios]![Filtro listas correo]![mark1]=-1,[Listas correo]![ListID1]=-1) O SiInm([Formularios]![Filtro listas correo]![mark2]=-1,[Listas correo]![ListID2]=-1) O SiInm([Formularios]![Filtro listas correo]![mark3]=-1,[Listas correo]![ListID3]=-1)
El problema ahora es que me dice que es una expresión demasiado compleja.
Lo que pretendo es poder generar listas de correo en una consulta según a quién necesite enviar determinada comunicación. Hay tres listas y a veces tengo que enviar a solo los contactos de la Lista1, otras veces a los de la listas 1 y 3, ¿otras solo a 3. Me he explicado mejor? No se si voy bien encaminado, ¿hay otra?
Gracias.
Me. Hace referencia al formulario que esta activo, cuando haces referencia a las casillas que están dentro del formulario1 por eso se dice me. O sea que forma parte de ese formulario es como si el formulario dijera... esta casilla de verifiación es "MÍA Y SOLO MÍA Y DE NADIE MÁS"... más o menos así para que te des un a idea del me.
A simple vista veo que no estas anidando bien el SiInm ya que al final debes cerrar tantos paréntesis como SiInm tengas, checalo, si puedes busca la ayuda del comando IIF para que veas como es la anidación.
¿Ahora dejame entender... dependiendo de si está seleccionada una casilla ejecutas una consulta? O que es lo que pretendes hacer. Aclaramw
Pues no hay manera de hacer funcionar el me., lo he probado todo. Access automáticamente lo encierra entre corchetes.
¿El tema de los anidados es que se excluyen unos a otro no? Yo lo que pretendo no es aplicar filtros con diferentes condiciones sino determinar que grupos agregar a la lista. No se si me explico.
Ejemplo:
La lista 1 es para médicos, la lista 2 para enfermeros y la 3 solo para especialistas.
1er caso. Tengo que enviar una comunicación solo a médicos. Abro formulario "Filtro Listas correo" y marco la casilla correspondiente a la lista 1 y al dar al botón solo los médicos aparecerán en la consulta "Listas correo"
2º. Tengo que enviar una comunicación a enfermeros y a especialistas. En el formulario marco las casillas correspondientes para que los pertenecientes a ambos grupos aparezcan en la consulta listas correo después de darle al botón.
Por llamarlo de alguna manera, son filtros agregados, no una intersección de conjuntos. Por eso creo que el animado no vale para esto. ¿Cómo hacerlo?
Pues utiliza los IF sencillos en el evento clic del botón:
IF Verificación1 then
[Consulta Listas de correo]![ListID1]=-1
End IF
IF Verificación2 then
[Consulta Listas de correo]![ListID2]=-1
End IF
IF Verificación3 then
[Consulta Listas de correo]![ListID3]=-1
End IF
Date cuenta que ya no pregunto por -1 ó por cero, si una casilla está seleccionada de esta forma preguntas si está en -1, creo que con esto solucionas tu problema.
¿Dónde introduzco esto en una macro? ¿Puedes darme más detalle?
En el evento clic del botón que creaste, arriba dice que creaste un boto y si no las hecho crealo
El botón que ejecutaba una macro, no se desde vb.
Esto es lo que he puesto en el procedimiento:
Private Sub Comando8_Click()
DoCmd.OpenQuery ("Listas correo")
If mark1 Then
[Listas correo]![ListID1] = -1
End If
If mark2 Then
[Listas correo]![ListID2] = -1
End If
If mark3 Then
[Listas correo]![ListID3] = -1
End If
End Sub
Y se queda bloqueado en [Listas correo]![ListID1] = -1.
¿Para qué usas esto? DoCmd. OpenQuery ("Listas correo")
No entiendo, sabes que enviame en un zip tu tabla y tu formulario pero explica bien que quieres porque luego ustedes creen que entiendo y yo creo que me entienden, uso access 2002
[email protected]

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas