Foros Club Delphi

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

eldiegofg 08-09-2007 04:49:20

Ayuda con Error en consulta
 
Hola gente, estoy intentando ejecutar la siguiente consulta:

Código SQL [-]
SELECT DISTINCT N_HAB FROM HABITACIONES WHERE N_HAB NOT IN
((SELECT NHABITACION FROM RESERVAS WHERE FECHA BETWEEN :FI AND :FF) UNION (SELECT NHABITACION FROM ESTADIAS WHERE FECHA BETWEEN :FI AND :FF))

y me tira el siguiente error: Invalid use of keyword, Token: (SELECT

Que estoy haciendo mal??? Agradezco de antemano por su tiempo. Saludos:D

BlueSteel 08-09-2007 19:30:41

Hola...

esta consulta en separada, te funciona

Código SQL [-]
SELECT NHABITACION FROM RESERVAS WHERE FECHA BETWEEN :FI AND :FF

en realidad no se que puede estar mal... pero me asalta una duda... de donde sacas estas variables.. por que no lo tienes definido como parametro..

FECHA BETWEEN :FI AND :FF


lo otro.. el error te da al ejecutarlo desde delphi ?.. .en algun motor de base de datos?... en cual ?

eldiegofg 09-09-2007 01:37:12

Hola BlueSteel. Esas variables son parametros que paso en tiempo de ejecucion desde dos TDateTimePicker (uno para FI y otro para FF), o sea:

Código:

query1.ParamByName('FI').Value:=DateTimePicker1.Date;
 .  .  .
 .  .  .

El error lo tira en tiempo de ejecucion, cuando intento hacer el query1.Open.
Estoy usando una BD de escritorio: Paradox. Pero por el error que me tira ("Invalid use of keyword, Token: (SELECT") me parece que es un error de sintaxis de la sentencia SQL, que te parece?

Ivanzinho 11-09-2007 15:34:43

Prueba con lo siguiente :
Código SQL [-]
select distinct N_HAB from HABITACIONES where N_HAB not in
        (select NHABITACION from RESERVAS where FECHA between :FI and :FF
         union
         select NHABITACION from ESTADIAS where FECHA between :FI and :FF)
Un saúdo

eldiegofg 12-09-2007 00:04:02

Ya probe tambien de esa forma y me tira el mismo error...

Chris 12-09-2007 00:40:49

El query debe ser este:

Código SQL [-]
select distinct N_HAB from HABITACIONES where (N_HAB not in
        (select NHABITACION from RESERVAS where FECHA between :FI and :FF))
         union
         select NHA....

El problema es que cierras paréntesis déspues de Union, lo cual creo que no es válido.
Debes cerrarlo cuando en donde termina la condición

Chris 12-09-2007 00:45:12

Creo que con el post anterior no conseguirás lo que quieres, disculpame, pero es que no había entendido bien lo que querías hacer.

Ok, no sé mucho sobre Queries, pero ¿por qué no intentas utilizar Join en vez de Union?

Paoti 12-09-2007 01:09:09

hz la consulta desde el motor de base de datos, sin el delphi y ve si te funciona


tip: usa alias. para tus campos y tablas

Código SQL [-]
select distinct H.N_HAB from HABITACIONES H where H.N_HAB not in
        (select R.NHABITACION from RESERVAS R where R.FECHA between :FI and :FF
         union
         select E.NHABITACION from ESTADIAS E where E.FECHA between :FI and :FF)


Y primero prueba en la base de datos.

Galphord 13-09-2007 23:45:05

Tal vez esto te pueda ayudar...
 
Hola.

A mí, lo que me ha sucedido es que cuando utilizo componente TQuery y la consulta está correcta y, en un "analizador de consultas" del SQL Server me devuelve valores, entonces es porque no le asigné su valor en la propiedad "DatabaseName" del Tquery.

A veces no me doy cuenta de ello pero asignándolo, se me ha eliminado el error.

eldiegofg 14-09-2007 17:25:43

Hola, lo he probao en el motor de BD directamente y desde alli tampoco funciona asi que supongo que mi tipo de tablas no soporta ese tipo de consultas. Voy a tener que buscar una forma alternativa de hacerlo... Alguna sugerencia??? Muchas gracias por su ayuda

hach 21-09-2007 19:45:03

prueba asi
 
Hola, nunca use paradox, la escribo como yo lo haria en firebird

Código SQL [-]
SELECT DISTINCT N_HAB FROM HABITACIONES 
WHERE not exists (SELECT NHABITACION FROM RESERVAS 
WHERE NHABITACION =  HABITACIONES.N_HAB
AND FECHA BETWEEN :FI AND :FF
UNION
SELECT NHABITACION FROM ESTADIAS
WHERE NHABITACION =  HABITACIONES.N_HAB
AND FECHA BETWEEN :FI AND :FF)
Nunca use union dentro del select, no se si funcione (debería)si no intenta con este
Código SQL [-]
SELECT DISTINCT N_HAB FROM HABITACIONES 
WHERE not exists (SELECT NHABITACION FROM RESERVAS 
WHERE NHABITACION =  HABITACIONES.N_HAB
AND FECHA BETWEEN :FI AND :FF)
AND not exists (SELECT NHABITACION FROM ESTADIAS
WHERE NHABITACION =  HABITACIONES.N_HAB
AND FECHA BETWEEN :FI AND :FF)


Espero te sirva

Saludos
Pablo


La franja horaria es GMT +2. Ahora son las 22:15:39.

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