Problemas con usuarios y contraseña
Hola:
Tengo en la base de datos un formulario de inicio en el cual para entrar me pide el Usuario y Contraseña. Dentro de esta base hay otros formularios como por ejemplo gastos.
El problema es que cuando le doy al botón para ver los gastos me salen los gastos de todos los usuarios no solo del Usuario que he entrado con la contraseña.
hay alguna solución para que solo se vean solo los gastos del Usuario que he entrado con la contraseña.
Espero que se entienda la pregunta.
Sin más espero respuesta me harías un gran favor,Gracias y un saludo.
1 Respuesta
Creo que lo mejor es utilizar una variable pública para meter el usuario y filtrar el formulario que abres por ese dato.
En la página: http://angelessebas.es/
En el apartado supuestos y soluciones ---> Formularios ---> Abrir un formulario filtrado por el valor de un cuadro combinado.
Tienes un ejemplo de como hacerlo (la variable me da igual cogerla de un cuadro combinado o de un cuadro de texto como supongo que tendrás para introducir el usuario.
Me cuentas.
Hola angelessebas.
He ido a la pagina que comentas y la verdad no lo acabo de entender,Te explico
La base que tengo cuando la abro me abre un formulario donde me pide el Usuario y Contraseña si es correcto me abre un menú donde tengo entre otras opciones un botón de Gastos generales, Gastos pagados y Gastos pendientes cuando pico en cualquiera de los botones se habré otro formulario donde pide usuario y año pero en este formulario se muestran todos los usuario que están dados de alta, creo que lo que tendría que hacer es que pidiera solo el año del Usuario por el cual he entrado en la base no que me pida el Usuario también, Con esto lo que me encuentro es que cualquier Usuario dado de alta puede ver lo de los demás.
Este es el problema que tengo.Espero haberme explicado bien
Un saludo y gracias por contestar.
Por eso te digo lo de la variable pública. Cuando ingresas el usuario en el formulario de inicio supongo que tendrás algún botón para ver si ese usuario es correcto y abrir el menú, en ese botón es dónde tienes que dar valor a la variable pública que previamente habrás creado en un módulo de la pestaña módulos, por ejemplo la llamaré vUsu
En la pestaña módulos creas un módulo nuevo y declaras la variable vUsu como púbilca:
Public vUsu as String
En el botón que hemos comentado antes del formulario Inicio, daremos el valor a esa variable (supongo que el cuadro de texto dónde metes el usuario se llama txtUsu), sería:
vUsu=form!txtUsu.Value
Esta variable, como la hemos declarado pública, la podremos utilizar dónde y cuando queramos, por lo que la usaremos para filtrar el formulario que solo quieres que se vean los datos del usuario.
Me cuentas.
Hola angelessebas.
Perdona que te de la lata pero no se como hacer lo que me dices.
El formulario que se habré cuando le doy a entrar tiene dos botones una de cancelar y otro de entrar en el de entrar tengo este código.
Private Sub cmdAceptar_Click()
'Requiere registro de la librería "Microsoft DAO 3.6 Object Library" o
'módulo equivalente
'Declaramos las variables
cboUser = Form!cboUser.Value
Const numIntentos As Byte = 3 'Aquí definimos el número de intentos que queremos permitir
Dim vUser As Variant
Dim vPass As Variant
Dim tUser As String, tPass As String
Dim rst As Recordset
'Cogemos el valor del usuario
vUser = Me.cboUser.Value
'Cogemos el valor de la contraseña
vPass = Me.txtPass.Value
'Si no hay usuario avisamos y salimos
If IsNull(vUser) Then
MsgBox "No ha seleccionado ningún usuario", vbInformation, "AVISO"
Me.cboUser.SetFocus
Exit Sub
End If
'Si no hay contraseña avisamos y salimos
If IsNull(vPass) Then
MsgBox "No ha introducido ninguna contraseña", vbInformation, "AVISO"
Me.txtPass.SetFocus
Exit Sub
End If
'Creamos un recordset sobre la tabla TPass
Set rst = CurrentDb.OpenRecordset("TPass", dbOpenSnapshot)
'Si no hay registros avisamos y saltamos a Salida
If rst.RecordCount = 0 Then
MsgBox "No existen usuarios", vbInformation, "AVISO"
GoTo Salida
End If
'Nos movemos al primer registro e iniciamos el recorrido de registros
rst.MoveFirst
Do Until rst.EOF
'Cogemos los valores de usuario y pass de la tabla
tUser = rst.Fields(0).Value
tPass = rst.Fields(1).Value
'Si coinciden damos entrada a la BD
If tUser = vUser Then
If tPass = vPass Then
DoCmd.Close acForm, Me.Name
DoCmd.OpenForm "Panel_Control"
'Si no coinciden...
Else
'Miramos en qué número de intento estamos, que nos viene dado por
'el valor de txtContador
If Me.txtContador.Value = numIntentos Then
'Si hemos superado el número de intentos decimos adiós al usuario
MsgBox "* ENTRADA INCORRECTA *" & vbCrLf & "Has superado el número de intentos." & vbCrLf & "La aplicación se cerrará", vbCritical, "CERRAR"
DoCmd.Quit
Else
'Si aún no ha superado el número de intentos dejamos que lo pruebe de nuevo
MsgBox "La contraseña introducida no es correcta." & vbCrLf & vbCrLf & _
"Dispone de " & numIntentos - Me.txtContador.Value & _
IIf(numIntentos - Me.txtContador.Value = 1, " intento más", " intentos más"), _
vbInformation, "INCORRECTO"
Me.txtPass.SetFocus
Me.txtPass.Value = Null
'Añadimos una unidad al valor de txtContador
Me.txtContador.Value = Me.txtContador.Value + 1
GoTo Salida
End If
End If
End If
'Nos movemos al siguiente registro
rst.MoveNext
Loop
Salida:
'Cerramos conexiones y liberamos memoria
rst.Close
Set rst = Nothing
End Sub
si es correcto entra en otro formulario con todas la es opciones Gastos etc cuando doy a cualquier botón me habré otro formulario donde me salen todos los usuarios que están dados de alta al hacer clic en el usuario se habré un texBox pidiendo el año elijo el año y se habré el formulario elegido el problema es que al abrir el formulario en el cual me pide el año me salen todos los usuarios dados de alta y me encuentro que cualquier usuario dado de alta puede ver el de todos. Que tendría que modificar para que funcionara de manera que solo se pueda ver en el formulario donde pide el año saliera solo el formulario en el que se a entrado con contraseña y no todos.
Si no te es de mucha molestia y puede ser me gustaría que me explicara con detalle como hacerlo.
Soy un novato.
Un saludo y gracias por contestar.
La línea de código:
Dim vUser as Variant
La quitas y la variable vUser la declaras como pública en la pestaña módulos ---> abres uno nuevo y la declaras:
Public vUsur as Variant
Cierras el módulo y lo llamas como quieras.
El resto del código funcionara igual (antes tenías la variable declarada con Dim lo que quiere decir que la tienes disponible solamente en el módulo activo, mientras que ahora, al declararla como publica la tienes disponible en TODAS las partes de la BD
Ahora, lo único que tendrás que hacer es filtrar por el año que pides y por el usuario que tienes en la variable.
Me cuentas.
Hola angelessebas
Lo siento pero no me aclaro no se si lo he hecho bien lo que me as dicho la cuestión es que no me funciona.
Vemos en el formulario Pass que es donde pide usuario y contraseña tengo en código que te puse antes borre la línea que dijiste cree un modulo,asta aquí parece que funciona.
En el formulario de las opciones tengo en cada botón esto.
Private Sub cboAno_Change()
'Declaramos las variables
Dim miAno As String
'Dim miIdUser As Long
'Cogemos el valor del combo del año
miAno = Nz(Me.cboAno.Value, "")
'Si no hay valor avisamos y salimos
If miAno = "" Then
MsgBox "Debe indicar un año", vbExclamation, "AVISO"
Me.cboAno.SetFocus
Me.cboAno.Dropdown
Exit Sub
End If
'Cogemos el valor del usuario
miIdUser = Nz(Me.IdUsuario.Value, 0)
'Si se hace click en un campo vacío no hacemos nada
If miIdUser = 0 Then Exit Sub
'Abrimos el formulario Gastos filtrado
DoCmd.OpenForm "Cons_Gastos_Generales", , , "[IdUsuario]=" & miIdUser & " AND Year([Fecha])='" & miAno & "'"
'Cerramos el formulario actual
DoCmd.Close acForm, Me.Name
'If VarType(IdUsuario) <> vbNull Then
' DoCmd.OpenForm "Gasto", , , "[IdUsuario] = " & Me.IdUsuario
' DoCmd.Close acForm, "Usuarios", acSaveYes
' End If
End Sub
en el cual tengo que elegir usuario y contraseña de nuevo, he probado quitando el usuario para que solo se vea el año pero tanto si entro en la base con usuario 1 o 2 siempre salen los datos del primer usuario, tengo que borrar este código o que tengo que hacer, estoy hecho un lio.
Saludos.
Es que el usuario no lo tienes que volver a coger... para eso definimos la variable como pública, el usuario ya lo tienes en el vUsur desde que entraste con el usuario, sería:
"[IdUsuario]=" & vUsur & "
Me cuentas.
Me vas a perdonar pero no se que hacer.
Algo hago mal porque no me funciona, no se si darme por vencido porque no se ya por donde tirar estoy tan liando que al final y no me va a funcionar nada.
Gracias por todo, Un saludo.
Es posible que sea el modulo que este mal no he hecho nunca ninguna
veo que me queda muchísimo para aprender.
Gracias
Perdona angelessebas si soy un pesado.
Me gustaría pedirte un favor seria posible que te mandara la base para que la miraras haber donde esta el error,te lo agradecería un montón,así aprenderé un poco mas.
Sin mas un saludo y muchisimasssssssssssssss gracias por todo.
Tengo el access 2003 ¿la tienes en esta versión...?
No es la 2010
Es que no la voy a poder abrir, solo tengo el access 2003
Si me dices que es lo que te falla, quizás te pueda ayudar.
De todos modos... ¿has hecho tu el código o lo has copiado de algún sitio...? puede que el problema este ahí...
Hola.
El código lo copie desde una pagina de internet, ya te comente que soy un novato con ganas de aprender.
Un saludo.
Lo que pasa es que al utilizar códigos que no se entienden... luego es muy difícil acoplar modificaciones.
Lo que tienes que hacer es pasar la variable VUsur de un formulario a otro, es decir, dar valor a la variable y que ese valor te sirva durante todo el proceso.
En la página:
http://angelessebas.es/
En el apartados supuestos y soluciones ---> formularios ---> pasar datos de un formulario a otro
Tengo un ejemplo de lo que te quiero decir, échalo un vistazo y me cuentas.
- Compartir respuesta