Selección de lista desplegable y valor en otro campo

Tengo una base de datos donde tengo una tabla llamada ejercicios y otra llamada ejercicios 2. En la tabla ejercicios, entre otros campos, existe uno que se llama Nombre y otro que se llama imagen. En la tabla ejercicios 2, existen otros diversos campos. Quiero hacer un formulario donde aparezcan todos los campos del ejercicio 2, donde uno de ellos es nombre de ejercicio, que lo que hace es buscar el nombre del ejercicio basado en el campo nombre de la tabla ejercicio. Eso es fácil, se hacerlo, el problema es que no se cómo hacer para que, al seleccionar dicho ejercicio, me aparezca al lado en otro campo que ponga la imagen de dicho ejercicio automáticamente. Ahora mismo no tengo hechas relaciones de las dos tablas, pero tengo los campos Id_ejercicio (Clave principal) en la Tabla ejercicio y el campo Id_ejercicio (sin clave principal) para hacer la relación pertinente (la cual hice ya de uno ovarios de ejercicio a ejercicio 2, poniendo el campo imagen en el formulario pero no salía la imagen automáticamente...)

1 Respuesta

Respuesta
1
Echa un vistazo a este ejemplo, a ver si lo puedes adaptar a tu BD. Es sencillo ;)
http://neckkito.eu5.org/index.php?option=com_content&view=article&id=99:imagenes-en-formulario&catid=42:ejemplos-de-formularios&Itemid=55
Si tienes algún problema en cargar la página (últimamente da algunos problemas) vete a http://neckkito.eu5.org y el ejemplo está en Cómo se hace->Ejemplos de formularios->Imágenes en formulario
Evidentemente si tienes algún problema me lo comentas.
Hola! Gracias por la respuesta pero no es lo que busco... yo si quiero que la imagen esté dentro de la base de datos... porque comparto la base de datos y me es más fácil compartir un archivo que carpetas de archivos... así que no me sirve de mucho. ¿Sabrías hacerlo de otra forma? Supongo que sí! Un saludo y gracias!
Mi primera recomendación, si necesitas tener las imágenes en la BD, es que conviertas las imágenes al tamaño (me refiero al "peso" de la imagen, no al ancho y alto) más pequeño que puedas. No sé si sabes que Access "sólo" admite un tamaño máximo de 2 Gigas, entre estructura y datos, y si tienes muchas imágenes que "pesen" corres el riesgo de que la BD te alcance rápidamente ese tamaño máximo de BD.
Dicho lo anterior te digo cómo puedes hacerlo:
1.- A nivel de estructura de tablas y formularios:
- En la tabla donde tienes los datos creas un campo nuevo llamado, por ejemplo, [ImgEjercicio], y lo defines como tipo OLE
- En el formulario donde ves los "datos" del ejercicio tienes que añadir ese campo [imgEjercicio].
Ese campo te saldrá, en principio, en blanco, porque no tiene ningún dato asignado.
2.- A nivel de proceso de introducción de datos:
El proceso es "normal" en el sentido de que tienes que ir añadiendo la información como si crearas o modificaras un registro, pero teniendo en cuenta las características del objeto OLE. Por ejemplo, supón que tu formulario tuviera sólo dos campos, [nombreEjercicio] e [imgEjercicio].
Damos de alta el primer registro: ponemos el nombre del ejercicio [nombreEjercicio], por ejemplo, "Saltar". Pasamos al campo [imgEjercicio]. Hay que dar de alta ahí la imagen Saltar.jgp. Entonces, teniendo [imgEjercicio] seleccionado, debemos hacer lo siguiente:
- Nos vamos a menú Insertar->Objeto...
- En la ventana que nos sale le decimos "Crear desde archivo"->Botón examinar
- Navegamos por las carpetas hasta encontrar "Saltar.jpg"
- Volveremos a la pantalla anterior. Aceptamos.
Ahora la imagen habrá quedado guardada en la BD y asociada a ese registro. Ya podemos dar de alta el siguiente.
Y eso es todo.
Ya me dirás si tienes algún problema.
Hola de nuevo! Acabo de entender que no me expliqué en mi primer mensaje... lo siento! Se como se inserta una imagen en un campo OLE o archivo adjunto... lo que no quiero es eso:
Lo que tengo es una tabla con varios campos (Tabla 1) entre ellos Tabla 1. Nombre y Tabla 1. Imagen. Luego tengo otra tabla (Tabla 2) con varios campos, entre ellos Tabla 2. Ejercicio. Lo que quiero es hacer un formulario donde el campo referido a Tabla 2. Ejercicio me salgan los nombres de Tabla 1. Nombre que se me almacene ese nombre en Tabla 2. Ejercicio (esto se hacerlo sin problemas) pero quiero poner al lado un campo (del cual no quiero que se me almacene) que sólo me muestre la imagen de Tabla 1. Imagen del registro seleccionado mediante la relación.
Esto último es lo que no se! Muchas gracias de nuevo! SAludos!
Vamos a ver...
Con la información que me das es bastante difícil darte una solución que funcione a la primera. A ver si tenemos suerte...
Voy a explicarte un sistema que se basa en los siguientes supuestos:
- El campo Imagen, de la tabla 1, es un objeto OLE
- En el formulario basado en la tabla 2, el campo Ejercicio almacena un valor de tipo texto
- No sé si los nombres de campos que voy a utilizar serán coincidentes con los que tú tienes en tu BD. Tendrás que revisar el código y poner los nombres que tú tengas en tu BD.
El proceso se divide en dos partes: el código para cuando das de alta nuevos registros y el código para cuando recorres los registros.
Vámonos...
Parte uno: nuevos registros
1.- Creas un formulario basado en la tabla 2. Yo lo llamaré FormTabla2.
2.- En ese formulario insertas un control OLE (marco de objeto dependiente). Sacas sus propiedades y te vas a la pestaña Otras->Nombre, y ahí le pones OLEimg
3.- Sacas las propiedades del campo [Ejercicio] y te vas a la pestaña Eventos->Después de actualizar, y le generas el siguiente código:
...
Private Sub...
Dim vEj As String
Dim vIm As Variant
vEj = Me.Ejercicio.Value
vIm = DLookup("[Imagen]", "Tabla1", "[Nombre]='" & vEj & "'")
Me.OLEimg.Value = vIm
End Sub
...
Y eso es todo.
PARTE DOS: RECORRER REGISTROS
Si lo dejaras así como está cada vez que cambiaras de registro te quedaría como imagen o bien en blanco o bien con la última imagen que hubieras metido. Para evitar eso debemos hacer lo siguiente:
4.- Ponemos el formulario FormTabla2 en vista diseño. Sacamos sus propiedades y al evento "Al activar registro" le escribimos este código:
...
Private Sub...
Private Sub...
Dim vEj As Variant
Dim vIm As Variant
vEj = Me.Ejercicio.Value
If IsNull(vEj) then
Me.OLEimg.Value=Null
Else
vIm = DLookup("[Imagen]", "Tabla1", "[Nombre]='" & vEj & "'")
Me.OLEimg.Value = vIm
End If
End Sub
...
Y ya podrás recorrer los registros viendo la imagen que corresponde al ejercicio seleccionado.
Si tienes algún problema me dices cosas.
Hola de nuevo! Llevo días intentando lo que me propusiste pero nada... además uso access 2007 y lo del campo OLE no me convence. Hasta ahora he hecho lo siguiente:
- Almacenar la ruta de la imagen en un campo texto
- Mostrar esta imagen con un control imagen
Ahora lo que quiero es que en la tabla relacionada, cuando de una lista desplegado seleccione el nombre del ejercicio, se me muestre la imagen de ese ejercicio... sería algo como:
Tabla1:
Id_ejercicio; Nombre ; Imagen (texto)
Tabla 2:
Id_tabla2; Nombre_ejercicio (en el formulario, busco con listra desplegable y me salen los nombres de Tabla1. Nombre y se almacena en Nombre_ejercicio); Id_ejercicio2 (relación de varios a uno con Tabla1. Id_ejercicio.
Gracias!
Cuando tras mi primera respuesta a tu consulta tú me escribes: <yo si quiero que la imagen esté dentro de la base de datos... porque comparto la base de datos y me es más fácil compartir un archivo que carpetas de archivos... así que no me sirve de mucho. ¿Sabrías hacerlo de otra forma?>, entonces la solución que te he dado a través de OLE es la que yo utilizaría de estar en tu caso.
Y, de repente, en este último mensaje, me escribes que lo que haces es: <Almacenar la ruta de la imagen en un campo texto>, lo cual es incompatible con guardar la imagen en la base de datos.
En definitiva, o guardas la imagen o guardas la ruta de la imagen:
- Si quieres guardar la imagen utilizas el sistema OLE
- Si quieres guardar la ruta de la imagen tienes la respuesta en el link que en su día te pasé; sólo necesitas adaptarlo a tu BD (http://neckkito.eu5.org/index.php?option=com_content&view=article&id=99:imagenes-en-formulario&catid=42:ejemplos-de-formularios&Itemid=55)
Lo que no puede ser es que me pidas un sistema y después me digas que utilizas otro.
He estado leyendo lo que te he explicado y prácticamente la mecánica es la misma que la que te comentaba para un objeto OLE, pero haciendo referencia al campo picture. Con el artículo podrás ver cómo se hace para asignar un valor a un campo picture, y bastará que lo apliques al proceso adaptado a tu BD.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas