Crear macro escoger qué tabla abrir.
He creado una base de datos bastante simple, pero no sé cómo seguir. Tengo una tabla en la que tengo tres campos, es la tabla principal. En esta tabla, llamada "Piezas", es una especie de catálogo de piezas, siendo los tres campos, la referencia, la descripción, y el tercero una foto.
Después tengo infinidad de tablas más, una para cada pieza, y dentro de estas tablas, con idéntica estructura, están los campos para "año", "descripción incidencia", "numero de incidencia". Cada tabla tiene como nombre la referencia de la pieza a la que hace referencia.
El objetivo es, o sería, que creando un formulario, de algún modo, cuando estoy en una pieza en concreto, me muestre los datos de la tabla "Piezas" (referencia, descripción y foto) y además me muestre la información albergada en la tabla específica de la misma pieza, de su correspondiente tabla de incidencias, e ir pudiendo pasar página, de modo que la información de las dos tablas concuerden.
Yo había pensado en una macro o algo que me abra la tabla con el mismo nombre que la referencia que estoy viendo.
Si no es posible, acepto sugerencias de como rehacer la base de datos.
Después tengo infinidad de tablas más, una para cada pieza, y dentro de estas tablas, con idéntica estructura, están los campos para "año", "descripción incidencia", "numero de incidencia". Cada tabla tiene como nombre la referencia de la pieza a la que hace referencia.
El objetivo es, o sería, que creando un formulario, de algún modo, cuando estoy en una pieza en concreto, me muestre los datos de la tabla "Piezas" (referencia, descripción y foto) y además me muestre la información albergada en la tabla específica de la misma pieza, de su correspondiente tabla de incidencias, e ir pudiendo pasar página, de modo que la información de las dos tablas concuerden.
Yo había pensado en una macro o algo que me abra la tabla con el mismo nombre que la referencia que estoy viendo.
Si no es posible, acepto sugerencias de como rehacer la base de datos.
1 Respuesta
Respuesta
1
1
Anónimo
Primero declaramos la variable vTabla como pública (para que nos valga para todo el proyecto). Para ello vas a la pestaña módulos y abres uno nuevo, ahí pones:
Public vTabla as string
Lo guardas, por ejemplo, como Modulo1
En un formulario independiente creamos un cuadro combinado que llamamos selReferencia y un cuadro de lista que llamamos ListaPiezas (en este cuadro de lista, en origen de la fila no ponemos nada).
En el cuadro combinado selReferencia, en origen de la fila ponemos:
SELECT Referencia FROM Piezas ORDER BY Referencia;
En la acción al hacer clic ---> Procedimiento de evento ---> picas en el cuadrado de la derecha, el de los ... y pones el siguiente código:
Private Sub selReferencia_Click()
Me.Refresh
vTabla = Form!selReferencia.Value
Form!ListaPiezas.RowSource = "Select * From " & vTabla & ""
End Sub
Es decir igualamos a la variable vTabla el valor del cuadro combinado que hemos elegido, es decir la referencia, esta variable la utilizaremos como nombre de la tabla en el origen de la fila de la lista que nos dará el resultado de dicha tabla.
Me cuentas.
Public vTabla as string
Lo guardas, por ejemplo, como Modulo1
En un formulario independiente creamos un cuadro combinado que llamamos selReferencia y un cuadro de lista que llamamos ListaPiezas (en este cuadro de lista, en origen de la fila no ponemos nada).
En el cuadro combinado selReferencia, en origen de la fila ponemos:
SELECT Referencia FROM Piezas ORDER BY Referencia;
En la acción al hacer clic ---> Procedimiento de evento ---> picas en el cuadrado de la derecha, el de los ... y pones el siguiente código:
Private Sub selReferencia_Click()
Me.Refresh
vTabla = Form!selReferencia.Value
Form!ListaPiezas.RowSource = "Select * From " & vTabla & ""
End Sub
Es decir igualamos a la variable vTabla el valor del cuadro combinado que hemos elegido, es decir la referencia, esta variable la utilizaremos como nombre de la tabla en el origen de la fila de la lista que nos dará el resultado de dicha tabla.
Me cuentas.
Hola Ángeles, muchas gracias por tu rápida respuesta. No me esperaba algo tan avanzado. Mi nivel de access es de principiante realmente, así que algo me he perdido por el camino seguro.
Te cuento. He seguido las instrucciones como buenamente he podido, y el resultado es el Formulario independiente, con dos cuadros. El que tengo ubicado arriba, el selReferencia, que es un cuadro combinado, tiene una pestaña para en principio poder escoger de una lista, pero esa lista está en blanco. Supongo que a raíz de esto el cuadro inferior, el cuadro de lista ListaPiezas, sale en blanco también.
Espero no enervarte mucho, pero no me aclaro por mi bajo nivel! Muchas gracias de nuevo.
Te cuento. He seguido las instrucciones como buenamente he podido, y el resultado es el Formulario independiente, con dos cuadros. El que tengo ubicado arriba, el selReferencia, que es un cuadro combinado, tiene una pestaña para en principio poder escoger de una lista, pero esa lista está en blanco. Supongo que a raíz de esto el cuadro inferior, el cuadro de lista ListaPiezas, sale en blanco también.
Espero no enervarte mucho, pero no me aclaro por mi bajo nivel! Muchas gracias de nuevo.
Voy a ver si te lo puedo explicar. Tenemos una tabla Piezas con el campo Referencia y otras tablas con los nombres de esas referencias. Como queremos llamar a las tablas que elijamos en el cuadro combinado donde tenemos las referencias, tendremos que declarar una variable vTabla, las variables se pueden declarar privadas:
Dim vTabla as string
Pero si la declaramos de esta forma solo la podremos utilizar dentro del procedimiento, como en nuestro caso la queremos utilizar en cualquier sitio la declararemos pública, al declararla en la pestaña módulos nos servirá para todo el proyecto.
Public vTabla as string
Lógicamente la declaramos como texto porque los nombres de las tablas son texto.
Bien vamos con el cuadro combinado selReferencia, en modo diseño picas en él y con botón derecho vas a propiedades, ahí en origen de la fila seleccionamos los valores que queremos que salgan en la lista, esos valores son los que tiene el campo Referencia de la tabla Piezas, por lo que pondremos:
Select Referencia From Piezas order by Referencia
es decir en leguaje sql sería: seleccioname el campo referencia de la tabla Piezas y ordenamelo por el campo referencia.
Más abajo verás que hay acciones que se pueden producir en el cuadro combinado: al recibir el enfoque, al perder el enfoque, al hacer clic... cuando se produce una acción de estas se puede provocar un evento, por ejemplo cuando el cuadro combinado reciba el enfoque hazme, no se... mándame un mensaje. Estos eventos se indican mediante código. En nuestro caso como vamos a seleccionar de la lista la referencia con un clic utilizaremos la acción Al hacer clic ---> Procedimiento de evento ---> Picando en el cuadrado de la derecha, el de los ... nos saldrá el generador de código donde podemos escribir lo que queremos que nos haga. Cuando piques en el cuadrado te saldrá:
Private Sub selReferencia_Click()
End Sub
Es decir el procedimiento cuando en el cuadro combinado selReferencia se haga clic, es aquí donde escribiremos el código:
Private Sub selReferencia_Click()
Me.Refresh
vTabla = Form!selReferencia.Value
Form!ListaPiezas.RowSource = "Select * From " & vTabla & ""
End Sub
1º Me. Refresh ---> Actualiza el formulario y hace que el valor elegido sea el valor del cuadro combinado
2º vTabla = Form!selReferencia.Value ---> Igualamos la variable vTabla al valor del cuadro combinado el cuadro combinado lo tenemos que referir al objeto donde está ubicado, como en este caso es un formulario pondremos la palabra Form se referencia por medio de ! y cogemos su valor de la forma .Valor
3ª Como en el cuadro de lista no hemos puesto ningún origen de la fila (ya que es variable porque depende de la tabla elegida) tendremos que darle el valor aquí, dependiendo de la tabla elegida. La tendremos que referir al objeto donde está Form! Y la damos el valor a la fila (RowSource) aquí le decimos: seleccioname (yo he puesto todos los campos (*) pero podrías elegir los campos que quieras por ejemplo Select campo1, campo2 from...) y que los seleccione de una tabla que es variable " & vTabla & "
No se si me he sabido explicar, me cuentas.
Dim vTabla as string
Pero si la declaramos de esta forma solo la podremos utilizar dentro del procedimiento, como en nuestro caso la queremos utilizar en cualquier sitio la declararemos pública, al declararla en la pestaña módulos nos servirá para todo el proyecto.
Public vTabla as string
Lógicamente la declaramos como texto porque los nombres de las tablas son texto.
Bien vamos con el cuadro combinado selReferencia, en modo diseño picas en él y con botón derecho vas a propiedades, ahí en origen de la fila seleccionamos los valores que queremos que salgan en la lista, esos valores son los que tiene el campo Referencia de la tabla Piezas, por lo que pondremos:
Select Referencia From Piezas order by Referencia
es decir en leguaje sql sería: seleccioname el campo referencia de la tabla Piezas y ordenamelo por el campo referencia.
Más abajo verás que hay acciones que se pueden producir en el cuadro combinado: al recibir el enfoque, al perder el enfoque, al hacer clic... cuando se produce una acción de estas se puede provocar un evento, por ejemplo cuando el cuadro combinado reciba el enfoque hazme, no se... mándame un mensaje. Estos eventos se indican mediante código. En nuestro caso como vamos a seleccionar de la lista la referencia con un clic utilizaremos la acción Al hacer clic ---> Procedimiento de evento ---> Picando en el cuadrado de la derecha, el de los ... nos saldrá el generador de código donde podemos escribir lo que queremos que nos haga. Cuando piques en el cuadrado te saldrá:
Private Sub selReferencia_Click()
End Sub
Es decir el procedimiento cuando en el cuadro combinado selReferencia se haga clic, es aquí donde escribiremos el código:
Private Sub selReferencia_Click()
Me.Refresh
vTabla = Form!selReferencia.Value
Form!ListaPiezas.RowSource = "Select * From " & vTabla & ""
End Sub
1º Me. Refresh ---> Actualiza el formulario y hace que el valor elegido sea el valor del cuadro combinado
2º vTabla = Form!selReferencia.Value ---> Igualamos la variable vTabla al valor del cuadro combinado el cuadro combinado lo tenemos que referir al objeto donde está ubicado, como en este caso es un formulario pondremos la palabra Form se referencia por medio de ! y cogemos su valor de la forma .Valor
3ª Como en el cuadro de lista no hemos puesto ningún origen de la fila (ya que es variable porque depende de la tabla elegida) tendremos que darle el valor aquí, dependiendo de la tabla elegida. La tendremos que referir al objeto donde está Form! Y la damos el valor a la fila (RowSource) aquí le decimos: seleccioname (yo he puesto todos los campos (*) pero podrías elegir los campos que quieras por ejemplo Select campo1, campo2 from...) y que los seleccione de una tabla que es variable " & vTabla & "
No se si me he sabido explicar, me cuentas.
Hola de nuevo! Pues parece ser que no me he perdido nada de la primera explicación, o eso creo. He seguido paso a paso, pero sigue sin funcionarme. Si no te importa, te dejo la base de datos, y así ves en qué he fallado, o qué falta. He subido la base de datosa Megaupload, te dejo el enlace: http://www.megaupload.com/?d=VZKUA1BP
A ver si damos con la solución y un zopenco como yo puede aprender algo de esto! Muchísimas gracias de nuevo.
Saludos.
A ver si damos con la solución y un zopenco como yo puede aprender algo de esto! Muchísimas gracias de nuevo.
Saludos.
No tengo access 2007, tendrías que ponerlo en el 2003 o mejor mándamela a mi correo:
[email protected]
[email protected]
Hola de nuevo. Te lo mandé a tu correo, pero por si acaso no lo has recibido, te dejo un link con el archivo:
http://www.megaupload.com/?d=KYCOXWMM
Saludos.
http://www.megaupload.com/?d=KYCOXWMM
Saludos.
En el cuadro de lista ListaPiezas, en la propiedad Tipo de Origen de la Fila tienes que poner Tabla/Consulta para que te coja el resultado de la sql.
Pon también:
Form!ListaPiezas.RowSource = "Select Año, Incidencia, [Descripción Incidencia] From " & vTabla & ""
en vez de:
Form!ListaPiezas.RowSource = "Select * From " & vTabla & ""
Ya que con * te pillaría todos los campos y solo quieres 3
Me cuentas.
Pon también:
Form!ListaPiezas.RowSource = "Select Año, Incidencia, [Descripción Incidencia] From " & vTabla & ""
en vez de:
Form!ListaPiezas.RowSource = "Select * From " & vTabla & ""
Ya que con * te pillaría todos los campos y solo quieres 3
Me cuentas.
Hola Angeles! Pues el invento ya funciona correctamente, parece ser que lo que faltaba en el código era lo del origen de Fila en el cuadro de lista. Por cierto, tengo una duda más con el cuadro de lista (el cual funciona a las mil maravillas como he dicho). El problema es que ahí como sabes salen los tres campos, el tercero, algunas descropciones son extremadamente largas, y la frase se corta, me preguntaba si hay alguna manera de "poner" una barra deslizadora para poder desplazarme para poder leer la frase entera.
Oh además, si quiero vincular otros dos campos más de la tabla Piezas para que vayan en consonancia con el campo Referencia (primer campo de la tabla Piezas, ¿cómo lo hago?
Si consideras que la consulta es demasiado larga y prefieres que cierre esta y abra una nueva, dímelo y gustosamente lo haré. Mil gracias de nuevo!
Saludos.
Oh además, si quiero vincular otros dos campos más de la tabla Piezas para que vayan en consonancia con el campo Referencia (primer campo de la tabla Piezas, ¿cómo lo hago?
Si consideras que la consulta es demasiado larga y prefieres que cierre esta y abra una nueva, dímelo y gustosamente lo haré. Mil gracias de nuevo!
Saludos.
En un cuadro de lista solo puedes modificar el ancho de las columnas y serian todas iguales... quizás deberías probar a crear otro formulario que lo llamaré FormPiezas, basado en cualquiera de las tablas e insertarlo en el otro como subformulario, en este nuevo formulario si puedes jugar, como con un formulario cualquiera con los anchos de cada columna y con la barra horizontal.
El código para pasarle la sql sería:
Form!FormPiezas.Form.RecordSource = "Select * From " & vTabla & ""
Respecto de la otra pregunta, no se bien lo que quieres decir.
El código para pasarle la sql sería:
Form!FormPiezas.Form.RecordSource = "Select * From " & vTabla & ""
Respecto de la otra pregunta, no se bien lo que quieres decir.
Hola una vez más! Pues lo he cambiado por un subformulario y ahora es incluso mejor! Muchas gracias.
Respecto a las otras preguntas, lo explicaré mejor.
Tengo la tabla "Piezas" con los campos Referencia, Descripción y Foto.
Creé el formulario (con tu ayuda por supuesto) en el que había una tabla combinada, que sale en forma de lista desplegable el contenido del campo "Referencia" de la tabla "Piezas".
A raíz de éste lo que hicimos fue que al cambiar (con click) de Referencia en el formulario, el subformulario que incrustamos cambiara a la tabla correspondiente.
Pues bien, en el formulario principal, el que contiene el subformulario y todo lo demás, me gustaría que además mostrara los campos "Descripción" y Foto de la tabla Piezas, obviamente, que fuera el correspondiente a su referencia.
Recapitulando, que al escoger una Referencia en el formulario, además de refrescar el subformulario que incrustamos, me gustaría que en otros dos campos más mostrara la Descripción y Foto correspondientes a esa Referencia.
No sé si me he sabido explicar je je. Muchísimas gracias por adelantado!
Saludos.
Respecto a las otras preguntas, lo explicaré mejor.
Tengo la tabla "Piezas" con los campos Referencia, Descripción y Foto.
Creé el formulario (con tu ayuda por supuesto) en el que había una tabla combinada, que sale en forma de lista desplegable el contenido del campo "Referencia" de la tabla "Piezas".
A raíz de éste lo que hicimos fue que al cambiar (con click) de Referencia en el formulario, el subformulario que incrustamos cambiara a la tabla correspondiente.
Pues bien, en el formulario principal, el que contiene el subformulario y todo lo demás, me gustaría que además mostrara los campos "Descripción" y Foto de la tabla Piezas, obviamente, que fuera el correspondiente a su referencia.
Recapitulando, que al escoger una Referencia en el formulario, además de refrescar el subformulario que incrustamos, me gustaría que en otros dos campos más mostrara la Descripción y Foto correspondientes a esa Referencia.
No sé si me he sabido explicar je je. Muchísimas gracias por adelantado!
Saludos.
Para el campo Descripcion: Cuadro de texto y en origen del registro: =DBúsq("[Descripcion]";"[Piezas]";"Referencia=Form!selReferencia.Value")
Es decir: busca el campo descripción de la tabla piezas cuya referencia sea igual al valor seleccionado del cuadro combinado selReferencia (Creo que era sel Referencia como llamábamos al cuadro combinado)
En cuanto a las imágenes... lo siento pero no lo he hecho nunca. Indagando por ahí he visto esta ayuda de microsoft que quizás te pueda servir:
http://office.microsoft.com/es-hn/access-help/utilizar-imagenes-en-sus-formularios-informes-y-controles-de-access-HA001147204.aspx#BMdispimg
Es decir: busca el campo descripción de la tabla piezas cuya referencia sea igual al valor seleccionado del cuadro combinado selReferencia (Creo que era sel Referencia como llamábamos al cuadro combinado)
En cuanto a las imágenes... lo siento pero no lo he hecho nunca. Indagando por ahí he visto esta ayuda de microsoft que quizás te pueda servir:
http://office.microsoft.com/es-hn/access-help/utilizar-imagenes-en-sus-formularios-informes-y-controles-de-access-HA001147204.aspx#BMdispimg
Hola Ángeles! Lo de la foto voy a olvidarlo, ya que voy a recrear un formulario distinto con el tema de las fotos. En cuanto al código para rellenar el campo Descripción, no me funciona. Me devuelve un #Error. He comprobado los nombres de campos y tablas, y están bien.
Gracias de antemano!
Gracias de antemano!
No se lo que puede ser, mándame la BD o súbela para poder descargarla y la echo un vistazo.
Hola Ángeles!
Te pido mil disculpas, el código funcionaba y estaba bien 100%, la culpa es mía, que al copiarlo he puesto un espacio con ENTER sin querer ni saber, y no se apreciaba en Access. Ahora está todo perfecto. No te doy más la vara, has sido no de gran ayuda, si no más! Muchísimas gracias otra vez por toda la atención y la ayuda.
Saludos.
Te pido mil disculpas, el código funcionaba y estaba bien 100%, la culpa es mía, que al copiarlo he puesto un espacio con ENTER sin querer ni saber, y no se apreciaba en Access. Ahora está todo perfecto. No te doy más la vara, has sido no de gran ayuda, si no más! Muchísimas gracias otra vez por toda la atención y la ayuda.
Saludos.
- Compartir respuesta
- Anónimo
ahora mismo