Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 08-09-2007
eldiegofg eldiegofg is offline
Miembro
 
Registrado: mar 2007
Ubicación: Colón - Entre Ríos
Posts: 54
Poder: 18
eldiegofg Va por buen camino
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
Responder Con Cita
  #2  
Antiguo 08-09-2007
Avatar de BlueSteel
[BlueSteel] BlueSteel is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Concepción - Chile
Posts: 2.310
Poder: 23
BlueSteel Va por buen camino
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 ?
__________________
BlueSteel
Responder Con Cita
  #3  
Antiguo 09-09-2007
eldiegofg eldiegofg is offline
Miembro
 
Registrado: mar 2007
Ubicación: Colón - Entre Ríos
Posts: 54
Poder: 18
eldiegofg Va por buen camino
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?
Responder Con Cita
  #4  
Antiguo 11-09-2007
Avatar de Ivanzinho
[Ivanzinho] Ivanzinho is offline
Miembro Premium
 
Registrado: ene 2005
Ubicación: Galicia
Posts: 595
Poder: 20
Ivanzinho Va por buen camino
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
__________________
Si no lees esto no vivirás tranquilo
Non lle poñades chatas â obra namentras non se remata. O que pense que vai mal que traballe n’ela; hai sitio para todos. (Castelao)
Responder Con Cita
  #5  
Antiguo 12-09-2007
eldiegofg eldiegofg is offline
Miembro
 
Registrado: mar 2007
Ubicación: Colón - Entre Ríos
Posts: 54
Poder: 18
eldiegofg Va por buen camino
Ya probe tambien de esa forma y me tira el mismo error...
Responder Con Cita
  #6  
Antiguo 12-09-2007
Avatar de Chris
[Chris] Chris is offline
Miembro Premium
 
Registrado: abr 2007
Ubicación: Jinotepe, Nicaragua
Posts: 1.678
Poder: 19
Chris Va por buen camino
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
__________________
Perfil Github - @chrramirez - Delphi Blog - Blog Web
Responder Con Cita
  #7  
Antiguo 12-09-2007
Avatar de Chris
[Chris] Chris is offline
Miembro Premium
 
Registrado: abr 2007
Ubicación: Jinotepe, Nicaragua
Posts: 1.678
Poder: 19
Chris Va por buen camino
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?
__________________
Perfil Github - @chrramirez - Delphi Blog - Blog Web
Responder Con Cita
  #8  
Antiguo 12-09-2007
Avatar de Paoti
Paoti Paoti is offline
Miembro
 
Registrado: may 2003
Ubicación: Monterrey. N.L., México
Posts: 612
Poder: 21
Paoti Va por buen camino
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.
__________________
Estudia y anda en la calle.... que asi serás el doble de listo que los demás...

análisis de información
análisis y diseño de sistemas

Paoti Rios Reséndiz
Responder Con Cita
  #9  
Antiguo 13-09-2007
Galphord Galphord is offline
Registrado
 
Registrado: may 2005
Ubicación: Mexico DF
Posts: 1
Poder: 0
Galphord Va por buen camino
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.
Responder Con Cita
  #10  
Antiguo 14-09-2007
eldiegofg eldiegofg is offline
Miembro
 
Registrado: mar 2007
Ubicación: Colón - Entre Ríos
Posts: 54
Poder: 18
eldiegofg Va por buen camino
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
Responder Con Cita
  #11  
Antiguo 21-09-2007
hach hach is offline
Miembro
 
Registrado: mar 2007
Ubicación: Bariloche, Argentina
Posts: 44
Poder: 0
hach Va por buen camino
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
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Ayuda con consulta SQL n03l SQL 4 18-04-2007 22:03:40
Ayuda con una consulta SQL agova SQL 13 29-08-2005 17:06:15
Ayuda con consulta raco Varios 4 08-04-2005 21:56:43
Ayuda con consulta JorgeBec SQL 7 21-10-2003 20:25:16
Ayuda con Consulta mosorio SQL 3 23-07-2003 08:28:58


La franja horaria es GMT +2. Ahora son las 17:16:15.


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
Copyright 1996-2007 Club Delphi