none
como crear un procedimiento almacenado RRS feed

  • Pregunta

  • hola

    quisiera saber como crear un procedimiento para no permitir que un usuario ingrese dos veces al sistema es para un sistema de votación gracias si me colaboran ya ingresa pero no se como restringir la segunda entrada...

    jueves, 5 de mayo de 2016 23:20

Respuestas

  • Hola,

    Pero mediante SQL no vas a poder restringir el acceso al sistema.

    Tienes que tener un campo de un tabla donde guardes el último acceso del usuario a la aplicación y mediante código, si estás usando C#, Vb.net u otro validar si la fecha que está guardada corresponde a la fecha actual, y si es así  no permitir el inicio de sesión.

    Saludos.


    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI

    • Propuesto como respuesta José De Alva lunes, 9 de mayo de 2016 4:01
    • Marcado como respuesta José De Alva martes, 17 de mayo de 2016 22:47
    jueves, 5 de mayo de 2016 23:46
  • @yoyasota

    Para poder controlar el acceso de usuario para que no ingrese dos veces al sistema debes poner un campo Acceso en tu tabla Usuarios en el cual puede ser de tipo char donde puedes poner cuando logueo una S y cuando sale del sistema una N y validar mediante código algo como esto.

    Private Sub cmdAceptar_Click()
      Dim objUsuario As New ClsUsuario
      mstrUsuarioId = txtUsuario.Text
      mstrIdFacultad = dtcFacultad.BoundText
      Op = objUsuario.VerificarUsuario(txtUsuario.Text, txtClave.Text)
      If Op = -1 Then
        MsgBox "Usuario no autorizado a entrar en el sistema, por favor comuniquese con el Administrador del Sistema", vbInformation, App.title
        txtUsuario.Text = ""
        txtClave.Text = ""
        txtUsuario.SetFocus
      ElseIf Op = 0 Then
        MsgBox "Password incorrecto, por favor reintente", vbInformation, App.title
        txtClave.Text = ""
        txtClave.SetFocus
      ElseIf Op = 2 Then
        MsgBox "Este usuario ya se encuentra logeado en el sistema", vbInformation, App.title
        txtUsuario.Text = ""
        txtClave.Text = ""
        txtUsuario.SetFocus
      Else
        'acceso al sistema
        'UpdEstadoAcceso mstrUsuarioId, "S"


    Pedro Ávila
    "El hombre sabio querrá estar siempre con quien sea mejor que él."
    Lima - Perú


    • Editado Pedro Ávila viernes, 6 de mayo de 2016 21:25 .....
    • Propuesto como respuesta José De Alva lunes, 9 de mayo de 2016 4:01
    • Marcado como respuesta José De Alva martes, 17 de mayo de 2016 22:47
    viernes, 6 de mayo de 2016 21:25
  • Hola,

    Supongo que lo que intentas es que un usuario no vote dos veces en la misma encuesta independientemente de si puede acceder o no al sistema donde se gestionan las encuestas (por ejemplo para que pueda ver como se desarrolla la votación una vez ya ha votado).

    Vamos a suponer un escenario en donde los usuarios se identifican mediante un sistema propio en el que hay una tabla de usuarios registrados con sus datos y un identificador unívoco.

    Básicamente el procedimiento quedaría así:

    CREATE PROCEDURE votaEncuesta
     @id_Usuario nchar(10),
     @voto nchar(2)
    AS
    
    DECLARE @repeticion int
    
    SET @repeticion = 0
    
    IF NOT EXISTS(SELECT id_Usuario FROM tablaEncuesta WHERE id_Usuario = @id_Usuario)
    	BEGIN
    		INSERT INTO tablaEncuesta(id_Usuario, voto) VALUES (@id_Usuario, @voto)
    	END
    ELSE
    	BEGIN
    		SET @repeticion = 1
    	END
    	
    	RETURN @repeticion
    GO

    La variable repetición la he incluido para que se pueda gestionar la respuesta del procedimiento, pero no es estrictamente necesaria, simplemente el procedimiento no inserta el voto de un usuario que ya ha votado.

    Espero que te sirva.


    • Editado Justo Pla (Tala'ssa) sábado, 7 de mayo de 2016 16:35 Ortografía y aclaracion de matices
    • Propuesto como respuesta José De Alva lunes, 9 de mayo de 2016 4:01
    • Marcado como respuesta José De Alva martes, 17 de mayo de 2016 22:47
    sábado, 7 de mayo de 2016 16:33

Todas las respuestas

  • Hola,

    Pero mediante SQL no vas a poder restringir el acceso al sistema.

    Tienes que tener un campo de un tabla donde guardes el último acceso del usuario a la aplicación y mediante código, si estás usando C#, Vb.net u otro validar si la fecha que está guardada corresponde a la fecha actual, y si es así  no permitir el inicio de sesión.

    Saludos.


    JC NaupaCrispín
    Lima - Perú

    La magia no existe, la programación SI

    • Propuesto como respuesta José De Alva lunes, 9 de mayo de 2016 4:01
    • Marcado como respuesta José De Alva martes, 17 de mayo de 2016 22:47
    jueves, 5 de mayo de 2016 23:46
  • @yoyasota

    Para poder controlar el acceso de usuario para que no ingrese dos veces al sistema debes poner un campo Acceso en tu tabla Usuarios en el cual puede ser de tipo char donde puedes poner cuando logueo una S y cuando sale del sistema una N y validar mediante código algo como esto.

    Private Sub cmdAceptar_Click()
      Dim objUsuario As New ClsUsuario
      mstrUsuarioId = txtUsuario.Text
      mstrIdFacultad = dtcFacultad.BoundText
      Op = objUsuario.VerificarUsuario(txtUsuario.Text, txtClave.Text)
      If Op = -1 Then
        MsgBox "Usuario no autorizado a entrar en el sistema, por favor comuniquese con el Administrador del Sistema", vbInformation, App.title
        txtUsuario.Text = ""
        txtClave.Text = ""
        txtUsuario.SetFocus
      ElseIf Op = 0 Then
        MsgBox "Password incorrecto, por favor reintente", vbInformation, App.title
        txtClave.Text = ""
        txtClave.SetFocus
      ElseIf Op = 2 Then
        MsgBox "Este usuario ya se encuentra logeado en el sistema", vbInformation, App.title
        txtUsuario.Text = ""
        txtClave.Text = ""
        txtUsuario.SetFocus
      Else
        'acceso al sistema
        'UpdEstadoAcceso mstrUsuarioId, "S"


    Pedro Ávila
    "El hombre sabio querrá estar siempre con quien sea mejor que él."
    Lima - Perú


    • Editado Pedro Ávila viernes, 6 de mayo de 2016 21:25 .....
    • Propuesto como respuesta José De Alva lunes, 9 de mayo de 2016 4:01
    • Marcado como respuesta José De Alva martes, 17 de mayo de 2016 22:47
    viernes, 6 de mayo de 2016 21:25
  • Hola,

    Supongo que lo que intentas es que un usuario no vote dos veces en la misma encuesta independientemente de si puede acceder o no al sistema donde se gestionan las encuestas (por ejemplo para que pueda ver como se desarrolla la votación una vez ya ha votado).

    Vamos a suponer un escenario en donde los usuarios se identifican mediante un sistema propio en el que hay una tabla de usuarios registrados con sus datos y un identificador unívoco.

    Básicamente el procedimiento quedaría así:

    CREATE PROCEDURE votaEncuesta
     @id_Usuario nchar(10),
     @voto nchar(2)
    AS
    
    DECLARE @repeticion int
    
    SET @repeticion = 0
    
    IF NOT EXISTS(SELECT id_Usuario FROM tablaEncuesta WHERE id_Usuario = @id_Usuario)
    	BEGIN
    		INSERT INTO tablaEncuesta(id_Usuario, voto) VALUES (@id_Usuario, @voto)
    	END
    ELSE
    	BEGIN
    		SET @repeticion = 1
    	END
    	
    	RETURN @repeticion
    GO

    La variable repetición la he incluido para que se pueda gestionar la respuesta del procedimiento, pero no es estrictamente necesaria, simplemente el procedimiento no inserta el voto de un usuario que ya ha votado.

    Espero que te sirva.


    • Editado Justo Pla (Tala'ssa) sábado, 7 de mayo de 2016 16:35 Ortografía y aclaracion de matices
    • Propuesto como respuesta José De Alva lunes, 9 de mayo de 2016 4:01
    • Marcado como respuesta José De Alva martes, 17 de mayo de 2016 22:47
    sábado, 7 de mayo de 2016 16:33