Array
(
)

Reserva de Quarto

Carlos Jr
   - 31 dez 2009

Boa Tarde a Todos,   Estou fazendo essa consulta SQL para verificar se o quarto está reservado para a Data:   Select ID, NUMERO, DESCRICAO from QUARTOS QUA WHERE NOT EXISTS (SELECT 1 FROM RESERVAS WHERE (RESERVAS.ID_QUARTO=QUA.ID) AND ((DATA_ENTRADA between :qdataEntrada  AND :qdataSaida) OR (DATA_SAIDA  between :qdataEntrada  AND :qdataSaida)))     Exemplo:   O Quarto 01 está reservado para o dia 01/01/2010 até o dia 05/01/2010   Se eu tentar reservar para o dia 31/12/2009 até o dia 04/01/2010 ele bloqueia: Certinho.   02/01/2010 até o dia 06/01/2010: ele bloqueia tb Certinho.   Agora se eu tentar: 02/01/2010 até o dia 04/01/2010 ele está passando...   Alguma coisa errada nessa minha consulta..   Alguem poderia me ajudar,   Aguardo.

Martins
   - 31 dez 2009

Estou fazendo essa consulta SQL para verificar se o quarto está reservado para a Data: Select ID, NUMERO, DESCRICAO from QUARTOS QUA WHERE NOT EXISTS (SELECT 1 FROM RESERVAS WHERE (RESERVAS.ID_QUARTO=QUA.ID) AND ((DATA_ENTRADA between :qdataEntrada AND :qdataSaida) OR (DATA_SAIDA between :qdataEntrada AND :qdataSaida))) Exemplo: O Quarto 01 está reservado para o dia 01/01/2010 até o dia 05/01/2010 Se eu tentar reservar para o dia 31/12/2009 até o dia 04/01/2010 ele bloqueia: Certinho. 02/01/2010 até o dia 06/01/2010: ele bloqueia tb Certinho. Agora se eu tentar: 02/01/2010 até o dia 04/01/2010 ele está passando... Alguma coisa errada nessa minha consulta.. Alguem poderia me ajudar, Aguardo. Primeiro: Creio eu q esse seu código seja do IB/FB. Segundo: Talvez eu não tenha entendido o seu código.   Vejamos:      ENTRADA      SAIDA 01/01/2010    05/01/2010   As datas informadas: 31/12/2009 - 04/01/2010 bloqueio 02/01/2010 - 06/01/2010 bloqueio 02/01/2010 - 04/01/2010 passa...  Select ID, NUMERO, DESCRICAO from QUARTOS QUA WHERE NOT EXISTS (SELECT 1 FROM RESERVAS WHERE (RESERVAS.ID_QUARTO=QUA.ID) AND ((DATA_ENTRADA between :qdataEntrada AND :qdataSaida) OR (DATA_SAIDA between :qdataEntrada AND :qdataSaida))) Em entrada = 31/12/2009   saída = 04/01/2010, a condição é satisfeita, entre 31/12/2009 e 04/01/2010 ele vai encontrar pelo menos um registro em que a entrada e a saída estejam nesse intervalo.   Em entrada = 02/01/2010   saída = 06/01/2010, a condição é satisfeita, entre 02/01/2010 e 06/01/2010 ele vai encontrar pelo menos um registro em que a saída esteja nesse intervalo.   Em entrada = 02/01/2010   saída = 04/01/2010, a condição não é satisfeita, entre 02/01/2010 e 04/01/2010 ele não vai encontrar registros em que a entrada e ou a saída estejam nesse intervalo. Porque a entrada é dia: 01/01/2010 q é por tanto menos do que 02/01/2010 ou 03/01/2010 ou 04/01/2010. O mesmo acontece com a saída, perceba que ela está marcada para 05/01/2010, e vc informa: 04/01/2010, então a data está fora do intervalo.   Caso eu não tenha entendido, perdoe-me, tentarei ver com mais calma posteriormente e então tentar ajudá-lo.   Boa sorte e bons códigos.   Feliz Ano novo a todos os membros do fórum antigo, onde fiz várias amizades ao longo dos anos e aos deste fórum e participantes do portal Devmedia. A todos FELIZ ANO NOVO!!! Que 2010 seja um ano de realizações.  

0
|
0

Edson_dionisio
|
MVP
Pontos: 4700
    01 jan 2010

Boa tarde Perivado Martins,

Eu estava analisando o seu código e percebi que a consulta que está sendo feita pega os valores extremos da pesquisa e não faz a pesquisa interna. Acredito que isto se deva ao uso do NOT, pois aí vc está pegando oq não foi enquadrado. tenta sem o NOT.

P.S: não fiz o código por estar sem tempo, mas acredito que isso ajude!

Cópa do código posto sem o NOT:

Select ID, NUMERO, DESCRICAO from QUARTOS QUA WHERE EXISTS (SELECT 1 FROM RESERVAS WHERE (RESERVAS.ID_QUARTO=QUA.ID) AND ((DATA_ENTRADA between :qdataEntrada AND :qdataSaida) OR (DATA_SAIDA between :qdataEntrada AND :qdataSaida)))

Nesse caso, vc estaria fazendo uma pesquisa das reservas que existem.

0
|
0

Martins
   - 01 jan 2010

Olá colega EDSON JOSÉ DIONISIO, o código não é meu, é do colega C.S.S.R EDITORA SANTUÁRIO, eu apenas tentei ajudar, mostrando para ele q do jeito q ele escreveu o suposto erro vai acontecer, sem a palavra NOT ele terá um resultado diferente do q está tendo, e possivelmente seja disso que ele precise, não testei o código dele pq estou sem meu PC, mas mesmo assim, valeu por vir aqui ajudar. Boa sorte e bons códigos! Feliz Ano Novo!!  

0
|
0