** NORMAS DEL FORO **
Inicio del foro Inicio del foro > Access y VBA > Access y VBA
  Mensajes nuevos Mensajes nuevos RSS - Consulta sql a vista diseño
  Preguntas frecuentes Preguntas frecuentes  Buscar en el foro   Eventos   Registro Registro  Iniciar sesion Iniciar sesion

Tema cerradoConsulta sql a vista diseño

 Responder Responder
Autor
Mensaje
rokoko Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 16/Febrero/2008
Localización: Pamplona
Estado: Sin conexión
Puntos: 2171
Enlace directo a este mensaje Tema: Consulta sql a vista diseño
    Enviado: 30/Septiembre/2019 a las 17:42
Hola

Estoy intentando pasar una consulta sql que esta en un formulario a una consulta normal. El objetivo es ver como hace los criterios, no consigo aclararme en SQL.

La consulta es de esta base de datos, un planing hotel  www.mvp-access.com/-marta-/web/Ejemplos/De%20mis%20Amigos/photel2000Marciano.zip

La consulta

Set rst = CurrentDb.OpenRecordset("SELECT * FROM Reservas WHERE IdOcupacion <> " & Me.IdOcupacion & " AND Habitacion = " & Me.Habitacion & _
                                    " AND ((FechaEntrada BETWEEN #" & Format(Me.FechaEntrada, "mm/dd/yyyy") & "# AND #" & _
                                    Format(DateAdd("d", -1, Me.FechaSalida), "mm/dd/yyyy") & "#)
OR (DateAdd('d', -1, FechaSalida) BETWEEN #" & Format(Me.FechaEntrada, "mm/dd/yyyy") & _
                                    "# AND #" & Format(DateAdd("d", -1, Me.FechaSalida), "mm/dd/yyyy") & "#))")


No me queda claro cada criterio a que campo va dirigido.  El bloque en rojo creo que es asi, aunque no lo tengo muy claro.  La consulta pilla los datos del formulario.

Del resto de la consulta no lo veo

SELECT Reservas.IdOcupacion, Reservas.Habitacion, Reservas.FechaEntrada, *
FROM Reservas
WHERE (((Reservas.IdOcupacion)<>[Formularios]![frmOcupacionSemanal]![SubFormReservas]![IdOcupacion]) AND ((Reservas.Habitacion)=[Formularios]![frmOcupacionSemanal]![SubFormReservas]![Habitacion]) AND ((Reservas.FechaEntrada) Between [Formularios]![frmOcupacionSemanal]![SubFormReservas]![FechaEntrada] And DateAdd("d",-1,[Formularios]![frmOcupacionSemanal]![SubFormReservas]![FechaSalida])));




Editado por rokoko - 30/Septiembre/2019 a las 17:52
Arriba
happy Ver desplegable
Moderador
Moderador


Unido: 29/Enero/2005
Localización: España
Estado: Sin conexión
Puntos: 3114
Enlace directo a este mensaje Enviado: 30/Septiembre/2019 a las 18:46
Si los campos están en un subformulario entonces te falta indicarlo en la consulta agregando ![Form] despues del nombre del subformulario. Por ejemplo [Formularios]![frmOcupacionSemanal]![SubFormReservas]![Form][IdOcupacion]

Eso sí para el resto de la pregunta no entiendo lo que expones. Tampoco he visto ese ejemplo de Marciano que mencionas ...
Saludos,

Juan M. Afan de Ribera
Arriba
rokoko Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 16/Febrero/2008
Localización: Pamplona
Estado: Sin conexión
Puntos: 2171
Enlace directo a este mensaje Enviado: 30/Septiembre/2019 a las 19:37
Lo que quiero es hacer esa consulta SQL en una consulta normal y poder verla en vista diseño. De esta forma puedo entender su funcionamiento y ver los criterios mas facilmente para entenderlos....
Arriba
emiliove Ver desplegable
Moderador
Moderador


Unido: 16/Junio/2009
Localización: Mexico
Estado: Sin conexión
Puntos: 5038
Enlace directo a este mensaje Enviado: 30/Septiembre/2019 a las 20:06
Puedes poner un 
Debug.print ("SELECT * FROM Reservas WHERE IdOcupacion <> " & Me.IdOcupacion & " AND Habitacion = " & Me.Habitacion & _
                                    " AND ((FechaEntrada BETWEEN #" & Format(Me.FechaEntrada, "mm/dd/yyyy") & "# AND #" & _
                                    Format(DateAdd("d", -1, Me.FechaSalida), "mm/dd/yyyy") & "#)
OR (DateAdd('d', -1, FechaSalida) BETWEEN #" & Format(Me.FechaEntrada, "mm/dd/yyyy") & _
                                    "# AND #" & Format(DateAdd("d", -1, Me.FechaSalida), "mm/dd/yyyy") & "#))")

Y lo que te de lo pegas en una sql de la consuilta.

Salidos.
Arriba
rokoko Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 16/Febrero/2008
Localización: Pamplona
Estado: Sin conexión
Puntos: 2171
Enlace directo a este mensaje Enviado: 30/Septiembre/2019 a las 20:41
Publicado originalmente por emiliove emiliove escribió:

Puedes poner un 
Debug.print ("SELECT * FROM Reservas WHERE IdOcupacion <> " & Me.IdOcupacion & " AND Habitacion = " & Me.Habitacion & _
                                    " AND ((FechaEntrada BETWEEN #" & Format(Me.FechaEntrada, "mm/dd/yyyy") & "# AND #" & _
                                    Format(DateAdd("d", -1, Me.FechaSalida), "mm/dd/yyyy") & "#)
OR (DateAdd('d', -1, FechaSalida) BETWEEN #" & Format(Me.FechaEntrada, "mm/dd/yyyy") & _
                                    "# AND #" & Format(DateAdd("d", -1, Me.FechaSalida), "mm/dd/yyyy") & "#))")

Y lo que te de lo pegas en una sql de la consuilta.

Salidos.



ClapClapClapClapClapClap pedazo truco!!!!Shocked

En la ventana inmediato me a dado esto, lo he copiado en vista sql de la consulta y hay se ve como esta montada la consulta. Luego comparando un poco la sql en vba ves como esta hecha.
SELECT * FROM Reservas WHERE IdOcupacion <> 32 AND Habitacion = 206 AND ((FechaEntrada BETWEEN #06/24/2006# AND #06/24/2006#) OR (DateAdd('d', -1, FechaSalida) BETWEEN #06/24/2006# AND #06/24/2006#))

La consulta queda asi.

SELECT *
FROM Reservas
WHERE (((Reservas.FechaEntrada) Between [Formularios]![frmOcupacionSemanal]![SubFormReservas]![FechaEntrada] And DateAdd("d",-1,[Formularios]![frmOcupacionSemanal]![SubFormReservas]![FechaSalida])) AND ((Reservas.IdOcupacion)<>[Formularios]![frmOcupacionSemanal]![SubFormReservas]![idOcupacion]) AND ((Reservas.Habitacion)=[Formularios]![frmOcupacionSemanal]![SubFormReservas]![Habitacion])) OR (((Reservas.IdOcupacion)<>[Formularios]![frmOcupacionSemanal]![SubFormReservas]![idOcupacion]) AND ((Reservas.Habitacion)=[Formularios]![frmOcupacionSemanal]![SubFormReservas]![Habitacion]) AND ((DateAdd('d',-1,[FechaSalida])) Between [Formularios]![frmOcupacionSemanal]![SubFormReservas]![FechaEntrada] And DateAdd("d",-1,[Formularios]![frmOcupacionSemanal]![SubFormReservas]![FechaSalida])));


La probare mejor, pero parece que funciona!!

Arriba
mounir Ver desplegable
Colaborador
Colaborador


Unido: 09/Febrero/2009
Localización: Asturias-España
Estado: en línea
Puntos: 5272
Enlace directo a este mensaje Enviado: 30/Septiembre/2019 a las 20:53
Hola!

Este ejemplo en su momento tuvo un debate sobre la función de disponibilidad.

echale un vistazo por si te interesa.


Consulta de fecha y disponibilidad

Editado por mounir - 30/Septiembre/2019 a las 20:54
Un Saludo.
Arriba
rokoko Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 16/Febrero/2008
Localización: Pamplona
Estado: Sin conexión
Puntos: 2171
Enlace directo a este mensaje Enviado: 01/Octubre/2019 a las 16:41
Publicado originalmente por mounir mounir escribió:

Hola!

Este ejemplo en su momento tuvo un debate sobre la función de disponibilidad.

echale un vistazo por si te interesa.




Cierto tiene es "defecto", me ha salido gracias al enlace que me has puesto y a un ejemplo que tiene hay pitxiku.

Aun me tengo que mirar la rutina de Mihura...

Esta es la consulta que me a quedado que solventa ese defecto.

SELECT Reservas.FechaEntrada, DateAdd('d',-1,[FechaSalida]) AS Fecha_Salida, [Formularios]![frmOcupacionSemanal]![SubFormReservas]![FechaEntrada] AS Expr1, Reservas.FechaSalida, Reservas.Habitacion, Reservas.idOcupacion
FROM Reservas
WHERE (((Reservas.FechaEntrada) Between [Formularios]![frmOcupacionSemanal]![SubFormReservas]![FechaEntrada] And DateAdd("d",-1,[Formularios]![frmOcupacionSemanal]![SubFormReservas]![FechaSalida])) AND ((Reservas.Habitacion)=[Formularios]![frmOcupacionSemanal]![SubFormReservas]![Habitacion]) AND ((Reservas.idOcupacion)<>[Formularios]![frmOcupacionSemanal]![SubFormReservas]![idOcupacion])) OR (((DateAdd('d',-1,[FechaSalida])) Between [Formularios]![frmOcupacionSemanal]![SubFormReservas]![FechaEntrada] And DateAdd("d",-1,[Formularios]![frmOcupacionSemanal]![SubFormReservas]![FechaSalida])) AND ((Reservas.Habitacion)=[Formularios]![frmOcupacionSemanal]![SubFormReservas]![Habitacion]) AND ((Reservas.idOcupacion)<>[Formularios]![frmOcupacionSemanal]![SubFormReservas]![idOcupacion])) OR ((([Formularios]![frmOcupacionSemanal]![SubFormReservas]![FechaEntrada]) Between [FechaEntrada] And DateAdd("d",-1,[FechaSalida])) AND ((Reservas.Habitacion)=[Formularios]![frmOcupacionSemanal]![SubFormReservas]![Habitacion]) AND ((Reservas.idOcupacion)<>[Formularios]![frmOcupacionSemanal]![SubFormReservas]![idOcupacion]));

Arriba
rokoko Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 16/Febrero/2008
Localización: Pamplona
Estado: Sin conexión
Puntos: 2171
Enlace directo a este mensaje Enviado: 02/Octubre/2019 a las 13:13
Por mi parte se puede cerrar.

He utilizado el metodo de Mihura tambien, y una vez entendido queda una consulta bastante simple.

SELECT Reservas.FechaEntrada, DateAdd('d',-1,[FechaSalida]) AS Fecha_Salida, Reservas.idOcupacion, Reservas.Habitacion
FROM Reservas
WHERE (((Reservas.FechaEntrada)<=DateAdd('d',-1,[Formularios]![frmOcupacionSemanal]![SubFormReservas]![FechaSalida])) AND ((DateAdd('d',-1,[FechaSalida]))>=[Formularios]![frmOcupacionSemanal]![SubFormReservas]![FechaEntrada]) AND ((Reservas.idOcupacion)<>[Formularios]![frmOcupacionSemanal]![SubFormReservas]![idOcupacion]) AND ((Reservas.Habitacion)=[Formularios]![frmOcupacionSemanal]![SubFormReservas]![Habitacion]));


Saludos  y gracias
Arriba
 Responder Responder
  Compartir tema   

Ir al foro Permisos de foro Ver desplegable