Tengo como tablas
Cita:
Bien, cuando realizamos una cesión de un portátil o proyector en la tabla Portátiles o Proyectores se le marca el estado Prestado, y mientras tenga futuras reservas sigue estando marcada esa opción. En el momento que deja de tener reservas ese portátil o proyector esa casilla se desmarca y pasa a estar disponible para cualquier fecha.Proyectores --> Guarda todos los datos de los proyectores que tenemos
Portátiles --> Guarda todos los datos de los portátiles que tenemos
Gestores --> Las personas que podemos realizar los préstamos
Prestamos --> Guarda todos los datos de un préstamos (Fecha de entrega, Fecha de devolución, Id_Portátil, Id_Proyector, Id_Prestamo....)
Portátiles --> Guarda todos los datos de los portátiles que tenemos
Gestores --> Las personas que podemos realizar los préstamos
Prestamos --> Guarda todos los datos de un préstamos (Fecha de entrega, Fecha de devolución, Id_Portátil, Id_Proyector, Id_Prestamo....)
Sin embargo mientras tiene marcada esa opción, hay posibilidades de poder prestar esos portátiles o proyectores entre las fechas que quedan libres entre un prestamo y el siguiente.
Bien, yo tengo 3 consultas para poder determinar si entre la fecha de entrega y devolución en la que me piden un préstamo, hay algun portátil o proyector disponible. Pongo un ejemplo...
Portátil 1 --> Se lo llevó el día 10 de Enero del 2007, lo devuelve el 20 febrero de 2007
Portátil 1 --> Tiene otro prestamo para el dia 1 de Marzo del 2007 hasta el 20 de Marzo del 2007.
Bien ese portátil queda libre del 21 al 28 de febrero, asi que si alguien me pidiera una cesión entre esas fechas debería aparecerme como disponible.
Os pongo las consultas tal y como las tengo para conseguir esto, imagino que habrá alguna manera de hacerlo más sencillo por eso pregunto....
1ª Consulta (Entrefechas1)
Cita:
SELECT DISTINCT Id_Portatiles
FROM Prestamos INNER JOIN Portatiles ON Prestamos.Id_Portatiles=Portatiles.Id_Portatil
WHERE ((formularios!FPrestamos!fecha_entrega Not Between Prestamos.fecha_entrega And Prestamos.fecha_devolucion)
And
(formularios!FPrestamos!fecha_devolucion Not Between Prestamos.fecha_entrega And Prestamos.fecha_devolucion))
And Id_Portatiles<>0 And Portatiles.Reservado=-1;
FROM Prestamos INNER JOIN Portatiles ON Prestamos.Id_Portatiles=Portatiles.Id_Portatil
WHERE ((formularios!FPrestamos!fecha_entrega Not Between Prestamos.fecha_entrega And Prestamos.fecha_devolucion)
And
(formularios!FPrestamos!fecha_devolucion Not Between Prestamos.fecha_entrega And Prestamos.fecha_devolucion))
And Id_Portatiles<>0 And Portatiles.Reservado=-1;
Cita:
En un formulario pongo la fecha de entrega y devolución que me piden, miro que la fecha de entrega no esté comprendida entre la de entrega y devolución de los préstamos que ya existen, Y lo mismo para la fecha de devolución.
2ª Consulta (Entrefechas2)
Cita:
SELECT DISTINCT Id_Portatiles
FROM Prestamos INNER JOIN Portatiles ON Prestamos.Id_Portatiles=Portatiles.Id_Portatil
WHERE (((formularios!FPrestamos!fecha_entrega Between Prestamos.fecha_entrega And Prestamos.fecha_devolucion) Or (formularios!FPrestamos!fecha_devolucion Between Prestamos.fecha_entrega And Prestamos.fecha_devolucion))
Or
((formularios!FPrestamos!fecha_entrega Between Prestamos.fecha_entrega And Prestamos.fecha_devolucion) And (formularios!FPrestamos!fecha_devolucion>Prestamos .fecha_devolucion))
Or
((formularios!Fprestamos!fecha_devolucion Between Prestamos.fecha_entrega AND Prestamos.fecha_devolucion) And (formularios!FPrestamos!fecha_entrega<Prestamos.fe cha_devolucion))
Or
((formularios!FPrestamos!fecha_entrega<Prestamos.f echa_entrega AND formularios!Fprestamos!fecha_devolucion>Prestamos. fecha_devolucion)))
And Id_Portatiles<>0 AND Portatiles.Reservado=-1;
FROM Prestamos INNER JOIN Portatiles ON Prestamos.Id_Portatiles=Portatiles.Id_Portatil
WHERE (((formularios!FPrestamos!fecha_entrega Between Prestamos.fecha_entrega And Prestamos.fecha_devolucion) Or (formularios!FPrestamos!fecha_devolucion Between Prestamos.fecha_entrega And Prestamos.fecha_devolucion))
Or
((formularios!FPrestamos!fecha_entrega Between Prestamos.fecha_entrega And Prestamos.fecha_devolucion) And (formularios!FPrestamos!fecha_devolucion>Prestamos .fecha_devolucion))
Or
((formularios!Fprestamos!fecha_devolucion Between Prestamos.fecha_entrega AND Prestamos.fecha_devolucion) And (formularios!FPrestamos!fecha_entrega<Prestamos.fe cha_devolucion))
Or
((formularios!FPrestamos!fecha_entrega<Prestamos.f echa_entrega AND formularios!Fprestamos!fecha_devolucion>Prestamos. fecha_devolucion)))
And Id_Portatiles<>0 AND Portatiles.Reservado=-1;
Cita:
En un formulario pongo la fecha de entrega y devolución que me piden, miro todos los prestamos en los que la fecha de entrega que me han pedido está comprendida entre la entrega y devolución de los préstamos existentes O la fecha de devolución que me han dado esté comprendida entre las fechas de los préstamos.
También mira los casos en los que la fecha de entrega que me piden esté comprendida entre los prestamos que ya existen Y la fecha de devolución que me piden es mayor a las fecha de devolución de los préstamos que existen
También mira los casos en los que la fecha de devolución que me piden esté comprendida entre los prestamos que ya existen Y la fecha de entrega sea inferior a la fecha de devolución de los préstamos que ya existen
También mira que la fecha de entrega que me piden que sea inferior a las fechas de entrega de los préstamos que ya existen Y la fecha de devolución es mayor que las devoluciones de los préstamos que ya existen
También mira los casos en los que la fecha de entrega que me piden esté comprendida entre los prestamos que ya existen Y la fecha de devolución que me piden es mayor a las fecha de devolución de los préstamos que existen
También mira los casos en los que la fecha de devolución que me piden esté comprendida entre los prestamos que ya existen Y la fecha de entrega sea inferior a la fecha de devolución de los préstamos que ya existen
También mira que la fecha de entrega que me piden que sea inferior a las fechas de entrega de los préstamos que ya existen Y la fecha de devolución es mayor que las devoluciones de los préstamos que ya existen
3ª Consulta (Portatiles_Disponibles3)
Cita:
SELECT *
FROM Entrefechas1
WHERE Entrefechas1.Id_Portatiles NOT IN(SELECT Entrefechas2.Id_Portatiles FROM Entrefechas2);
FROM Entrefechas1
WHERE Entrefechas1.Id_Portatiles NOT IN(SELECT Entrefechas2.Id_Portatiles FROM Entrefechas2);
Cita:
Espero haberme explicado, si véis que tengo que corregir algo os lo agradecería. Me duele ya la cabeza de pensar en todas las posibilidades y ya no sé si alguna de las que he puesto es innecesaria o me falta cubrir algún caso.Esta última coge los portátiles que no tengan préstamos en las fechas que piden.
Cualquier cosa que me podáis decir os lo agradeceré.
Un saludo.