Autor Tema: Problemas con una Consulta SQL  (Leído 4155 veces)

0 Usuarios y 1 Visitante están viendo este tema.

ADONAIRAFA

  • Gigabyte
  • ****
  • Mensajes: 291
  • Reputación: +37/-1
  • Que bien se siente al terminar un programa !!!
    • Ver Perfil
Problemas con una Consulta SQL
« en: Enero 19, 2012, 09:19:36 pm »
Buenas Noches a Todos !!! ;D

Tengo un pequeño problema con lo que debería ser una "sencilla" consulta SQL.
Estoy diseñando un pequeño programa para mi trabajo (en el cual laboramos por turnos de guardia), el mismo lo está basado en Access (aunque yo trabajo con Firebird, pero como se trata de muy pocos registro a llevar... me decidí por Access).
El programa ingresa en la BD un número determinado de registros (personal que realizará las guardias), y luego se le asignarán los turnos a cada persona (estos turnos son de Lunes a Viernes). De paso, a cada persona, una vez registrada, el programa le ha asignado automáticamente un "Indicador" (algo parecido a un "localizador", lo que hacen las líneas aéreas cuando realizan una reservación a un pasajero determinado), hasta ahí todo se realiza como se requiere, sin problemas.

He aquí la tabla que corresponde al registro del personal:



Todos los campos son de tipo String a excepción del "Fecha_Vacaciones", que es de tipo Date.

A la hora de asignar los turnos de trabajo, el programa obvia todos los registros cuyo campo "Status" sea diferente de 'Disponible', Todo marcha "sobre ruedas" !!! ;D

Ahora he aquí la tabla donde se reflejan los turnos asignados:



Pueden ver los campos "Fecha1" y "Fecha2" que corresponden a un período de 5 días en las fechas registradas (que corresponden de Lunes a Viernes como menciné antes).

Bien, supongamos por ejemplo, que se desea saber quien está 'De Guardia' el día '01/02/2012', y aquí es donde viene el problema, ya que necesito que me devuelva el 'Indicador' correspondiente a la persona que va estar laborando ese día, pero me los devuelve vacío.

He aquí el código donde realicé la consulta fallida:

Código: (VB) [Seleccionar]
Private Sub cmdConsulta_Click()
        Dim sql1 As String
        Dim sql2 As String
        Dim rcs1 As New ADODB.Recordset
        Dim rcs2 As New ADODB.Recordset
        Dim indic As String
        '//
        sql1 = "SELECT * FROM Rol_Guardia " & _
                "WHERE Fecha1 < " & dtpConsulta.Value & " AND Fecha2 > " & dtpConsulta.Value
        With rcs1
                .Open sql1, conex, 1, 2
                indic = .Fields!Indicador
                .Close
        End With
        Set rcs1 = Nothing
        '//
        sql2 = "SELECT Personal_Disponible.Indicador, Personal_Disponible.Nombre, " & _
                "Personal_Disponible.Apellido FROM Personal_Disponible " & _
                "WHERE Idicador = '" & indic & "'"
        With rcs2
                .Open sql2, conex, 1, 4
                MsgBox "De Guardia el día " & dtpConsulta + vbCrLf + vbCrLf & .Fields!Nombre & _
                " " & .Fields!Apellido + vbCrLf & "Indicador: " & .Fields!Indicador, vbInformation + _
                vbOKOnly, "Personal de Guardia..."
                .Close
        End With
        Set rcs2 = Nothing
End Sub

La fecha a consultar la selecciono de un DTPicker llamado dtpConsulta.

Les agradezco la ayuda de antemano, estuve indagando por ahí, y lo único que conseguí fue el trabajo con Fechas en SQL usando BETWEEN, pero en este caso, no encontarba como adaptarlo, vuelvo repito, porque los períodos son de Lunes-Viernes y ahí no encontraba como localizar una fecha determinada.
Creo que la explicación es más larga que el problema, pero...!!! :-[

Saludos !!!
Manuel F. Borrego S. 8)
Barcelona, Venezuela.
Hay dos tipos de personas: Los que siguen un camino... y los que hacen camino al avanzar !!!

seba123neo

  • Terabyte
  • *****
  • Mensajes: 763
  • Reputación: +88/-5
    • Ver Perfil
Re:Problemas con una Consulta SQL
« Respuesta #1 en: Enero 19, 2012, 09:44:30 pm »
es simplemente una busqueda por rango de fechas...aca tenes un post donde se hablo de eso:

Problemas con devolución de registros en búsqueda por consulta

ADONAIRAFA

  • Gigabyte
  • ****
  • Mensajes: 291
  • Reputación: +37/-1
  • Que bien se siente al terminar un programa !!!
    • Ver Perfil
Re:Problemas con una Consulta SQL
« Respuesta #2 en: Enero 19, 2012, 11:04:09 pm »
Estimado Seba...

Si es por rango de fechas, pero fíjate en lo siguiente... El usuario, através de DTPicker, da la fecha para iniciar la consulta, no da los rangos donde se debe buscar. Cada registro tiene 2 campos tipo Date (el primero corresponde al inferior -Lunes- y el segundo al superior -Viernes-), o sea, como la consulta buscaría los rangos, lo que yo traté de hacer traves de la consulta, plánteándolo como la Fecha dada mayor que la fecha del campo "Fecha1" (límite inferior) y la fecha dada menor que "Fecha2" (límite superior). Para usar BETWEEN, tengo que conocer dichos rangos de antemano, pero se supone que la consulta ubuque dichos rangos (Lunes-Viernes en fechas por supuesto), no se si me expliqué bien.

Bueno, Saludos !!! ;D
Hay dos tipos de personas: Los que siguen un camino... y los que hacen camino al avanzar !!!

seba123neo

  • Terabyte
  • *****
  • Mensajes: 763
  • Reputación: +88/-5
    • Ver Perfil
Re:Problemas con una Consulta SQL
« Respuesta #3 en: Enero 20, 2012, 12:32:48 am »
lo que se me ocurre y funciona es que busques de esta forma, por ejemplo:

este ejemplo esta en sql server, he creado esos registros que vos mostras para probalo.

Código: (sql) [Seleccionar]
select * from prueba where '24/01/2012'>=fecha1 and '24/01/2012'<=fecha2
fijate que es lo mismo, solo que primero la condicion busca tu fecha y no la del campo, si invertis eso la busqueda es distinta.

otra forma, es que uses siempre la fecha1, y en la segunda condicion le agreges 4 dias, (ya que por lo que veo siempre la fecha2 es igual a fecha1 + 4 dias.)

Código: (sql) [Seleccionar]
select * from prueba where '24/01/2012'>=fecha1 and '24/01/2012'<=dateadd(DAY,4,fecha1)
saludos.

ADONAIRAFA

  • Gigabyte
  • ****
  • Mensajes: 291
  • Reputación: +37/-1
  • Que bien se siente al terminar un programa !!!
    • Ver Perfil
Re:Problemas con una Consulta SQL
« Respuesta #4 en: Enero 22, 2012, 04:16:33 am »
Saludos Seba !!!

Bueno mi estimado, tampoco resultó de esa forma, lo que hice entonces fue, agregarle un campo llamado 'Semana_Nro' a la Tabla "Rol_Guardia", y en el código, previo a la consulta, con una sencilla función:

Código: (VB) [Seleccionar]
Public Function SemanaNumero(fecha As Date) As Integer
        Dim semana As Integer
        '//
        semana = DatePart("ww", fecha, vbMonday, vbFirstFourDays)
        SemanaNumero = semana
End Function

A esta función al pasarle el parámetro 'fecha', obtengo el nro de la semana del año correspondiente a dicha fecha. Con este valor realizo la consulta y logro el resultado deseado, aquí está el código cuando inicié este tema, pero ya modificado:

Código: (VB) [Seleccionar]
Private Sub cmdConsulta_Click()
        Dim sql1 As String
        Dim sql2 As String
        Dim rcs1 As New ADODB.Recordset
        Dim rcs2 As New ADODB.Recordset
        Dim fecha As Date
        Dim semana As Integer
        Dim indic As String
        '//
        fecha = dtpConsulta.Value
        semana = SemanaNumero(fecha)
        sql1 = "SELECT * FROM Rol_Guardia " & _
                    "WHERE Semana_Nro = " & semana
        With rcs1
                .Open sql1, conex, 1, 4
                indic = .Fields(1)
                .Close
        End With
        Set rcs1 = Nothing
        '//
        sql2 = "SELECT * FROM Personal_Disponible WHERE Indicador = '" & indic & "'"
        With rcs2
                .Open sql2, conex, 1, 4
                MsgBox "De Guardia el día " & dtpConsulta & vbCrLf + vbCrLf & .Fields!Nombre & _
                " " & .Fields!Apellido & vbCrLf & "Indicador: " & .Fields!Indicador, vbInformation + _
                vbOKOnly, "Personal de Guardia..."
                .Close
        End With
        Set rcs2 = Nothing
End Sub

Saludos y gracias !!!
Hay dos tipos de personas: Los que siguen un camino... y los que hacen camino al avanzar !!!