Access, seleccionar registros en formularios

Estoy haciendo un pequeño aplicativo access, tengo un login con control de usuarios y este llama a un formulario, quiero que el formulario muestre solo aquellos registros que creo el usuario, ya tengo creada una variable global en la que paso el usuario del login al formulario, pero al entrar a este último, me recupera todos los registros de la Base de Datos. Help please!

Respuesta
1

Si en la tabla que sea, origen del formulario tienes algún campo que identifique al usuario, no tienes problema. Supongamos que en un formulario Login tienes un control donde escribes o eliges el usuario. En sus propiedades-eventos-después de actualizar puedes crear un procedimiento de evento y entre Private Sub... y End Sub escribir

docmd.openform"nombredelformularioquequieresabrir",,,"usuario='" & me.nombredelcontroldondeescribesoeliges & "'"

Así, si escribes o eliges un usuario en el control que sea del formulario Login y pulses enter te abrirá el otro formulario con sólo los registros que tengan como usuario, ese que has escrito o elegido.

Si el control donde escribes o eliges el valor fuera numérico, tipo Idusuario, la instrucción sería

...."Idusuario= " & me.nombredel.... & ""

Es decir, tienes que tener algo que diferencie unos registros de otros. Y lo pones en el criterio.

Mil gracias Icue, ya me funcionó, ahora solo tengo problema cuando ese usuario no tiene todavía ningún registro, es decir, cuando tiene que dar de alta el primero, es solucionable haciendo yo el primero, pero no sé si tiene solución rápida y fácil.

Saludos

Puedes hacerlo de varias formas, por ejemplo

1º En el evento Despues de actualizar del cuadro de texto usuario del form Login puedes poner

If dcount("usuario","nombretablaorigendelform","usuario='" & me.usuario & "'")>=1 then

docmd.openform"nombredelformularioquequieresabrir",,,"usuario='" & me.nombredelcontroldondeescribesoeliges & "'"

Else

Msgbox"Te quedas con las ganas, no hay registros", vbokonly,"Se abrirá el formulario para añadir en un registro nuevo"

DoCmd.OpenForm "nombredelformulario", , , , acFormAdd

end if

Me explico, que antes de hacer nada cuente si hay registros en la tabla con ese usuario. Si lo hay(>=1), entones que te abra el formulario con esos registros y si no que te muestre el mensaje y que te abra el formulario en un registro nuevo.

2º Dejas la instrucción como estaba en el formulario Login y en el evento Al abrir del otro formulario pon

If Me.Recordset.BOF And Me.Recordset.EOF Then
MsgBox "No hay registros"
DoCmd.Close
End If

Es decir que si al abrir no hay registros, te muestra el mensaje y cierra el formulario( o lo que que le digas que debe hacer)

Genial!!!! ya la última, lo prometo, el campo DNI para mi tabla es obligatorio, y al abrir con el open form add, me da el error 3314, y me dice que de un valor a este campo, a pesar de que no he tenido oportunidad aún de escribir nada. Mil gracias de antemano por tus rápidas y acertadas respuestas

Eso es porque lo tienes puesto como requerido=si. Personalmente, es una de las cosas que no entiendo porque Microsoft la pone, bueno, si, para justificar que compres un office nuevo. Pasa como con los detergentes, el último es el mejor, aunque los anteriores eran, en su tiempo insuperables.

Mira, prefiero ponerlo como no requerido, y supongamos que en el formulario pones un botón Cerrar formulario(anulando el botón cerrar del formulario, el aspa) y en sus propiedades-eventos pones

If isnull([dni]) then

Msgbox"Elcampo DNI no puede quedar vacío"

Docmd. Cancelevent

Dni. Setfocus

else

docmd.close

end if

De todas formas. Si quieres, repito, si quieres, mándame un mensaje(sólo el mensaje) a [email protected] y te mando un ejemplo completo. Si lo haces, en el asunto del mensaje pon tu alias Mari Caballero, ya que si no sé quien me escribe ni los abro.

1 respuesta más de otro experto

Respuesta
1

Mari: En la tabla que contenga los datos de ese Formulario que tienes, entre los campos supongo que tendrás uno que se llame UsuDatos o algo así. Evidentemente si no lo tienes, debes crearlo y grabarlo con el Nombre o el Id del Usuario.

Si eso lo tienes, entre otras soluciones, puedes programar el Evento Form_Load() con algo así.

Suponiendo además que el Usuario Actual lo tienes en un TexBox llamado TxtUsuActual y que es de tipo Texto

Private Sub Form_Load()
Me.Filter = "UsuDatos = '" & Me.TxtUsuActual & "'"
Me.FilterOn = True
End Sub

Un saludo >> Jacinto

Mil gracias Jacinto, ya me funcionó, ahora solo tengo problema cuando ese usuario no tiene todavía ningún registro, es decir, cuando tiene que dar de alta el primero, es solucionable haciendo yo el primero, pero no sé si tiene solución rápida y fácil.

Saludos

Mari: Me disponía a ampliarte mi respuesta, pero por lo que veo ya lo has resuelto con las instrucciones de Icue a las que poco o nada tengo que añadir. Un saludo >> Jacinto

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas