Access - Habitaciones Disponibles dada una Fecha

 
Vista:
sin imagen de perfil

Habitaciones Disponibles dada una Fecha

Publicado por Dary (5 intervenciones) el 01/12/2017 19:10:03
Hola Primera vez que escribo en un Foro pero por lo que he visto aqui se resuelven muchos problemas, espero que me puedan ayudar con mi problemita.

Deseo saber la cantidad de Habitaciones Disponibles dada una fecha, cuento con 2 tablas una tabla reservaciones y otra Habitaciones, las cuales tiene como llave principal Cod_Hab. He hecho lo siguiente y solo me devulve las habitaciones que no están reservadas en esa fecha que están en la tabla reservas, pero no me muestra todas las habitaciones disponibles.

SELECT Habitaciones.Cod_Hab, Habitaciones.Hab, Habitaciones.Capacidad, Reservas.Fecha_Ini, reservas.Fecha_Fin
FROM Habitaciones INNER JOIN Reservas ON Habitaciones.Cod_Hab=Reservas.Cod_Hab
WHERE (([Fecha_Entrada]) Not Between [Fecha_Ini] And [Fecha_Fin]) ;

Intententé hacerlo con una subconsulta pero ella solo puede devolver un registro y yo quiero comparar el resultado de la subconsulta con las habitaciones de las tablas habitaciones valga la redondancia.

No se si me explique bien , POR FAVOR, AYUDENME, gracias de antemano.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Habitaciones Disponibles dada una Fecha

Publicado por Anonimo (3397 intervenciones) el 01/12/2017 20:03:35
Se supone que las disponibles serán aquellas que cumplan DOS condiciones (o mas si fuera el caso), una es que no este reservada, la otra que no este ocupada (con o sin reserva).

En cualquier caso, si lo que se desea es ver 'al conjunto de todas' pero diferenciando las que estén reservadas, se le podría añadir un campo calculado en la consulta (basada únicamente en la tabla habitaciones) este campo calculado seria el resultado de localizar si en esa fecha tiene una reserva activa (para esa búsqueda se utilizaría la tabla 'reservas')

Supuestamente esa búsqueda devolvería para registro (se supone que: habitación) un verdadero/falso (o esta libre o esta comprometida).
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Habitaciones Disponibles dada una Fecha

Publicado por Dary (5 intervenciones) el 02/12/2017 14:12:20
Hola Anónimo entiendo lo que me dices, pero realmente no sabria como hacer eso, si no es mucho pedir y no te molesta me gustaria que me mostraras un ejemplo. Graciasss
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 2
Ha disminuido su posición en 22 puestos en Access (en relación al último mes)
Gráfica de Access

Habitaciones Disponibles dada una Fecha

Publicado por Hector (1 intervención) el 06/12/2017 18:02:10
Hola. habría que revizar tu base de datos, para poder validar el query.

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Habitaciones Disponibles dada una Fecha

Publicado por Dary (5 intervenciones) el 06/12/2017 18:35:57
Aqui te la dejo y así puedes ver lo que tengo hecho. Graciass de Antemano
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Habitaciones Disponibles dada una Fecha

Publicado por Anonimo (3397 intervenciones) el 07/12/2017 01:47:03
.- Solicita una fecha y devuelve los números de habitación:

**** Nombre de la consulta =Ocupadas *****

1
2
3
4
PARAMETERS [Fecha_Entrada] DateTime;
SELECT Reservas.Cod_Hab
FROM Reservas
WHERE (([fecha_ini]<=[Fecha_Entrada] And [fecha_fin]>=[Fecha_Entrada]));

.- Devuelve TODAS las habitaciones y en las ocupadas muestra la fecha (utiliza la consulta 'Ocupadas')
1
2
SELECT Habitaciones.Cod_Hab, Habitaciones.Hab, Habitaciones.Capacidad, IIf([ocupadas].[Cod_Hab] Is Not Null,[Fecha_Entrada],"") AS ocupada
FROM Habitaciones LEFT JOIN ocupadas ON Habitaciones.Cod_Hab = ocupadas.Cod_Hab;

.- Devuelve las habitaciones libres (utiliza la consulta 'Ocupadas')
1
2
3
SELECT Habitaciones.Cod_Hab, Habitaciones.Hab, Habitaciones.Capacidad
FROM Habitaciones LEFT JOIN ocupadas ON Habitaciones.Cod_Hab = ocupadas.Cod_Hab
WHERE (((ocupadas.Cod_Hab) Is Null));
.- Devuelve las habitaciones ocupadas (utiliza la consulta 'Ocupadas')
1
2
SELECT Habitaciones.Cod_Hab, Habitaciones.Hab, Habitaciones.Capacidad
FROM Habitaciones INNER JOIN ocupadas ON Habitaciones.Cod_Hab = ocupadas.Cod_Hab;
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Habitaciones Disponibles dada una Fecha

Publicado por Dary (5 intervenciones) el 07/12/2017 15:42:20
Hola Anónimo esta solución que me enviates la entiendo bien pero el problema es que estoy trabajando en access y no se como trabajar con una consulta que dependa de otra, no se si me entiendes, por eso yo quiero que me ayuden con una consulta que me pueda dar solución a mi problema, no se si me hago entender, disculpa debes tener hasta dolor de cabeza por mi culpa.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Habitaciones Disponibles dada una Fecha

Publicado por Anonimo (3397 intervenciones) el 07/12/2017 20:59:40
Desconozco lo que tu conoces, pero 'si las entiendes' no veo el problema de que las imites en funcionalidad.

En principio un simple Copy & Paste de cualquiera de ellas en una nueva consulta (en su vista SQL) ya las da creadas (a lo sumo .... adjudicarles un nombre).

Tampoco veo mayor problema en (tal como se ha indicado) CREAR (copy & paste, son TUS datos) la consulta con nombre 'ocupadas' y dejarla tranquila, si no se utiliza 'no pasa nada' y si se llega a utilizar, se comportara a todos los efectos como una tabla (o como cualquier otra consulta).

Pero en fin, si es por capricho (porque otros motivos carecen de sentido), también se pueden agrupara o introducir 'consultas dentro de consultas' y como muestra un botón:

1
2
3
4
PARAMETERS [Fecha_Entrada] DateTime;
SELECT Habitaciones.Cod_Hab, Habitaciones.Hab, Habitaciones.Capacidad
FROM Habitaciones LEFT JOIN (SELECT Reservas.Cod_Hab FROM Reservas WHERE (((Reservas.[fecha_ini])<=[Fecha_Entrada]) AND ((Reservas.[fecha_fin])>=[Fecha_Entrada]))) As Ocupadas1 ON Habitaciones.Cod_Hab = ocupadas1.Cod_Hab
WHERE (((ocupadas1.Cod_Hab) Is Null));


se apreciara que a esa 'consulta fantasma' y solo por seguir la línea la he denominado (As) 'Ocupadas1' y es EXACTAMENTE la consulta 'ocupadas' original.

Si no se desea que pida la fecha (porque se utiliza un cuadro de texto de un formulario), se le borra la primera línea (declaración de parámetros) punto y coma final incluido y donde ahora pone 'Fecha_Entrada' se le pone la ruta absoluta del cuadro de texto (Forms.formularios.[nombre_formulario].[nombre_del_cuadro_de_texto]) pero ATENCION....

Se espera UNA FECHA ACCESS no un texto con formato de fecha
Esto es: o proviene de una tabla o se convierte a dato tipo fecha de Access

Un cuadro de texto INDEPENDIENTE no contiene un numero o una fecha .... tiene caracteres alfanuméricos que representan lo que el autor quiera imaginar (pero Access carece de imaginación por eso se lía con fechas y horas, por ello utiliza un tipo de dato especifico)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Habitaciones Disponibles dada una Fecha

Publicado por Dary (5 intervenciones) el 11/12/2017 16:03:31
Anónimo Gracias por resolverme el problema, no sabes cuanto te lo agradezco, no fue mi intención que te molestaras de esa manera, la manera en que lo quería no era por capricho, el problema es que hace apenas 3 semanas empecé a trabajar en access y con consultas y poseo muy poco conocimiento al respecto por eso fue que acudí a este foro, por eso te lo agradezco y vuelvo y te repito no era por capricho era que lo entendía mejor así.

GRACIASSSSSS
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Habitaciones Disponibles dada una Fecha

Publicado por Anonimo (3397 intervenciones) el 12/12/2017 12:42:10
El desconocer lo que conoces es lo mas natural del mundo, en este tipo de diálogos 'sordos' se hecha de menos el mensaje de retorno que proporciona la presencia.

Si se esta comenzando, considero mas 'útil' el utilizar consultas independientes, máxime cuando ellas (lo mostré en el primer ejemplo) se pueden utilizar con entera libertad en varias consultas como sub-consultas, si la 'introducimos' dentro de otra consulta solo vale para esa (y se desperdicia tiempo y esfuerzo) ...

En teoría (porque la teoría es una cosa y la practica otra solo similar) una de las supuestas ventajas de las consultas consiste en que se analizan al iniciarse Access y tras ello simplemente se aplican, si las 'introducimos' en un informe o formulario, se compilaran siempre (en tiempo de ejecución) cuando se utilicen .... por eficacia mejor es la primera opción, pero por seguridad ante manipulaciones o borrados es preferible la segunda.

Considera que una consulta no es nada especial, es solo texto que indica que se haga algo, pero si no se utiliza (como una bufanda en verano), queda en el cajón hasta el invierno y llegado el invierno, la podemos combinar con diferentes estilos de vestimenta.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar