Imprimir página | Cerrar ventana

Consulta desde formulario con varios parámetros

Impreso de: Foro de Access y VBA
Categoría: Access y VBA
Nombre del foro: Access y VBA
Descripción del foro: Foro de programacion en Access (Con código y sin código)
URL: http://www.mvp-access.com/foro/forum_posts.asp?TID=84848
Fecha de impresión: 27/Marzo/2026 a las 02:21


Tema: Consulta desde formulario con varios parámetros
Publicado por: Jorge33
Asunto: Consulta desde formulario con varios parámetros
Fecha de publicación: 22/Noviembre/2019 a las 12:29
Hola:

Tengo una consulta con varios parámetros que alimento desde un formulario. El problema que tengo es cuando quiero buscar por sólo uno de los parámetros en vez de por todos.
Por ejemplo desde el formulario alimento los campos nombre, fecha, dirección etc 
Si relleno en el formulario todos los campos funciona bien pero si sólo quiero buscar por uno o dos de ellos no funciona. ¿Como puedo hacer?

Muchas gracias
< x="0" y="0" width="99999" height="99999" id="hc_extension_off">< x="0" y="0" width="99999" height="99999" id="hc_extension_highcontrast">< x="0" y="0" width="99999" height="99999" id="hc_extension_highcontrast_back">< x="0" y="0" width="99999" height="99999" id="hc_extension_grayscale">< x="0" y="0" width="99999" height="99999" id="hc_extension_grayscale_back">< x="0" y="0" width="99999" height="99999" id="hc_extension_invert">< x="0" y="0" width="99999" height="99999" id="hc_extension_invert_back">< x="0" y="0" width="99999" height="99999" id="hc_extension_invert_grayscale">< x="0" y="0" width="99999" height="99999" id="hc_extension_yellow_on_black">< x="0" y="0" width="99999" height="99999" id="hc_extension_yellow_on_black_back">



Respuestas:
Publicado por: Maverick2019
Fecha de publicación: 22/Noviembre/2019 a las 14:41
Hola
Una opción es crearte varias consultas con distintas configuración de parámetros (uno, dos, etc...) y llamarlas según tu necesidad.
Pero creo que lo más facil sería crearte una cadena con la consulta y construir al vuelo la cadena de criterios para pasársela. Sí tenesitas tener la consulta físicamente, borrala y genérala cada vez que la uses.

Salu2,


Publicado por: Jorge33
Fecha de publicación: 22/Noviembre/2019 a las 15:14

Gracias. No sé si te estoy entendiendo bien. ¿te refieres a algo así?

Select * from xxx

Where

Nombre=form:nombre and apellidos=form:apellidos and dirección=form:dirección

Or

Nombre=es nulo and apellidos=form:apellidos and dirección=form:dirección

Or

Nombre=form:nombre and apellidos=es nulo and dirección=form:dirección

Or

Nombre=form:nombre and apellidos= form:apellidos and dirección= es nulo

Or

Nombre=es nulo and apellidos=es nulo and dirección=form:dirección

…….

 

Si es así para muchos parámetros sería difícil de programar





Publicado por: xavi
Fecha de publicación: 22/Noviembre/2019 a las 20:35
Lo que te estan diciendo es que creas la SQL por código y la asignas a una consulta.


(se asume declaración de variables)
strSelect = "SELECT * "
strtFrom = "FROM unaTabla "
strWhere = "WHERE 1=1 " ' O una condición irrefutable para iniciar la where

If Nz(Me!Nombre, "")<> "" Then
  strWhere = strWhere & "AND Nombre Like '*" & Me!Nombre & "' "
End If

If Nz(Me!FechaAlta, "") <> "" Then
  strWhere = strWhere & "AND FechaAlta = #" & Format(Me!FechaAlta, "mm/dd/yyyy") & "# "
End If

strSQL = strSelect & strFrom & strWhere

On Error Resume Next
DoCmd.DeleteObject acQuery, "MiConsulta"
On Error Goto 0
CurrentDb.CreateQueryDef "MiConsulta", strSQL

DoCmd.OpenQuery "MiConsulta"

Escrito al vuelo

Saludos


-------------
Xavi, un minyó de Terrassa

http://www.llodax.com" rel="nofollow - Mi web


Publicado por: Jorge33
Fecha de publicación: 25/Noviembre/2019 a las 14:11
Muchas gracias. Estoy aprendiendo mucho.
Tengo un par de dudas si puede ser:
- El poner #" & delante de la fecha ¿para que sirve?
- ¿Habría que añadir un strFIN para el ; del final del select?

< x="0" y="0" width="99999" height="99999" id="hc_extension_off">< x="0" y="0" width="99999" height="99999" id="hc_extension_highcontrast">< x="0" y="0" width="99999" height="99999" id="hc_extension_highcontrast_back">< x="0" y="0" width="99999" height="99999" id="hc_extension_grayscale">< x="0" y="0" width="99999" height="99999" id="hc_extension_grayscale_back">< x="0" y="0" width="99999" height="99999" id="hc_extension_invert">< x="0" y="0" width="99999" height="99999" id="hc_extension_invert_back">< x="0" y="0" width="99999" height="99999" id="hc_extension_invert_grayscale">< x="0" y="0" width="99999" height="99999" id="hc_extension_yellow_on_black">< x="0" y="0" width="99999" height="99999" id="hc_extension_yellow_on_black_back">


Publicado por: xavi
Fecha de publicación: 25/Noviembre/2019 a las 16:58
Para que las SQL "entiendan" los datos es necesario "delimitarlos" correctamente:
- Los números van "tal cual" con el problema que, al meter decimales, las comas no las entiende y es necesario realizar una sustitución
- Los textos van delimitados por " pero tambien tienen un problema en las SQL creadas por código y es que tienen un conflicto con el delimitador de cadenas de texto y es necesario sustituir " por ' (apóstrofe). Adicionalmente existe el problema de que la cadena de texto a insertar contenga " y ' con lo que el problema ya es considerable....
- Las fechas van delimitadas por # y en formato yanki (mm/dd/yyyy) por lo que es necesario realizar la sustitución.


Con el tiempo uno aprende cosas sobre las SQL:
- El; de cierre no es necesario
- Los paréntesis de la clausula WHERE solo son relevantes cuando tenemos operadores OR

Un saludo




-------------
Xavi, un minyó de Terrassa

http://www.llodax.com" rel="nofollow - Mi web


Publicado por: Jorge33
Fecha de publicación: 26/Noviembre/2019 a las 07:42
Entendido.
Muchas gracias
Funciona muy bien.
Se puede cerrar el tema.
< x="0" y="0" width="99999" height="99999" id="hc_extension_off">< x="0" y="0" width="99999" height="99999" id="hc_extension_highcontrast">< x="0" y="0" width="99999" height="99999" id="hc_extension_highcontrast_back">< x="0" y="0" width="99999" height="99999" id="hc_extension_grayscale">< x="0" y="0" width="99999" height="99999" id="hc_extension_grayscale_back">< x="0" y="0" width="99999" height="99999" id="hc_extension_invert">< x="0" y="0" width="99999" height="99999" id="hc_extension_invert_back">< x="0" y="0" width="99999" height="99999" id="hc_extension_invert_grayscale">< x="0" y="0" width="99999" height="99999" id="hc_extension_yellow_on_black">< x="0" y="0" width="99999" height="99999" id="hc_extension_yellow_on_black_back">



Imprimir página | Cerrar ventana