Modificar registro unicamente si lo ha creado el usuario

Estoy desarrollando una base de datos para una cadena de producción, la idea es que cada trabajador tenga un usuario y así saber las unidades que hace en un día, el tiempo que tarda, y de esa manera poder calcular la prima que le corresponde.

Hasta aqui genial.

El problema aparece cuando quiero restringir lo que los trabajadores pueden ver y modificar.

Mi idea es que mediante el formulario de login, el trabajador solo pueda modificar los registros que el ha creado.

De manera que por ejemplo, yo entro como AAA123, se crea el numero de registro 1, pongo la hora que empiezo, cierro y me voy a trabajar. A continuación viene el trabajador BBB456, entra, se crea el numero de registro 2, pone la hora que empieza, cierra y se va a trabajar. Mas tarde, yo voy a poner la hora que termino el trabajo y la idea es que me encuentre que solo puedo ver y modificar el formulario con registro 1 o crear uno nuevo que sera el registro 3.

1 respuesta

Respuesta
2

Pues muy fácil, pero has de hacer varias cosas:

1º/ en tus tablas añade un campo para registrar el usuario que crea el registro (por ej.: Usuario)

2º/ desde tu formulario de login, deberás guardar en una variable pública, en una tabla o incluso en un formulario oculto el usuario activo.

3º/ en tus formularios cada vez que crees un registro nuevo, le pones a ese campo Usuario (que estará vacío) el usuario activo, que cogerás de la tabla, variable o formulario oculto.

Si con estas ideas básicas te "apañas" para hacerlo, genial, si no, te explico un sistema con más detalle.

Un saludo.


Vaya! Se me pasó el último paso:

4º/ cada vez que abras un formulario, lo filtras por el usuario activo, de esa forma ya solo puede acceder a lo que haya hecho.

Muchísimas gracias! Le he estado echando un vistazo y me queda clarísimo! Lo voy a probar y veré qué tal! Pero yo creo que funcionará bien!

Hola Sveinbjorn, no consigo hacerlo, en el paso 3, ¿a qué te refieres? ¿Le pongo el nombre usuario activo al registro nuevo? Y en el paso 4, ¿cómo filtro por usuario activo? Yo lo que he hecho ha sido lo siguiente:

Cree un formulario que me aparece el usuario activo en ese momento después del login, e incluso puse el cuadro combinado donde salia ese usuario activo en todo momento y en todos los formularios también, aunque no fuera suyo. Pero hasta allí llegue, llevo varios días y no consigo avanzar. Lo más cerca que estuve fue añadiendo al botón una macro de filtro pero me daba error.

A ver si puedes ayudarme con mi dudas.

Un saludo y muchas gracias :)

A ver si esta otra respuesta que dí a otro usuario te aclara las dudas: Filtrar contenido de la BBDD por Usuario . Si no, por la tarde, te lo explico con más detalle, que ahora voy justo de tiempo.

Ya la vi e intenté hacerlo pero no me acaba de quedar del todo claro, gracias y espero tu respuesta por la tarde. Voy a seguir dándole caña a ver si lo saco.

Te he preparado este mini-ejemplo para que lo veas más fácil. Te explico lo que hice y lo adaptas a lo que tienes:

1º/ Tengo una tabla con los usuarios y sus contraseñas, con un ID autonumérico que será el que use (TUsuarios)

2º/ En la tabla TDatos tengo el campo "Usuario" para registrar el usuario que crea el registro. Coge los datos de TUsuarios y trabaja con el ID numérico (es un campo de tipo número)

3º/ En el formulario FLogin (que se abre al abrir la BD), después de comprobar el usuario y su contraseña, si es correcto, abro FChivato oculto y le paso el id del usuario. Luego abro el formulario FDatos y cierro FLogin.

4º/ En un módulo creo la función pública fncUser que devuelve el valor del cuadro de texto de FChivato (el id del usuario que accede a la BD)

5º/ En el formulario FDatos tengo oculto el campo Usuario (no me interesa que se vea), y como valor predeterminado le pongo: =fncUser()

De esta forma, me aseguro que en cada registro nuevo se ponga el id del usuario activo.

6º/ En FDatos tengo programado el evento "Al cargar" para que en función del usuario aplique el filtro a los datos. En el ejemplo he supuesto que si entra el administrador puede ver todo, y si entra un usuario (user1 o user2) solo lo que ha hecho.

La contraseña para el formulario de inicio es el nombre de usuario (admin-admin, user1-user1...)

Saludos

.


Muchas gracias por la respuesta! Aunque al final, basándome en tu idea lo hice de otra manera.

Aún así, me sigue dando error. Te comento:

Conseguí hacer el formulario que me hace de chivato, y meter una text box en el formulario donde los trabajadores realizarán las ediciones, pero, como no me daba error. Una vez aplicado el filtro me transforma el formulario en modo lectura y no puedo editar nada. Creo que el error está en el origen del formulario donde realizo la relación entre mi formulario y la tabla donde aparece que usuario esta activo.

¿Alguna idea? Si quieres te podría mandar la BD para que lo vieras.

Siento no ser mas preciso

 Gracias de nuevo por tu respuesta.

Un saludo

PD: me da error 2448

Que al aplicar el filtro te vuelva al formulario de solo lectura, no me tiene sentido: un filtro simplemente limita los registros a devolver, no interfiere en que se puedan añadir o no (o modificar) registros. El problema ha de estar en otra parte, pero no se me ocurre dónde. ¿Sin aplicar filtros el formulario te deja añadir/modificar?

Mi consejo es que le eches un vistazo con calma al ejemplo que te preparé, pues me parece una de las formas más sencillas de hacerlo, y con unas pocas lineas de código.

Se me ocurre que ese error venga porque intentas dar un valor inadecuado a un control, por ejemplo el nombre de un usuario si el campo usuario guarda un número...

Sin aplicar el filtro si, el problema es cuando aplico el filtro, se me vuelve todo el formulario con vista solo lectura. Creo que es por las relaciones. El formulario iba perfectamente antes, es más, si hago una copia del formulario, me funciona bien hasta que le aplico el filtro.

Me lo miraré con tranquilidad a ver si puedo hacerlo como tu lo haces. Pero viendo tu ejemplo, donde tu decides quien puede ver qué, yo quiero hacerlo automáticamente.

Te voy comentando, y si se te ocurre algo ya me dirás.

Un saludo y muchas gracias de nuevo. Me estas ayudando mucho

Qué raro... Pero para aplicar el filtro no te hace falta tener tablas relacionadas: si en tu tabla de datos tienes el campo usuario, filtra directamente ese campo

Esto tampoco lo entiendo:

Me lo miraré con tranquilidad a ver si puedo hacerlo como tu lo haces. Pero viendo tu ejemplo, donde tu decides quien puede ver qué, yo quiero hacerlo automáticamente

Mi ejemplo filtra automáticamente al loguearte, el administrador, ve todo ( es decir, no filtra), el user1 los que en usuario tienen un 2, y el user2 lis que tienen cono usuario un 3 (2 y 3 son los ids lis usuarios en TUsuarios). Que el administrador pueda ver todos era por mostrarte más opciones de filtrado.

Creo que el error 2448 me aparece porque tengo dos formularios con un mismo id. Debido a un formulario que cree en modo copia. 

Te intento resumir mis avances de hoy y explicar un poco donde tengo el mayor problema:

1. Conseguí hacer el Chivato y que en un tabla (tblAccesos) me apareciera el Usuario Activo.

2. Hice un textbox en el formulario principal  (Calculo de primas diario, este formulario me rellena los datos en la tabla principal y esta relacionada con una consulta) donde me apareciera el valor de la tabla tblAccesos.

Hasta aquí creo que bien.

El problema principal aparece cuando me hace crear relaciones entre tblAccesos y la tabla "Cálculo de primas diario". Así que yo las creo y efectivamente el formulario se vuelve solo lectura. No me deja modificar ningun cuadro de texto y si hago click a un botón que pone automaticamente la hora me sale el siguiente error: -2147352567 (80020009). No se puede ejecutar este RecordSet.

Espero haberme explicado con mas claredad.

Gracias de nuevo y un saludo.

En mi opinión, si tienes una tabla tblAccesos no te hace falta, necesariamente, el formulario chivato, con una función de dominio (DLookUp, DMax o DLast, según cómo trabajes con esa tabla) te sería suficiente.

Tu error, creo, por lo que explicas, está en que en tu tabla de datos no tienes un campo que te guarda el usuario que crea el registro.

Otro error es vincular esa tabla de datos con la tabla tblAccesos (de ahí el problema de vinculación). Sí la podrías vincular con una tabla tblUsuarios, como en el ejemplo que te mandé, y a su vez, tener vinculadas tblUsuarios y tblAccesos.

Una forma fácil de hacerla, con lo que creo tienes sería ésta (a partir del ejemplo inicial)

Hola Sveinbjorn! Eres un genio! Me tiré toda la mañana pero prácticamente rehíce todo el proyecto basándome en lo que me enviaste y funciona super bien. Ahora solo me estoy peleando para que al abrir me salga el formulario del último registro que edito el trabajador, estoy probando con macros pero se solapan entre ellas. ¿Alguna idea?

Quería agradecer la paciencia que has tenido estos días, me has sido de gran ayuda.

Un saludo

Prueba a poner en el evento "Al cargar" del formulario:

DoCmd. GoToRecord,, acLast

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas