none
Impedir registrar mas de tres veces RRS feed

  • Pregunta

  • Hola amigos: alguien me podria ayudar con el siguiente problema:

    Idea: tengo una tabla donde se registra el ingreso de personas en una determinada fecha, estas personas visitan a su familiar, mi idea es segun esto, que este paciente solo pueda recibir tres visitas al dia, esto quiere decir que si una cuarta persona intenta ingresar el sistema impida ese registro diciendo, que esta impedida de ingresar porque el paciente ya tiene en el dia tres visitantes ingresados y por capacidad de atencion ya no se puede registrar su ingreso...

    porfis alguien puede ayudarme.

    • Cambiado Enrique M. Montejo jueves, 30 de octubre de 2014 7:39 Pregunta relacionada con el acceso a datos.
    lunes, 27 de octubre de 2014 18:29

Todas las respuestas

  • Hola:

     Me imagino que estas usando una BD, sea cual sea cual sea el motor de Bd que estés usando, te recomiendo que:

    1. Crea una columna del tipo int a la cual llames Visitas y otra llamada FechaVisita y esta sera del tipo Date

    2. Crea una función de actualización al campo Visita pasandole un parámetro del tipo de Date, tu función debe de ser capaz de validar el contenido del campo FechaVisita si es igual a la fecha del parámetro entonces haces un select al campo Visitas y al resultado obtenido le sumas uno, si este valor obtenido es superior o igual a 3 entonces regresas un mensaje de aviso, si el valor obtenido es menor a tres entonces hacer el update enviando el valor obtenido al campo Visitas. Si la fecha del parámetro es diferente a la contenida en el campo FechaVisita entonces haces un update al campo FechaVisita y al campo Visitas pasandole el valor del parámetro y el valor 1 respectivamente...

     Bueno a grandes razgos esto es lo que haría.


    Saludos desde Monterrey, Nuevo León, México!!!

    lunes, 27 de octubre de 2014 18:40
  •   conectar()
                  Dim cadena As String = "SELECT ID_DetRegistroDeVisita, dtm_FecVisita, ID_RegistroDeVisitas, ID_KardexDeVisita, ID_KardexDeInterno, hra_Ingreso, lng_NumCorrelativo FROM dbo.tbl_DetRegistroDeVisitas WHERE (dtm_FecVisita = @Param1) AND (ID_KardexDeInterno = @Param3)"
                    Dim cmd As New SqlCommand(cadena, CON)
                    cmd.Parameters.AddWithValue("@Param1", DateTimePicker1.Text)
                    cmd.Parameters.AddWithValue("@Param2", TextBox1.Text)
                    Dim contador As Integer
                    contador = cadena.Count
                    Dim cantidad As Integer = CInt(cmd.ExecuteScalar())
                    MessageBox.Show(String.Format("Nro registros: {0}", cantidad)) .....asi tengo mi codigo pero no se que estoy haciendo mal...porfis dame una ayudadita.
    martes, 28 de octubre de 2014 14:27
  • Hola Anabelen no puedes hacer un ExecuteScalar porque la consulta te devuelve varios campos, no te devuelve uno solo, veo que en ese query devuelves hra_Ingreso y un poco de ID, lo único que deberías devolver es el numero de visitas para ese día, suponiendo que tu tabla tiene los campos (FechaVisita, NumVisitas) lo que tu query debe hacer es verificar que ese NumVisitas sea menor o igual a 3 cuando sea 3 ya no debes dejar que nadie visite, obviamente tu tabla debe tener el IdPaciente para saber a que paciente le estan haciendo las visitas. tu query quedaria asì

    SELECT NumVisitas from TuTabla Where IdPaciente = @Param1 and FechaVisita = @Param2 

    Ahi si puedes hacer un ExecuteScalar porque te devuelve un valor, luego por codigo verifica si es menor que 3 puede visitar sino no lo dejas.

    Salu2


    martes, 28 de octubre de 2014 14:44
  •   Try
                    conectar()
                    Dim cadena As String = "SELECT PERCENT ID_DetRegistroDeVisita, ID_RegistroDeVisitas, ID_KardexDeVisita, ID_KardexDeInterno, hra_Ingreso, lng_NumCorrelativo FROM dbo.tbl_DetRegistroDeVisitas WHERE (dtm_FecVisita = @Param4) AND (ID_KardexDeInterno = @Param2)"

                    Dim cmd As New SqlCommand(cadena, CON)
                    cmd.Parameters.AddWithValue("@Param4", DateTimePicker1.Text)
                    cmd.Parameters.AddWithValue("@Param2", TextBox1.Text)
                    Dim contador As Integer
                    contador = cadena.Count

                    Label1.Text = contador

                Catch

                    MsgBox("No se Logro Acceder a la Tabla 'Clientes',Comuniquese con el Administrador del Sistema", MsgBoxStyle.Critical, "Mensaje de Validacin")

                End Try

    ahora con este codigo se supone que lo he mejorado pero me devuelve 232 registros y no 3 registros como esta en la base de datos.............mmmmmm no se que estoy haciendo mal, ayudenme porfavor.

    martes, 28 de octubre de 2014 14:55
  •  conectar()
                Dim cadena As String = "SELECT dtm_FecVisita, ID_RegistroDeVisitas, ID_KardexDeVisita, ID_KardexDeInterno FROM dbo.tbl_DetRegistroDeVisitas WHERE (ID_KardexDeInterno = @Param1) AND (dtm_FecVisita = @Param2)"

                Dim cmd As New SqlCommand(cadena, CON)
                cmd.Parameters.AddWithValue("@Param1", TextBox1.Text)
                cmd.Parameters.AddWithValue("@Param2", DateTimePicker1.Text)


                Dim total As Integer = 0
                total = cmd.ExecuteScalar ' convertir el tipo de datos a Integer  
                ' Mostrar el resultado para el Total de Clientes  
                MsgBox("El total de Clientes es :" & total, MsgBoxStyle.Information)

    amigo aqui es donde me aparece el error: no logro que execute scalar me devuelva su valor...

    martes, 28 de octubre de 2014 15:37
  • No puedes hacer el ExecuteScalar porque la consulta te devuelve mas de un valor, para que uses el excalar tiene que devolverte un solo valor algo como

    Select Count(Id) from TuTabla 

    Select MAX(Id) from tuTabla

    solo las consultas que te devuelven un valor la puedes hacer con ExecuteScalar

    martes, 28 de octubre de 2014 15:47
  • entonces para esa consulta que puedo hacer; porque mi idea es que me devuelva la cantidad si en determinado dia ingresaron N personas a visitar a un interno, para luego impedir si ya hay mas de tres los siguientes ya no puedan ingresar...
    martes, 28 de octubre de 2014 16:03
  • y como se llama el campo que te devuelve la cantidad de personas que fueron a visitarla tal día? yo veo que en tu consulta traes la fecha de visita, supongo que la necesitas para otra cosa, Traes un Id_RegistroVisitas, no creo que ese Id guarde la cantidad de visitas a un paciente, ahora si por cada persona que visita a un paciente guardas el Id_RegistrodeVisita entonces tu consulta deberia tener un COUNT(ID_RegistroDeVisita) as Cantidad, es lo unico que necesitas para impedir que más de 2 personas visiten a tu paciente, si necesitas otros campos entonces utiliza ExecuteReader

    dim Reader as SqlDataReader

    Reader = ExecuteReader(cmd)

    If Reader.Read()

    Cantidad = CInt(Reader("Cantidad").toString())

    end if

    Reader.Close()

    msgBox("El total de clientes es " & Cantidad)

    Salu2

    martes, 28 de octubre de 2014 16:18
  • Hola amigo ablanco:

     conectar()
            Dim cadena As String = "SELECT dtm_FecVisita, ID_RegistroDeVisitas, ID_KardexDeVisita, ID_KardexDeInterno FROM dbo.tbl_DetRegistroDeVisitas WHERE (ID_KardexDeInterno = @Param1) AND (dtm_FecVisita = @Param2)"
            'Dim da As SqlDataAdapter = New SqlDataAdapter(cadena, CON)
            Dim cmd As New SqlCommand(cadena, CON)
            cmd.Parameters.AddWithValue("@Param1", TextBox1.Text)
            cmd.Parameters.AddWithValue("@Param2", DateTimePicker1.Text)

            Dim Reader As SqlDataReader

            Reader = ExecuteReader(cmd)

            If Reader.Read() Then

                Cantidad = CInt(Reader("Cantidad").ToString())

            End If

            Reader.Close()

            MsgBox("El total de clientes es " & Cantidad)

    utilice tu codigo asi es lo que tengo, pero no funciona...

    en cantidad me gustaria que aparesca el total de ingresados (al ejecutar la consulta)

    luego realizar un if para poder restringir la visita si se exceso mas de tres...

    no se si me dejo explicar amigo.

    martes, 28 de octubre de 2014 16:36
  • Hola Anabelen, te falto reemplazar en tu consulta el ID_RegistroDeVisitas por "COUNT(ID_RegistroDeVisitas) as Cantidad", yo supongo que por cada visita que le hacen a un paciente lo guardas en la tabla DetRegistroVisitas, es asi?? si es así por cada visita genera un ID_RegistroDeVisitas y la validacion se hace por fecha y por Id del Paciente, o tienes otro campo donde guardes el numero de visitas? 

    por ahora solo reemplaza "COUNT(ID_RegistroDeVisitas) as Cantidad" en vez de "ID_RegistroDeVisitas"

    Salu2

    martes, 28 de octubre de 2014 16:42