PDA

Ver la Versión Completa : Consultas parametrizadas


fjcg02
16-01-2004, 13:01:53
Hola a todos, buen día
El caso es que quiero hacer una pregunta que no sé si encaja en este foro o no.
Habitualmente, cuando trabajo con BBDD, suelo presentar un form con los campos a filtrar, que se puede resumir así:
Select de personas -> TQuery Origen de los datos
edit de nombre
edit de apellido
edit de sexo,
edit de altura

Al pulsar seleccionar, monto la query con los filtros de los campos que se hayan seleccionado y presento el resultado en un grid.

Hasta aqui todo como siempre. Pero...

¿ Puedo hacer que la consulta siempre se escriba con los parámetros
select de personas where
nombre=:pNombre and
apellido=:pApellido and
...
altura=:pAltura

y que en ejecución aquellos parámetros que sean vacíos se obvien?

¿ Como puedo generar en ejecución los edits de los parámetros y luego montar la consulta ?
Mi objetivo es preparar un objeto o similar que me sirva para cualquier consulta.

El problema es más de diseño, creo, pero puede valer para cualquier consulta futura que se escriba o para cualquier programa.

Gracias por vuestra ayuda, y por haber llegado leyendo hasta este punto, que no es poco ;) .

Un saludo
PD: No quiero dejar esta oportunidad para haceros partícipes de que esta página vale su peso en oro, y que es de lo mejor que he encontrado por la red.

delphi.com.ar
16-01-2004, 13:19:31
puedes poner:WHERE (IDUSUARIO = :IDUSUARIO OR :IDUSUARIO IS NULL)...

Saludos!

fjcg02
16-01-2004, 13:59:00
Está bien pero ...
¿ pero que el parámetro sea nulo no quiere decir que ese campo tiene que ser nulo ?
Lo que quiero decir - no sé si lo he explicado bien - es que si el usuario no introduce nada en el edit de un parámetro, este parámetro se obvie o no se filtre por él.

Espero la respuesta. Espero haberme expresado bien. Gracias.

delphi.com.ar
16-01-2004, 14:07:22
Ok... si el usuario no ingresó nada en el Edit, debes asignarle null al valor del parámetro, entonces no filtrará por el campo en cuestión.

Saludos!

Descendents
16-01-2004, 14:09:49
no te entiendo

¿No te sirve esto?

if trim(edit1.text) <> '' then sumo el edit1 a la consulta
else pues no le sumo el edit a la consulta

Saludos

fjcg02
16-01-2004, 14:12:30
Lo probaré, gracias por la respuesta y por la celeridad.

Ahora me pregunto ¿ Habré estado haciendo el panoli todos estos años ? Pensaba que si ponia null al parámetro era para que filtrara por valor NULL de ese campo en cuestión !!! La juerga !.

Un saludo

delphi.com.ar
16-01-2004, 14:21:34
La clave de esto es el OR digamos que queda así:
SI PARAMETRO = NULL O NULL = NULL
La primera condición no es válida pero si la segunda!