none
Ayuda con leer registros RRS feed

  • Pregunta

  • holas leandro, bueno tu siempre contestaste mis preguntas hoy quiero molestarte con otra pregunta o alos q me puedan ayudar, estoy realizando un control personal entradas y salidas, la estructura de mis tablas:

    horario                              
    IdHorario
    NombreHorario
    HoraEntrada
    HoraSalida

    horariopersonal                 
    IdHorarioPersonal
    CIPersonal
    IdHorario
    FechaInicio
    FechaFinal

    controlacceso
    IdAcceso
    CIpersonal
    Fecha
    HoraEntrada
    HoraSalida
    HorasTrabajadas

     

    Este  mi codogo para leer el horario del empleado:

    Public Function consulta_horario_empleado(ByVal ci As String, ByVal hora As TimeSpan) As TimeSpan
       Dim hi As TimeSpan
       Dim min_retraso As TimeSpan

            Dim connect_db As New MySqlConnection(connectionString)
            Dim sql As String = "SELECT * FROM horariopersonal inner join horario on horariopersonal.IdHorario=horario.IdHorario where CIPersonal='" & ci & "'"
            Try
                connect_db.Open()
                Dim mycommand As New MySqlCommand(sql, connect_db)
                Dim rd As MySqlDataReader = mycommand.ExecuteReader()
               
                rd.Read()
                hi = rd.GetTimeSpan("HoraInicio")
               

                rd.Close()
                connect_db.Close()
            Catch myError As Exception
                MessageBox.Show(myError.ToString())
            End Try
            If hora > hi Then
                min_retraso = hora - hi
            End If
            Return min_retraso

        End Function

    es te funcion lee el horario y me debuelve min_retraso la resta de su horario de entrada - la hora actual a partir de esto calculo todo para registrar, ahora el problema esta en q un empleado tiene dos tipos de horario en el dia :

    IdHorarioPersonal      CIPersonal        IdHorario   FechaInicio    FechaFinal
                 1                    1000001                 4     2010-09-06     2010-10-06
                 2                    1000001                 5     2010-09-06     2010-10-06

    Idhorario 4= entrada 08:00:00 salida 12:00:00
    IdHorario 5= entrada 14:00:00 salida 18:00:00

    mi funcion solo me lee el primer horario (la primera entrada) no asi la segunda entrada despues de registrar la entrada y salida del primer horario( IdHorario 4) le puse un do while asi:

    Do While rd.Read()
                    hi = rd.GetTimeSpan("HoraInicio")
                 
                Loop

     pero nada,  lo llene a un listbox y me lee los dos horarios

    pero yo quiero hacer uso de estos en una variable como el de arriba (h)i pero q me genere los q sean necesarios de pendiendo de los horarios q tenga un empleado, al dia puede tener mas de dos horarios un empleado y solo llege a registrar el primer horario, espero haberme explicado bien, espero tu respuesta leandro o el q me pueda ayudar, gracias

    • Cambiado Enrique M. Montejo sábado, 30 de junio de 2012 16:55 acceso a datos (De:Lenguaje VB.NET)
    lunes, 6 de septiembre de 2010 15:33

Todas las respuestas

  • hola

    el tema es que la query devuelve dos registros, pero en el codigo solo haces un solo rd.Read()

    para qeu funcione deberias usar el While, y recorrer cada registro, como bien has realizado en las pruebas

    el tema es que en una sola variable sera dificil, pero en una lista si podrias, algo como esto

    Public Function consulta_horario_empleado(ByVal ci As String, ByVal hora As TimeSpan) As List(Of TimeSpan)

    Dim hi As New List(Of TimeSpan)
    Dim min_retraso As TimeSpan

        Dim connect_db As New MySqlConnection(connectionString)
        Dim sql As String = "SELECT * FROM horariopersonal inner join horario on horariopersonal.IdHorario=horario.IdHorario where CIPersonal= ?ci"
        Try
            connect_db.Open()
           
            Dim mycommand As New MySqlCommand(sql, connect_db)
            mycommand.Parameters.AddWithValue("?ci", ci)
           
            Dim rd As MySqlDataReader = mycommand.ExecuteReader()
          
            Do While rd.Read()
                hi.Add(rd.GetTimeSpan("HoraInicio"))
            Loop


            rd.Close()
            connect_db.Close()
        Catch myError As Exception
            MessageBox.Show(myError.ToString())
        End Try

        Return hi

    End Function

     

    lo que no se si puedas hacer directamente es esta operacion

        If hora > hi Then
            min_retraso = hora - hi
        End If
        Return min_retraso

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina
    lunes, 6 de septiembre de 2010 16:05
  • gracias por responder boy a probarlo,luego escribo.
    lunes, 6 de septiembre de 2010 17:10
  • uf... no logro solucionar mi problema, no entiendo muy bien lo de las listas, supongo q es como llenar a un control por ejemplo un listbox, y luego tener q agarrar cada intem o no?, talves exista otra opcion, noce, alguien q aya echo este tipo de sistema?
    martes, 7 de septiembre de 2010 17:02