Acces base de usuarios y programación

Mi nombre es Oscar y estoy aprendiendo a utilizar acces, tengo una base de datos creada pero aún no tengo los conocimientos para modificarla asi que por eso pido vuestra ayuda.

La función general de la base de datos es la gestión de un pequeño almacén donde los usuarios guardan objetos para que sean entregados a otros usuarios.

Así que tengo una tabla con usuarios con un id, estos usuarios generan altas y bajas de objetos a los que yo asigno un número de acuerdo a las características del objeto, debido a la distribución de las estanterías del almacén o a las características de los objetos los números los puedo reutilizar, es decir que si Pepito Pérez esta semana a consignado en el almacén una maleta yo la ubico en la estantería de maletas y le asigno el número 80, esta maleta puede ser recogida por el usuario o alguien que él autorice y la doy de baja liberando el 80 y poniéndolo reutilizar.

La base de datos que está creada esta bien pero tengo que dar muchos click para hacer alta de un nuevo usuario y asignarle un número de objeto.

Yo quiero que al abrir la base de datos se abra un pequeño formulario donde yo escribo el id del usuario y si existe me muestre los datos del mismo y me de la opción de crearle un objeto de alta o entregarle si es que ya tiene algún objeto en el almacén.

Si el id del usuario no existe quiero que me de la opción de crear el usuario y crearle un objeto

Os agradecería vuestra ayuda para crear esta base o para modificar la actual.

Respuesta
2

Te digo lo que haría, que quizá no te convenga. Vamos a suponer que la tabla Usuarios tiene IdUsuario, Nombre, etc. Y supongamos que tienes una tabla Entradas con Identrada. Idusuario, Bulto, Posición, etc. Añádele una campo Sí/No llamado Entregada. Con ella puedes crear un formulario y en su encabezado le pones un combinado. En sus propiedades-Datos-Origen de la fila le pones

Select Idusuario, Nombre from usuarios;

También en sus propiedades-Otras-Nombre le pones Elegir Y en la solapa Eventos-Después de actualizar crea un procedimiento de evento y entre Private Sub y End Sub escribe

If dcount("*","entradas","idusuario=" & me.elegir & "")>=1 then

me.recordsource="select * from entradas where idusuario= " & me.elegir & ""

else

Msgbox"Ese usuario no está dado de alta", vbokonly,"Que lo sepas"

Aquí lo que quieras que haga en este caso

end if

Como no sé que vas a hacer cuando le entregues la maleta. Yo lo que haría sería poner en Posición un combinado donde sólo me mostrara aquellas que no están Entregadas, y en el momento de entregarla marcaría la casilla Entregada, con lo que para el siguiente registro ya te aparecería como libre.

¡Gracias!

Voy a analizar tu ayuda para ver si con ella salgo de el bucle en el que me encuentro,

Gracias por dedicar tiempo en resolver mi cuestión, Un saludo te digo algo después

Hola he probado tu opción y la verdad , no me acabo de aclarar porque tendría que cambiar muchas cosas de la base actual, no se si es posible que suba mi base a drive y le eches un vistazo.

Gracias

Vale, pero si le hago alguna modificación te lo digo y te la tendría que mandar por email, ya que aquí en Murcia, las "nubes" las queremos sólo para la lluvia y ni por esas.

¡Gracias! 

bueno, pues espero que ahora con cielo despejado la puedas ver !!!!

Gracias otra vez

Cuando consiga respirar después de ver el partido le echo un vistazo. Todavía los tengo de corbata.

¡Gracias! 

AL final ganamos con bucles iraníes pero se saco el resultado, primeros de grupo por una amarilla menos y ahora esperar a Marruecos.

Me rindo, por más que he mirado la base no la entiendo

1º No encuentro en ninguna tabla algún campo Posición que indicabas en la pregunta. Por tanto difícilmente lo puedo "liberar"

2º Por otro lado no entiendo porqué poner un cuadro de lista en el formulario Recogidos, ya que se supone, o al menos a mí me lo parecido, es que ese formulario se debe usar cuando alguien te entrega un paquete y usar un subformulario para la recogida, marcando una casilla No Disponible, de forma, que cuando alguien te fuera a entregar un paquete sólo te aparecieran las posiciones en que

Disponible=0

. Luego, usar ese mismo subformulario para las entregas y desmarcar, una vez entregado, ese campo Disponible, con lo que, para un nuevo registro ya estaría disponible.

3º Por último, y es sólo mi opinión, has "complicado" mucho el código. Por ejemplo, para dar de alta un usuario nuevo en el formulario Recogidos no hace falta un botón. Para eso está el evento Al no estar en lista del combo Usuarios

Dim Usuarionuevo As Integer, título As String, mensaje As Integer

título = "El usuario que ha escrito no está en la lista"
mensaje = vbYesNo + vbDefaultButton1
Usuarionuevo = MsgBox("¿Desea agregar este usuario a la lista ?", mensaje, título)
If Usuarionuevo = vbYes Then
DoCmd.RunCommand acCmdUndo

DoCmd.OpenForm "alta de usuarios", acNormal, "", "", acAdd, acDialog

Response = acDataErrAdded
End If

De forma, que si le dices que sí abre el formulario alta de usuarios y una vez que hayas puesto sus datos, al cerrar el formulario, en el combo Usuarios ya te aparece su valor.

Lo mismo que en el evento Después de actualizar del combo usuarios

Lista.RowSource = "select * from recogidos where cic=" & Me.ComboUsuarios & ""

En el evento Al cargar le dices que el grupo de opciones sea igual a 1, pero eso se lo puedes decir en el propio grupo de opciones como valor predeterminado y sobraría el código.

Y así hasta...

Siento no haber podido ayudarte.

Hola Icue,

Primero que todo agradecer la ayuda que me has prestado y decirte que tienes toda la razón del mundo , la base de datos actual es un galimatias pero es la que tengo heredada.

Me planteé crear una nueva pero si te has fijado existe muchísima información que no quiero perder.

Es difícil entender esta base de datos..., ¡Muy difícil diria yo que trabajo con ella!

A pesar de su complejidad esta base de datos cumple con su función, pero es poco amigable para un usuario que no entienda nada de informática y este es el motivo para querer modificarla.

Intentaré explicarte cual es la distribución principal a ver si no te rindes por favor .

El formulario recogidos podria decir que es el formulario principal de la base y con el que una persona sin conocimientos mínimos podria interactuar con la base de datos.

El problema radica en el diseño y como dices tu el combo allí no tiene mucho sentido.

Para no rediseñar toda la base de datos:

Mi planteamiento era añadir un campo en el formulario recogidos que capturara el dato CIC de la tabla Usuarios  y que si este dato ya existe solo refrescara todos los datos del formulario ,bien para ver la existencia de paquetes o bien para crear un paquete nuevo a este usuario ya existente .

Y si el dato CIC de la tabla usuarios no existe llamar al formulario alta usuarios para crearlo.

De nuevo muchas gracias por el tiempo que dedicas .

Por eso te decía que el cuadro de texto ese para buscar no hace falta, el evento Al no estar en lista es anterior a Después de actualizar. Por eso, si escribes un nombre en el combo usuarios y pulsas Enter, si no está en la tabla Usuarios te aparece el mensaje, etc.. y si ya está se ejecuta el evento Después de actualizar.

Si lo he cambiado y he puesto el código que me dices , el único problema que surge es que si el usuario pone por ejemplo Pedro Perez y en la base existe Pedro Peres , la base le da la opción de crear un nuevo usuario cuando realidad ya existe, si controlo la entrada de datos mediante el campo CIC no tendría este problema ya que es un ID , 

Gracias!!!!

Pero, si en el combinado(creo recordar, ya que en cuanto respondo elimino del ordenador las bases que me mandan) tenias como columna dependiente la del CIC. Una cosa es lo que muestra el combinado, y otra es el valor que tiene en cuenta, que en este caso es el cic. Cuando tu escribes, realmente lo que estás haciendo es, aunque te aparezca que eliges un nombre, es elegir un CIC. Por eso, si escribieras Pedro Peres, y en la tabla ya hubiera un Pedro Perez, para el código es un usuario nuevo. Es lo mismo que si en el cuadro de texto, te equivocaras al poner un CIF, te diría lo mismo, que es un usuario nuevo, porque lo que has escrito no está en la tabla.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas