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

Tema cerradoBuscar por dos criterios

 Responder Responder
Autor
Mensaje
Nomada Ver desplegable
Colaborador
Colaborador


Unido: 03/Julio/2011
Localización: España
Estado: Sin conexión
Puntos: 1719
Enlace directo a este mensaje Tema: Buscar por dos criterios
    Enviado: 02/Julio/2020 a las 20:33
Buenas.
Con la consulta siguiente (C_Trimestre), basada en la tabla CORREOS, deseo que me muestre los ficheros con IDENTIFICADOR 17 o 22 y que estén dentro de la [Fecha] 1/4/2020 y 30/6/2020.

En Criterio: [IDENTIFICADOR] igual a 17 O 22
En Criterio: [Fecha] Entre #1/4/2020# y #30/6/2020#

Esto funciona perfectamente no mostrando ningún fichero, pues en ese periodo no hay ningún registro con IDENTIFICADOR 17 o 22

Ahora mediante el siguiente código VB deseo que realice lo mismo:
"C_Trimestre", "[IDENTIFICADOR]=17" & "OR [IDENTIFICADOR]=22" & "AND Fecha between #" & Format(vdesde, "mm/dd/yyyy") & "# AND #" & Format(vHasta, "mm/dd/yyyy") & " # "
Donde vdesde = 1/4/2020 y vHasta = 30/06/2020
y el resultado no es el mismo. Con este código me muestra los 2 registros que hay en Enero del IDENTIFICADOR 17

Que estoy haciendo mal?
Gracias.

Arriba
mounir Ver desplegable
Colaborador
Colaborador


Unido: 09/Febrero/2009
Localización: Asturias-España
Estado: Sin conexión
Puntos: 6479
Enlace directo a este mensaje Enviado: 02/Julio/2020 a las 21:46
Hola!

"C_Trimestre", "[IDENTIFICADOR]=17" & "OR [IDENTIFICADOR]=22" & "AND Fecha between #" & Format(vdesde, "mm/dd/yyyy") & "# AND #" & Format(vHasta, "mm/dd/yyyy") & " # "
No entiendo lo que quieres hacer!
Un Saludo.
Arriba
VIMIPAS Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 06/Enero/2006
Localización: ESPAÑA
Estado: Sin conexión
Puntos: 5462
Enlace directo a este mensaje Enviado: 02/Julio/2020 a las 23:25

Hola buenas noches.

 

Con esta simulación propia en una tabla para la ocasión y estos registros:

 

CORREOS

identificador

fecha

1

02/04/2020

2

29/06/2020

17

23/07/2020

20

24/07/2020

22

10/08/2020

 

Hago la consulta C_Trimestre de la misma forma que Nomada, resultado: ningún registro.

 

Esta es la SQL de la consulta:

 

SELECT CORREOS.identificador, CORREOS.fecha

FROM CORREOS

WHERE (((CORREOS.identificador)=17 Or (CORREOS.identificador)=22) AND ((CORREOS.fecha) Between [VDESDE] And [VHASTA]));

 

Siguiendo con mis pruebas, monto un formulario con todos los registros y pongo dos botones para ejecutar en VBA. Estos:

 

Private Sub EJECUTARCONSULTA_Click()

DoCmd.OpenQuery "c_trimestre", , acReadOnly

‘Resultado, el mismo que cuando ejecuto la consulta en Consultas, vista diseño y ejecutar (me pide los valores de fechas y los pongo.

End Sub

 

Private Sub EJECUTARsql_Click()

Me.RecordSource = "SELECT CORREOS.identificador, CORREOS.fecha FROM CORREOS WHERE (((CORREOS.identificador)=17 Or (CORREOS.identificador)=22) AND ((CORREOS.fecha) Between [VDESDE] And [VHASTA]));"

‘Resultado, el mismo que cuando ejecuto la consulta en Consultas, vista diseño y ejecutar (me pide los valores de fechas y los pongo.

End Sub

 

Mi pregunta a Nomada es:

 

¿Estás seguro de que esto que estás poniendo es código VB?:

 

"C_Trimestre", "[IDENTIFICADOR]=17" & "OR [IDENTIFICADOR]=22" & "AND Fecha between #" & Format(vdesde, "mm/dd/yyyy") & "# AND #" & Format(vHasta, "mm/dd/yyyy") & " # "

 

Saludos.

 

 

 

 

 

 

Gracias
Arriba
Nomada Ver desplegable
Colaborador
Colaborador


Unido: 03/Julio/2011
Localización: España
Estado: Sin conexión
Puntos: 1719
Enlace directo a este mensaje Enviado: 03/Julio/2020 a las 08:07
Realmente el código completo de VB es el que muestro a continuación, donde deseo filtrar por el campo "IDENTIFICADOR" y los campos "vDesde" y "vHasta":

vTrimestre = DSum("T_Gastos", "C_Trimestre", "[IDENTIFICADOR]=17" & "OR [IDENTIFICADOR]=22" & "AND Fecha between #" & Format(vdesde, "mm/dd/yyyy") & "# AND #" & Format(vHasta, "mm/dd/yyyy") & " # ")
Pues con este código, pidiendo el segundo trimestre, me aparecen los registros con "IDENTIFICADOR" 17 de Enero.

Observo como en el código SQL hay unos paréntesis antes y después del condicional "AND", y creo que ahí puede estar el error:
...WHERE (((CORREOS.identificador)=17 Or (CORREOS.identificador)=22) AND ((CORREOS.fecha) Between [VDESDE] And [VHASTA]));

Resumiendo. Deseo obtener los registros con IDENTIFICADOR 17 o 22 que estén dentro del segundo trimestre.
Gracias.

Pda: Este código si funciona:
vTrimestre = DSum("T_Gastos", "C_Trimestre", "[IDENTIFICADOR]=17" & "AND COM_FechaFact between #" & Format(vdesde, "mm/dd/yyyy") & "# AND #" & Format(vHasta, "mm/dd/yyyy") & " # " & "OR [IDENTIFICADOR]=22" & "AND COM_FechaFact between #" & Format(vdesde, "mm/dd/yyyy") & "# AND #" & Format(vHasta, "mm/dd/yyyy") & " # ")

pero no se podría reducir un poco?


Editado por Nomada - 03/Julio/2020 a las 08:18
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: 03/Julio/2020 a las 08:39
En vez de pelearte con los campos debes entender lo que estas escribiendo y como lo interpreta 'el chino'.

¿Qué hace ....?

Condicion1 OR Condicion2 AND Condicion3

.... que no hace lo mismo que:

(Condicion1 OR Condicion2) AND Condicion3






Por cierto, para escribir mucho menos, y que sean más legibles las condiciones WHERE son muy útiles las cláusulas IN:

WHERE Campo = 1 OR Campo = 2 OR Campo = 3

se puede dejar en:

WHERE Campo IN (1, 2, 3)


Editado por Mihura - 03/Julio/2020 a las 08:40
Jesús Mansilla Castells.
Saludos desde Móstoles.

Access Aplicaciones
Tecsys.es
Arriba
Nomada Ver desplegable
Colaborador
Colaborador


Unido: 03/Julio/2011
Localización: España
Estado: Sin conexión
Puntos: 1719
Enlace directo a este mensaje Enviado: 03/Julio/2020 a las 10:15
Gracias Mihura.
Esto es precisamente lo que deseo:
(Condicion1 OR Condicion2) AND Condicion3
por eso me percaté de los paréntesis. El problema es que no conozco el lenguaje SQL y me gustaría resolver el problema con el código que tengo. Si existiera la opción "IN" tal como lo estoy haciendo, sería estupendo.
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: 03/Julio/2020 a las 11:55
¿No ves ningún parecido?

WHERE (((CORREOS.identificador)=17 Or (CORREOS.identificador)=22) AND 


WHERE Campo = 1 OR Campo = 2 OR Campo = 3

La solución aplicada abajo, vale para arriba.


Jesús Mansilla Castells.
Saludos desde Móstoles.

Access Aplicaciones
Tecsys.es
Arriba
Nomada Ver desplegable
Colaborador
Colaborador


Unido: 03/Julio/2011
Localización: España
Estado: Sin conexión
Puntos: 1719
Enlace directo a este mensaje Enviado: 04/Julio/2020 a las 12:23
Gracias Mihura.
Perfecto.
Este hilo se puede cerrar satisfactoriamente.
Saludos.
Arriba
 Responder Responder
  Compartir tema   

Ir al foro Permisos de foro Ver desplegable