Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Parametros en consulta SQL (https://www.clubdelphi.com/foros/showthread.php?t=54557)

csja 23-03-2008 17:09:13

Parametros en consulta SQL
 
Buenas a todos los foreros, mi problema es el siguiente:

Tengo una tabla llamada clientes en una base de datos. Bien, de esta tabla me gustaría hacer una consulta que me devolviera una serie de datos. Mi tabla tiene unos campos llamados Musica1, Musica2, etc... y Bebida1, Bebida2, etc... En un formulario tengo unos checkbox que marco y desmarco para pasarle los parametros a la consulta y un botón que es el encargado de ejecutar la consulta y un report que muestre los resultados de la consulta. La consulta que yo hago es la siguiente para que os vayais orientando:

SELECT SEXO, NOMBRE, APELLIDO1, APELLIDO2, FECHANAC, EDAD, DIRECCION, PROVINCIA, TELEFONO, EMAIL, DEDICAS, MUSICA1, MUSICA2, MUSICA3, MUSICA4, MUSICA5, MUSICA6, MUSICA7, BEBIDA1, BEBIDA2, BEBIDA3, BEBIDA4, BEBIDA5, BEBIDA6, BEBIDA7, BEBIDA8, INFORMADO
FROM CLIENTES
WHERE (SEXO="HOMBRE")
AND (BEBIDA1=:RON)
AND (BEBIDA2=:WHISKY)
AND (BEBIDA3=:GINEBRA)
AND (MUSICA1=:POPESPANOL)
AND (MUSICA3=:POP8090)
AND (MUSICA4=:POPINTERNACIONAL)
AND (MUSICA5=:SALSA);

y los if con los checkbox del formulario son así:

if CheckBox1.Checked then
DataModule3.QueHombres.Parameters[0].Value := 'Ron'
else
DataModule3.QueHombres.Parameters[0].Value := 0;

El caso es que en mysql poner un valor cero es como tener un valor vacio y mysql no le da importancia a ese valor o no lo interpreta, de tal manera que si yo pongo

SELECT SEXO, NOMBRE, APELLIDO1, APELLIDO2, FECHANAC, EDAD, DIRECCION, PROVINCIA, TELEFONO, EMAIL, DEDICAS, MUSICA1, MUSICA2, MUSICA3, MUSICA4, MUSICA5, MUSICA6, MUSICA7, BEBIDA1, BEBIDA2, BEBIDA3, BEBIDA4, BEBIDA5, BEBIDA6, BEBIDA7, BEBIDA8, INFORMADO
FROM CLIENTES
WHERE (SEXO="HOMBRE")
AND (BEBIDA1="RON")
AND (BEBIDA2=0)
AND (BEBIDA3=0)
AND (MUSICA1=0)
AND (MUSICA3=0)
AND (MUSICA4=0)
AND (MUSICA5=0);

desde phpmydamin me devuelve todos los hombres de que beben ron pero desde delphi no me devuelve nada.

Alguien sabe el caracter vacío en delphi o si hay que ponerle alguna propiedad a los parametros para que me saque la misma consulta que desde el phpmyadmin????

Caral 23-03-2008 21:18:40

Hola
Asi el campo esta vacio:
Código Delphi [-]
SELECT * FROM CLIENTES
WHERE (SEXO="HOMBRE")
AND (BEBIDA1=' ')
AND (BEBIDA2=' ')
AND (BEBIDA3=' ')
AND (MUSICA1=' ')
AND (MUSICA3=' ')
AND (MUSICA4=' ')
AND (MUSICA5=' ');
Pero sigo sin saber que es lo que preguntas?
Que tiene que ver con los parametros?.
Saludos

csja 23-03-2008 22:07:09

Edito mi respuesta [Caral], sigo con el mismo problema. Nose si me equivocaré en la consulta que creo que va a ser eso, haber.
Yo tengo un cliente que bebe ron y whisky y otro que solamente bebe ron ok? Si yo quiero consultar el que bebe ron y whisky me devuelve un registro, hasta ahi correcto, pero si consulto el que bebe ron, me devuelve un cliente también cuando me debería de devolver 2, por eso decía antes lo del caracter 0, que desde phpmyadmin hago la consulta y me devuelve los 2 pero desde delphi no me devuelve los 2, me entiendes ahora??

Ejemplo:

Consulta desde phpmyadmin en sql:

SELECT *
FROM CLIENTES
WHERE SEXO = "HOMBRE"
AND BEBIDA1 = "RON"
AND BEBIDA2 =0

Devuelve 2 registros mientras que la misma consulta desde delphi devuelve 1, ahí está mi problema :S


Un saludo y gracias :$

marcoszorrilla 23-03-2008 22:25:06

Lo correcto es lo que hace Delphi, puesto que tu consulta le está pidiendo clientes que beben "Ron" y "Whisky", no los que beben una de las dos cosas en ese caso tendrías que utilizar Or en vez de And.

Un Saludo.

csja 23-03-2008 22:41:09

Le acabo de cambiar todos los AND por OR y aunque no le pase ningún parametro a la consulta siempre me devuelve todos los registros que sean Hombres que hay en la tabla :S Me puedes echar una mano con la consultita?? :$:$

Gracias!

Caral 23-03-2008 23:00:06

Hola
Tabla1 Cliente:
CodigoCliente
NombreCliente
Etc.
Tabla2 Consumo
CodigoCliente
Bebida
Musica

Haces una referencia de las dos tablas.
En la de clientes solo tienes los clientes.
En la de consumo tienes los datos de consumo por codigo de cliente.
cliente 1
bebidas
ron
wisky
brandi
musica
rok
blues
merenge
salsa

Con solo hacer una referencia al codigo del cliente te dara todos los datos, asi te evitaras repetir tantas veces bebida y musica, recuerda, tal vez el cliente le antojen mas tipo de musica o bebida.
Saludos

csja 23-03-2008 23:15:39

Vale [Caral] hago otra tabla con el id del cliente la bebida y la musica y referencio las 2 tablas por el id del cliente, pero como bien has dicho, cada cliente le puede gustar mas de una bebida o mas de un tipo de musica, como se almacenaria en la tabla si solo tiene un campo de musica y de bebida por el id del cliente?? Esa parte no la entiendo :$

Perdona por mi torpeza, pero si me lo explicaras mejor te lo agradeceria :)

Gracias anticipadas

Caral 23-03-2008 23:25:29

Hola

CodCliente......bebida......musica
.......1.................ron...........rok
.......2................wisky.........rok
.......1................wisky.........blues
.......3.................ron...........salsa
.......2................vodka.........
.......1................brandi.........
.......1.................................merenge

El cliente se repite, la bebida y la musica no.
Cada vez que busques al cliente, este mostrara las bebidas y musica que este tenga sin importar los espacios en blanco.
Saludos

Caral 23-03-2008 23:37:34

Hola
Una forma de hacer la consulta:
Código SQL [-]
SELECT Clientes.NombreCliente, consumo.CodCliente, consumo.Bebida, consumo.Musica
FROM Clientes INNER JOIN consumo ON Clientes.CodCliente = consumo.CodCliente
WHERE (((consumo.CodCliente)=1));
Con esta consulta te desvolverá el cliente 1 y todas la bebidas y musica de este.
Lo acabo de probar para estar seguro, funciona perfectamente.
Saludos


La franja horaria es GMT +2. Ahora son las 15:24:33.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi