Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General »

consulta access

Estas en el tema de consulta access en el foro de Bases de Datos General en Foros del Web. Veamos, yo tengo la siguiente consulta en access (lo pongo en sql para que nos entendamos y veais los campos que tengo y tal) SELECT ...
  #1 (permalink)  
Antiguo 09/06/2008, 05:38
Avatar de Koudelka  
Fecha de Ingreso: febrero-2008
Mensajes: 397
Antigüedad: 16 años, 2 meses
Puntos: 1
consulta access

Veamos, yo tengo la siguiente consulta en access (lo pongo en sql para que nos entendamos y veais los campos que tengo y tal)

SELECT PartesDeTrabajo.nparte, PartesDeTrabajo.CodigoOperario, operario2.nombre, PartesDeTrabajo.fecha, PartesDeTrabajo.obra, PartesDeTrabajo.actividad, PartesDeTrabajo.subactividad, PartesDeTrabajo.horas, PartesDeTrabajo.horainicio, PartesDeTrabajo.horafinal, PartesDeTrabajo.mañana, PartesDeTrabajo.tarde, PartesDeTrabajo.noche, PartesDeTrabajo.festivo
FROM PartesDeTrabajo INNER JOIN operario2 ON PartesDeTrabajo.CodigoOperario = operario2.CodigoOperario
WHERE (((PartesDeTrabajo.fecha)=[Qué día?]))
ORDER BY operario2.nombre, PartesDeTrabajo.horainicio;

Me gustaría modificarla un poco. Veamos, el campo noche es un campo de si/no y lo único que indica es el turno del trabajador en un día en concreto. El caso es que el turno de noche comienza a las 10 de la noche y acaba a las 6 o 7 del día siguiente.

En la consulta me gustaría que si un trabajador comienza a las 10 de la noche del día 08/06 y acaba el 09/06, en esta consulta que me mostrase los registros que correspondan a su turno aunque sean del día siguiente, esto es, que me muestre el turno completo.
__________________
Cámara Oscura
Etheria
  #2 (permalink)  
Antiguo 10/06/2008, 04:42
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: consulta access

Borrado estaba mal!!!!

Algo asi te deberia funcionar, he considerado que si buscas los partes del dia X quieres todos los partes del turno de noche que empieza en el dia X, es decir hasta X+1 antes de las 7. En el order by he agregado la fecha puesto que ahora tendras partes de dos fechas.... (El delimitador de la hora no se si son las " comillas o #) (no intentes hacerlo con el asistente de consultas...)

[Qué día?] tiene que estar escrito exàctamente igual en todos los casos para que no pregunte n veces...

Quim

Última edición por quimfv; 10/06/2008 a las 06:15
  #3 (permalink)  
Antiguo 10/06/2008, 05:07
Avatar de Koudelka  
Fecha de Ingreso: febrero-2008
Mensajes: 397
Antigüedad: 16 años, 2 meses
Puntos: 1
Respuesta: consulta access

si intento hacer una consulta con lo que tú me has escrito me sale el error que me dice lo siguiente

error de sintaxis en la consulta de unión

He estado mirando y he intentado poner la parte del where a lo que habías puesto tú:

SELECT PartesDeTrabajo.nparte, PartesDeTrabajo.CodigoOperario, operario2.nombre, PartesDeTrabajo.fecha, PartesDeTrabajo.obra, PartesDeTrabajo.actividad, PartesDeTrabajo.subactividad, PartesDeTrabajo.horas, PartesDeTrabajo.horainicio, PartesDeTrabajo.horafinal, PartesDeTrabajo.mañana, PartesDeTrabajo.tarde, PartesDeTrabajo.noche, PartesDeTrabajo.festivo
FROM PartesDeTrabajo INNER JOIN operario2 ON PartesDeTrabajo.CodigoOperario = operario2.CodigoOperario
WHERE PartesDeTrabajo.noche=true and (PartesDeTrabajo.fecha=[Qué día?] or (PartesDeTrabajo.fecha=[Qué día?]+1 and PartesDeTrabajo.horainicio<"07:00:00"))
ORDER BY operario2.nombre, PartesDeTrabajo.horainicio;


pero sigue dando error T.T
__________________
Cámara Oscura
Etheria
  #4 (permalink)  
Antiguo 10/06/2008, 05:11
Avatar de Koudelka  
Fecha de Ingreso: febrero-2008
Mensajes: 397
Antigüedad: 16 años, 2 meses
Puntos: 1
Respuesta: consulta access

Bueno, algo he conseguido sacar, tengo puesto lo siguiente:

SELECT PartesDeTrabajo.nparte, PartesDeTrabajo.CodigoOperario, operario2.nombre, PartesDeTrabajo.fecha, PartesDeTrabajo.obra, PartesDeTrabajo.actividad, PartesDeTrabajo.subactividad, PartesDeTrabajo.horas, PartesDeTrabajo.horainicio, PartesDeTrabajo.horafinal, PartesDeTrabajo.mañana, PartesDeTrabajo.tarde, PartesDeTrabajo.noche, PartesDeTrabajo.festivo
FROM PartesDeTrabajo INNER JOIN operario2 ON PartesDeTrabajo.CodigoOperario = operario2.CodigoOperario
WHERE (((PartesDeTrabajo.fecha)=[Qué día?])) OR (((PartesDeTrabajo.horainicio)<#12/30/1899 7:0:0#) AND ((PartesDeTrabajo.noche)=True))
ORDER BY operario2.nombre, PartesDeTrabajo.horainicio;

Y no me da ningún tipo de error y me muestra los registros que son de turno noche y que no superan las 7 horas de la mañana. Así que el error está en ponerle que sean del día siguiente.
__________________
Cámara Oscura
Etheria
  #5 (permalink)  
Antiguo 10/06/2008, 05:59
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: consulta access

Perdon por exceso de confianza use +1 para agregar un dia a una fecha, ERROR, usa lo siguiente

DateAdd("d",1,[Qué día?])

Tu solucion no te da problemas pero "creo" que te dara partes nocturnos que no corresponden a la jornada laboral elegida, quizas ya te va bien...

Pero tines razon mi solucion incial se puede simplificar....

Código:
SELECT PartesDeTrabajo.nparte, 
            PartesDeTrabajo.CodigoOperario, 
            operario2.nombre, 
            PartesDeTrabajo.fecha, 
            PartesDeTrabajo.obra, 
            PartesDeTrabajo.actividad, 
            PartesDeTrabajo.subactividad, 
            PartesDeTrabajo.horas, 
            PartesDeTrabajo.horainicio, 
            PartesDeTrabajo.horafinal, 
            PartesDeTrabajo.mañana, 
            PartesDeTrabajo.tarde, 
            PartesDeTrabajo.noche, 
            PartesDeTrabajo.festivo
FROM PartesDeTrabajo INNER JOIN operario2 
            ON PartesDeTrabajo.CodigoOperario = operario2.CodigoOperario
WHERE (PartesDeTrabajo.noche=false
            and PartesDeTrabajo.fecha=[Qué día?])
            or (PartesDeTrabajo.noche=true
                     and ((PartesDeTrabajo.fecha=[Qué día?] 
                              and PartesDeTrabajo.horainicio>#12/31/1899 22:0:0#)
                         or (PartesDeTrabajo.fecha= DateAdd("d",1,[Qué día?]))
                                and PartesDeTrabajo.horainicio<#12/31/1899 7:0:0#))
ORDER BY operario2.nombre, PartesDeTrabajo.fecha, PartesDeTrabajo.horainicio;
(Ojo con los parentesis)

De esta forma te deberia dar los partes del dia elegido de los turnos NO nocturnos y los partes del turno de noche que empieza en el dia elegido.... creo


Suerte...

Quim

Última edición por quimfv; 10/06/2008 a las 06:13
  #6 (permalink)  
Antiguo 10/06/2008, 06:15
Avatar de Koudelka  
Fecha de Ingreso: febrero-2008
Mensajes: 397
Antigüedad: 16 años, 2 meses
Puntos: 1
Respuesta: consulta access

No da error, pero sólo muestra los registros del día que le pongo >.<
__________________
Cámara Oscura
Etheria
  #7 (permalink)  
Antiguo 10/06/2008, 06:19
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: consulta access

En que solución?
  #8 (permalink)  
Antiguo 10/06/2008, 06:25
Avatar de Koudelka  
Fecha de Ingreso: febrero-2008
Mensajes: 397
Antigüedad: 16 años, 2 meses
Puntos: 1
Respuesta: consulta access

La última que me has puesto, esta:

Cita:
SELECT PartesDeTrabajo.nparte,
PartesDeTrabajo.CodigoOperario,
operario2.nombre,
PartesDeTrabajo.fecha,
PartesDeTrabajo.obra,
PartesDeTrabajo.actividad,
PartesDeTrabajo.subactividad,
PartesDeTrabajo.horas,
PartesDeTrabajo.horainicio,
PartesDeTrabajo.horafinal,
PartesDeTrabajo.mañana,
PartesDeTrabajo.tarde,
PartesDeTrabajo.noche,
PartesDeTrabajo.festivo
FROM PartesDeTrabajo INNER JOIN operario2
ON PartesDeTrabajo.CodigoOperario = operario2.CodigoOperario
WHERE (PartesDeTrabajo.noche=false
and PartesDeTrabajo.fecha=[Qué día?])
or (PartesDeTrabajo.noche=true
and ((PartesDeTrabajo.fecha=[Qué día?]
and PartesDeTrabajo.horainicio>#12/31/1899 22:0:0#)
or (PartesDeTrabajo.fecha= DateAdd("d",1,[Qué día?]))
and PartesDeTrabajo.horainicio<#12/31/1899 7:0:0#))
ORDER BY operario2.nombre, PartesDeTrabajo.fecha, PartesDeTrabajo.horainicio;
__________________
Cámara Oscura
Etheria
  #9 (permalink)  
Antiguo 10/06/2008, 06:33
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: consulta access

Código:
SELECT PartesDeTrabajo.nparte, 
            PartesDeTrabajo.CodigoOperario, 
            operario2.nombre, 
            PartesDeTrabajo.fecha, 
            PartesDeTrabajo.obra, 
            PartesDeTrabajo.actividad, 
            PartesDeTrabajo.subactividad, 
            PartesDeTrabajo.horas, 
            PartesDeTrabajo.horainicio, 
            PartesDeTrabajo.horafinal, 
            PartesDeTrabajo.mañana, 
            PartesDeTrabajo.tarde, 
            PartesDeTrabajo.noche, 
            PartesDeTrabajo.festivo
FROM PartesDeTrabajo INNER JOIN operario2 
            ON PartesDeTrabajo.CodigoOperario = operario2.CodigoOperario
WHERE (PartesDeTrabajo.noche=false
            and PartesDeTrabajo.fecha=[Qué día?])
            or (PartesDeTrabajo.noche=true
                     and ((PartesDeTrabajo.fecha=[Qué día?] 
                              and PartesDeTrabajo.horainicio>#12/30/1899 22:0:0#)
                         or (PartesDeTrabajo.fecha= DateAdd("d",1,[Qué día?])
                                and PartesDeTrabajo.horainicio<#12/30/1899 7:0:0#)))
ORDER BY operario2.nombre, PartesDeTrabajo.fecha, PartesDeTrabajo.horainicio;
Otro error habia un lio de parentesis, lo siento

Quim

Última edición por quimfv; 10/06/2008 a las 09:22 Razón: He cambiado 31 por 30
  #10 (permalink)  
Antiguo 10/06/2008, 08:04
Avatar de Koudelka  
Fecha de Ingreso: febrero-2008
Mensajes: 397
Antigüedad: 16 años, 2 meses
Puntos: 1
Respuesta: consulta access

siguen saliendo los registros de un solo día -.-
__________________
Cámara Oscura
Etheria
  #11 (permalink)  
Antiguo 10/06/2008, 09:17
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: consulta access

El error esta en la fecha tiene que ser #12/30/1899 22:0:0# y #12/30/1899 7:0:0#. Tu lo habias puesto bien.

Acabo de probarlo con los siguientes datos y da los dos dias:

Tabla2
data Fecha/Hora Fecha corta
hora Fecha/Hora Hora larga


Data------------Hora
28/11/1963---21:59:00
28/11/1963---22:10:00
29/11/1963----6:50:00
29/11/1963----7:01:00

Código:
SELECT Tabla2.data, 
             Tabla2.hora
FROM Tabla2
WHERE (((Tabla2.data)=[Qué día?]) 
                   AND ((Tabla2.hora)>#12/30/1899 22:0:0#)) 
       OR (((Tabla2.data)=DateAdd("d",1,[Qué día?])) 
                   AND ((Tabla2.hora)<#12/30/1899 7:0:0#));
y el resultado es

Data------------Hora
28/11/1963---22:10:00
29/11/1963----6:50:00

Quim
  #12 (permalink)  
Antiguo 11/06/2008, 01:08
Avatar de Koudelka  
Fecha de Ingreso: febrero-2008
Mensajes: 397
Antigüedad: 16 años, 2 meses
Puntos: 1
Respuesta: consulta access

creo que algo me he comido porque a mi me siguen apareciendo sólo los del mismo día...

SELECT PartesDeTrabajo.nparte,
PartesDeTrabajo.CodigoOperario,
operario2.nombre,
PartesDeTrabajo.fecha,
PartesDeTrabajo.obra,
PartesDeTrabajo.actividad,
PartesDeTrabajo.subactividad,
PartesDeTrabajo.horas,
PartesDeTrabajo.horainicio,
PartesDeTrabajo.horafinal,
PartesDeTrabajo.mañana,
PartesDeTrabajo.tarde,
PartesDeTrabajo.noche,
PartesDeTrabajo.festivo
FROM PartesDeTrabajo INNER JOIN operario2
ON PartesDeTrabajo.CodigoOperario = operario2.CodigoOperario
WHERE (PartesDeTrabajo.noche=false
and PartesDeTrabajo.fecha=[Qué día?])
or (PartesDeTrabajo.noche=true
and ((PartesDeTrabajo.fecha=[Qué día?]
and PartesDeTrabajo.horainicio>#12/30/1899 22:0:0#)
or (PartesDeTrabajo.fecha= DateAdd("d",1,[Qué día?])
and PartesDeTrabajo.horainicio<#12/30/1899 7:0:0#)))
ORDER BY operario2.nombre, PartesDeTrabajo.fecha, PartesDeTrabajo.horainicio;
__________________
Cámara Oscura
Etheria
  #13 (permalink)  
Antiguo 11/06/2008, 04:34
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: consulta access

Código:
WHERE (PartesDeTrabajo.noche=false and PartesDeTrabajo.fecha=[Qué día?])
          or (PartesDeTrabajo.noche=true
                and (
                             (PartesDeTrabajo.fecha=[Qué día?] and PartesDeTrabajo.horainicio>#12/30/1899 22:0:0#)
                        or (PartesDeTrabajo.fecha=DateAdd("d",1,[Qué día?]) and PartesDeTrabajo.horainicio<#12/30/1899 7:0:0#)
                        )
                )

DONDE (Partes diurnos Y del dia)
             O (partes nocturnos 
                        Y (
                             (del dia Y posteriores a las 10) 
                            O (del dia siguiente Y anteriores a las 7)
                             )
                 )


Yo lo veo bien!!??

Estas segura que exiten partes con horainicio entre las 0:0:0 y las 7:0:0 del dia siguiente al que pides?

Lo has intentado con una tabla con un registro de cada tipo todos del dia o de siguiente dia como hice yo...?

Quim

Última edición por quimfv; 11/06/2008 a las 04:40
  #14 (permalink)  
Antiguo 11/06/2008, 05:15
Avatar de Koudelka  
Fecha de Ingreso: febrero-2008
Mensajes: 397
Antigüedad: 16 años, 2 meses
Puntos: 1
Respuesta: consulta access

lo he vuelto a probar con disntintos días y funcionar... funciona a medias >.<

Lo primero es que al abrirla me pregunta dos veces el día (tendría que ser con uno >.<) y lo segundo, es que tuve que cambiar lo que guardaba el campo horainicio, por lo que a partir de un día, a parte de guardar la hora guarda el día. Con este nuevo cambio no me funciona... T.T
__________________
Cámara Oscura
Etheria
  #15 (permalink)  
Antiguo 11/06/2008, 06:01
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: consulta access

A mi me lo pregunta una sola vez tienes que estar segura que el parametro esta escrito exactamente igual cada vez que salga

[Qué día?]

Si has cambiado el formato del campo y ahora guardas el dia es normal que no te funcione puesto que en el where tiene un dia que no coincide 12/30/1899.

Para solucionar esto deberias hacer un update a todos los registros para que todos guarden la fecha correcta... y luego modificar el where para que no salga la fecha constante y salga la correcta.... es factible pero....

o usar alguna funcion que solo tenga en cuenta la hora (no se si exite)..... la hora es la parte fraccionaria del numero que representa la fecha/hora en milisegundos por tanto se debe poder separar y asi poder comparar horas de distintos dias...

Pero, lo siento, investiga que es la manera de aprender....

Quim
  #16 (permalink)  
Antiguo 11/06/2008, 06:21
Avatar de Koudelka  
Fecha de Ingreso: febrero-2008
Mensajes: 397
Antigüedad: 16 años, 2 meses
Puntos: 1
Respuesta: consulta access

Lo de repetir pregunta ya lo he arreglado, copiar y pegar salva vidas XDDD.

En cuanto a lo otro, tendré que mirarlo la verdad >.<
__________________
Cámara Oscura
Etheria
  #17 (permalink)  
Antiguo 11/06/2008, 11:25
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: consulta access

Haz un post preguntando la manera de comparar la hora de fechas distintas si te dan la solución podrás arreglarlo sin updates peligrosos. Seguro que alguien lo tiene hecho.

Ejemplo

28/11/2008 03:00:00
29/11/2008 01:00:00

Comparar estos dos registros y obtener que el segundo es mas temprano que el primero, aun que sea de un dia posterior.

Supongo que se hara restanto el entero que representa le fecha y comparando los decimales.... pero repito seguro que alguien lo tiene hecho o sabe de una función que lo hace.

Deberia ser algo asi como

hora(horainicio)<hora(#12/30/1899 7:0:0#)

Quim
  #18 (permalink)  
Antiguo 12/06/2008, 03:15
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: consulta access

Bingo!!

Tabla1
28/06/2008 7:00:00
29/06/2008 6:00:00

Código:
SELECT Tabla1.data, TimeValue([data]) AS Expr1
FROM Tabla1
ORDER BY TimeValue([data]);
Resultado
29/06/2008 6:00:00 6:00:00
28/06/2008 7:00:00 7:00:00


TimeValue(horainicio)<TimeValue(#12/30/1899 7:0:0#)

Eso puede funcionar

Quim
  #19 (permalink)  
Antiguo 12/06/2008, 03:34
Avatar de Koudelka  
Fecha de Ingreso: febrero-2008
Mensajes: 397
Antigüedad: 16 años, 2 meses
Puntos: 1
Respuesta: consulta access

ahora es cuando digo... eso donde lo pongo?... TimeValue supongo que es un nuevo campo no?, entonces yo añado ese nuevo campo y con lo anteriormente hecho funciona?

EDIT: yo lo he puesto de la siguiente manera y me pregunta dos veces, uno el Qué Dia? y otro Data. Y sigue sin funcionar >.<

SELECT PartesDeTrabajo.nparte, PartesDeTrabajo.CodigoOperario, operario2.nombre, PartesDeTrabajo.fecha, PartesDeTrabajo.obra, PartesDeTrabajo.actividad, PartesDeTrabajo.subactividad, PartesDeTrabajo.horas, PartesDeTrabajo.horainicio, PartesDeTrabajo.horafinal, PartesDeTrabajo.mañana, PartesDeTrabajo.tarde, PartesDeTrabajo.noche, PartesDeTrabajo.festivo, TimeValue([data]) AS Expr1
FROM PartesDeTrabajo INNER JOIN operario2 ON PartesDeTrabajo.CodigoOperario = operario2.CodigoOperario
WHERE (((PartesDeTrabajo.fecha)=[Qué día?]) AND ((PartesDeTrabajo.noche)=False)) OR (((PartesDeTrabajo.fecha)=[Qué día?]) AND ((PartesDeTrabajo.horainicio)>#12/30/1899 22:0:0#) AND ((PartesDeTrabajo.noche)=True)) OR (((PartesDeTrabajo.fecha)=DateAdd("d",1,[Qué día?])) AND ((PartesDeTrabajo.horainicio)<#12/30/1899 7:0:0#) AND ((PartesDeTrabajo.noche)=True))
ORDER BY operario2.nombre, PartesDeTrabajo.fecha, PartesDeTrabajo.horainicio, TimeValue([data]);
__________________
Cámara Oscura
Etheria

Última edición por Koudelka; 12/06/2008 a las 04:21
  #20 (permalink)  
Antiguo 12/06/2008, 05:45
Avatar de Koudelka  
Fecha de Ingreso: febrero-2008
Mensajes: 397
Antigüedad: 16 años, 2 meses
Puntos: 1
Respuesta: consulta access

vale, ya lo he solucionado XD

SELECT PartesDeTrabajo.nparte, PartesDeTrabajo.CodigoOperario, operario2.nombre, PartesDeTrabajo.fecha, PartesDeTrabajo.obra, PartesDeTrabajo.actividad, PartesDeTrabajo.subactividad, PartesDeTrabajo.horas, PartesDeTrabajo.horainicio, PartesDeTrabajo.horafinal, TimeValue([horainicio]) AS Expr1, PartesDeTrabajo.mañana, PartesDeTrabajo.tarde, PartesDeTrabajo.noche, PartesDeTrabajo.festivo
FROM PartesDeTrabajo INNER JOIN operario2 ON PartesDeTrabajo.CodigoOperario = operario2.CodigoOperario
WHERE (((PartesDeTrabajo.fecha)=[Qué día?]) AND ((PartesDeTrabajo.noche)=False)) OR (((PartesDeTrabajo.fecha)=[Qué día?]) AND ((TimeValue([horainicio]))>#12/30/1899 22:0:0#) AND ((PartesDeTrabajo.noche)=True)) OR (((PartesDeTrabajo.fecha)=DateAdd("d",1,[Qué día?])) AND ((TimeValue([horainicio]))<#12/30/1899 7:0:0#) AND ((PartesDeTrabajo.noche)=True))
ORDER BY operario2.nombre, PartesDeTrabajo.fecha, PartesDeTrabajo.horainicio, TimeValue([horainicio]);
__________________
Cámara Oscura
Etheria
  #21 (permalink)  
Antiguo 12/06/2008, 07:03
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: consulta access

Código:
WHERE 
   (((PartesDeTrabajo.fecha)=[Qué día?]) AND ((PartesDeTrabajo.noche)=False)) 
OR (((PartesDeTrabajo.fecha)=[Qué día?]) 
   AND (TimeValue([horainicio]))>TimeValue(#12/30/1899 22:0:0#)) 
   AND ((PartesDeTrabajo.noche)=True)) 
 OR (((PartesDeTrabajo.fecha)=DateAdd("d",1,[Qué día?])) 
   AND ((TimeValue([horainicio]))<TimeValue(#12/30/1899 7:0:0#)) 
   AND ((PartesDeTrabajo.noche)=True))
ORDER BY operario2.nombre, PartesDeTrabajo.fecha, TimeValue([horainicio]); 
Mas o menos...

Quim
  #22 (permalink)  
Antiguo 19/06/2008, 02:24
Avatar de Koudelka  
Fecha de Ingreso: febrero-2008
Mensajes: 397
Antigüedad: 16 años, 2 meses
Puntos: 1
Respuesta: consulta access

resurjo este tema porque me he fijado de que no está bien pulido >.<

Veamos, he revisado las relaciones (porque las tenía mal >.<). Pero la consulta me falla en la segunda línea del where (con el código que yo tenía puesto) que es la siguiente:

OR (((PartesDeTrabajo.fecha)=[Qué día?]) AND ((TimeValue([horainicio]))>#12/30/1899 22:0:0#) AND ((PartesDeTrabajo.noche)=True))

He intentado poner lo que has puesto quimfv, pero me dice que sobra un paréntesis y por más que lo busco no veo cual sobra!!! >.<
__________________
Cámara Oscura
Etheria
  #23 (permalink)  
Antiguo 19/06/2008, 03:03
Avatar de Koudelka  
Fecha de Ingreso: febrero-2008
Mensajes: 397
Antigüedad: 16 años, 2 meses
Puntos: 1
Respuesta: consulta access

He conseguido arreglarla un poco

SELECT PartesDeTrabajo.nparte, PartesDeTrabajo.CodigoOperario, operario2.nombre, PartesDeTrabajo.fecha, PartesDeTrabajo.obra, PartesDeTrabajo.actividad, PartesDeTrabajo.subactividad, PartesDeTrabajo.horas, PartesDeTrabajo.horainicio, PartesDeTrabajo.horafinal, TimeValue([horainicio]) AS Expr1, TimeValue([horafinal]) AS Expr2, PartesDeTrabajo.mañana, PartesDeTrabajo.tarde, PartesDeTrabajo.noche, PartesDeTrabajo.sabado, PartesDeTrabajo.festivo
FROM operario2 INNER JOIN PartesDeTrabajo ON operario2.CodigoOperario = PartesDeTrabajo.CodigoOperario
WHERE (((PartesDeTrabajo.fecha)=[Qué día?])) OR (((PartesDeTrabajo.fecha)=[Qué día?]) AND ((TimeValue([horainicio]))>TimeValue(#12/30/1899 22:0:0#)) AND ((PartesDeTrabajo.noche)=True)) OR (((PartesDeTrabajo.fecha)=DateAdd("d",1,[Qué día?])) AND ((TimeValue([horainicio]))<TimeValue(#12/30/1899 7:0:0#)) AND ((PartesDeTrabajo.noche)=True))
ORDER BY operario2.nombre, PartesDeTrabajo.fecha, TimeValue([horainicio]);


El problema es que he tenido que quitar en la primera línea del where que noche esté como falso, ya que si lo pongo no me salen los registros que tienen que salir, pero si lo dejo tal y como lo tengo, en los registros del propio día hay registros de noche que quizá no tienen que salir.

Bueno, al final lo he arreglado añadiendo una cosa más a la condición where

SELECT PartesDeTrabajo.nparte, PartesDeTrabajo.CodigoOperario, operario2.nombre, PartesDeTrabajo.fecha, PartesDeTrabajo.obra, PartesDeTrabajo.actividad, PartesDeTrabajo.subactividad, PartesDeTrabajo.horas, PartesDeTrabajo.horainicio, PartesDeTrabajo.horafinal, TimeValue([horainicio]) AS Expr1, TimeValue([horafinal]) AS Expr2, PartesDeTrabajo.mañana, PartesDeTrabajo.tarde, PartesDeTrabajo.noche, PartesDeTrabajo.sabado, PartesDeTrabajo.festivo
FROM operario2 INNER JOIN PartesDeTrabajo ON operario2.CodigoOperario = PartesDeTrabajo.CodigoOperario
WHERE (((PartesDeTrabajo.fecha)=[Qué día?]) AND ((TimeValue([horainicio]))>TimeValue(#12/30/1899 6:0:0#)) AND ((PartesDeTrabajo.mañana)=True)) OR (((PartesDeTrabajo.fecha)=[Qué día?]) AND ((TimeValue([horainicio]))>TimeValue(#12/30/1899 6:0:0#)) AND ((PartesDeTrabajo.tarde)=True)) OR (((PartesDeTrabajo.fecha)=[Qué día?]) AND ((TimeValue([horainicio]))>TimeValue(#12/30/1899 21:0:0#)) AND ((PartesDeTrabajo.noche)=True)) OR (((PartesDeTrabajo.fecha)=DateAdd("d",1,[Qué día?])) AND ((TimeValue([horainicio]))<TimeValue(#12/30/1899 7:0:0#)) AND ((PartesDeTrabajo.noche)=True))
ORDER BY operario2.nombre, PartesDeTrabajo.fecha, TimeValue([horainicio]);
__________________
Cámara Oscura
Etheria

Última edición por Koudelka; 19/06/2008 a las 04:18
  #24 (permalink)  
Antiguo 25/06/2008, 06:08
Avatar de Koudelka  
Fecha de Ingreso: febrero-2008
Mensajes: 397
Antigüedad: 16 años, 2 meses
Puntos: 1
Respuesta: consulta access

Resurjo este tema porque quiero hacer una nueva consulta con esto mismo pero en vez de preguntar por un día pregunte entre fechas.

En lo que antes a los del turno de noche les cogía los registros del día siguiente, me gustaría que pregunte entre dos fechas y los del turno de noche todos los registros estuviesen en el mismo día. Un ejemplo:

Empieza el día 21 pero acaba el día 22 (turno de noche), por lo que los registros del día 22 que correspondan a ese turno que comienza el 21 (que terminan a las 7 de la mañana), aparezcan como día 21 (que se me ocurre creando un nuevo campo llamado fecha2 en el que a esa parte le restaría un día).

Yo lo he intentado de la siguiente manera, pero me he dado cuenta de que se come los registros de la noche...

SELECT PartesDeTrabajo.nparte, PartesDeTrabajo.CodigoOperario, operario2.nombre, PartesDeTrabajo.fecha, PartesDeTrabajo.obra, PartesDeTrabajo.actividad, PartesDeTrabajo.subactividad, PartesDeTrabajo.unidades, PartesDeTrabajo.horas, PartesDeTrabajo.horainicio, PartesDeTrabajo.horafinal, TimeValue([horainicio]) AS Expr1, TimeValue([horafinal]) AS Expr2, PartesDeTrabajo.mañana, PartesDeTrabajo.tarde, PartesDeTrabajo.noche, PartesDeTrabajo.sabado, PartesDeTrabajo.festivo
FROM operario2 INNER JOIN PartesDeTrabajo ON operario2.CodigoOperario = PartesDeTrabajo.CodigoOperario
WHERE (((PartesDeTrabajo.fecha) Between [Fecha inicial] And [Fecha final]) AND ((TimeValue([horainicio]))>TimeValue(#12/30/1899 6:0:0#)) AND ((PartesDeTrabajo.mañana)=True)) OR (((PartesDeTrabajo.fecha) Between [Fecha inicial] And [Fecha final]) AND ((TimeValue([horainicio]))>TimeValue(#12/30/1899 6:0:0#)) AND ((PartesDeTrabajo.tarde)=True)) OR (((PartesDeTrabajo.fecha) Between [Fecha inicial] And [Fecha final]) AND ((TimeValue([horainicio]))>TimeValue(#12/30/1899 21:0:0#)) AND ((PartesDeTrabajo.noche)=True)) OR (((PartesDeTrabajo.fecha)=DateAdd("d",1,((PartesDe Trabajo.fecha) Between [Fecha inicial] And [Fecha final]))) AND ((TimeValue([horainicio]))<TimeValue(#12/30/1899 7:0:0#)) AND ((PartesDeTrabajo.noche)=True))
ORDER BY operario2.nombre, PartesDeTrabajo.fecha, PartesDeTrabajo.horainicio, TimeValue([horainicio]);

************************************************** ****************************
Editado
He modificado la consulta y ahora no me come ningún registro, sólo que me queda añadirle la condición de que me muestre un día menos. He añadido el campo Fecha2 y en la última condición (turno de noche cuya hora de inicio sea inferior a las 7) me gustaría que mostrase el día anterior en el campo fecha2. Esto es lo que tengo hecho:

SELECT PartesDeTrabajo.nparte, PartesDeTrabajo.CodigoOperario, operario2.nombre, PartesDeTrabajo.fecha, PartesDeTrabajo.obra, PartesDeTrabajo.actividad, PartesDeTrabajo.subactividad, PartesDeTrabajo.unidades, PartesDeTrabajo.horas, PartesDeTrabajo.horainicio, PartesDeTrabajo.horafinal, TimeValue([horainicio]) AS Expr1, TimeValue([horafinal]) AS Expr2, PartesDeTrabajo.mañana, PartesDeTrabajo.tarde, PartesDeTrabajo.noche, PartesDeTrabajo.sabado, PartesDeTrabajo.festivo, fecha AS Fecha2
FROM operario2 INNER JOIN PartesDeTrabajo ON operario2.CodigoOperario = PartesDeTrabajo.CodigoOperario
WHERE (((PartesDeTrabajo.fecha) Between [Fecha inicial] And [Fecha final]) AND ((TimeValue([horainicio]))>TimeValue(#12/30/1899 6:0:0#)) AND ((PartesDeTrabajo.mañana)=True)) OR (((PartesDeTrabajo.fecha) Between [Fecha inicial] And [Fecha final]) AND ((TimeValue([horainicio]))>TimeValue(#12/30/1899 6:0:0#)) AND ((PartesDeTrabajo.tarde)=True)) OR (((PartesDeTrabajo.fecha) Between [Fecha inicial] And [Fecha final]) AND ((TimeValue([horainicio]))>TimeValue(#12/30/1899 21:0:0#)) AND ((PartesDeTrabajo.noche)=True)) OR (((PartesDeTrabajo.fecha) Between [Fecha inicial] And [Fecha final]) AND ((TimeValue([horainicio]))<TimeValue(#12/30/1899 7:0:0#)) AND ((PartesDeTrabajo.noche)=True))
ORDER BY operario2.nombre, PartesDeTrabajo.fecha, PartesDeTrabajo.horainicio, TimeValue([horainicio]);
__________________
Cámara Oscura
Etheria

Última edición por Koudelka; 25/06/2008 a las 06:32
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 16:54.