Seleccionar dato y que aparezcan datos conexos en access

Que me surge. Tengo un formulario en access que hace referencia a personas. Este formulario tiene como origen de control 3 tablas, una DATOS donde se cargan los datos del formulario, y otra desde donde se toman datos referentes a las PERSONAS y la otra hace refencia a CIUDADES de las personas
Tengo en este formulario 5 campos a completar:
- FECHA (cuadro de texto)
- CIUDAD (cuadro combinado)
- APELLIDO (cuadro combinado)
- NOMBRE (cuadro de texto)
- TAREA (cuadro de texto)
Lo que intento hacer, y todavía no he logrado, es que al seleccionar la ciudad en el cuadro combinado CIUDAD, me aparezcan sólo los APELLIDOS de las personas que viven en esa ciudad (La tabla ciudades y la tabla personas están vinculadas por el código de la ciudad)
Luego, en el cuadro combinado APELLIDO, al seleccionar las personas de esa CIUDAD, lo que querría que sucediera es que automáticamente se completaran los cuadros NOMBRE Y TAREA.
Todos esos datos que en ese momento aparecerían en el formulario tendrían que guardarse en la tabla DATOS.

1 Respuesta

Respuesta
1
Vamos por partes...
1) Para el cuadro combinado de apellidos, lo que podes hacer es una consulta que te entregue sólo los apellidos que correspondan a la ciudad elegida. Para eso, en "Criterios" del campo "Ciudad", en la consulta, vas a poner:
Como [Formularios]![NombreDelFormulario]![NombreComBoxCiudades]
En base a esa consulta hacés el cuadro combinado de Apellidos.
En el código del evento "Después de Actualizar" del ComBox de Ciudades ponés:
Form.Refresh (para que cada vez que elijas una ciudad, se actualice el ComBox de Apellidos)
2) Para que se completen el Nombre y Tarea vas a tener que poner un código en el evento "Después de Actualizar" del ComBox de Apellidos. Por ejemplo:
me.nombre = DLookup("[Nombre]", "NombreTabla", "[Apellido] = Form![NombreComBoxApellido]")
me.tarea = DLookup("[Tarea]", "NombreTabla", "[Apellido] = Form![NombreComBoxApellido]")
O también se puede hacer con Macros, con la acción "Establecer valor". Por ejemplo, para el nombre ponés:
En elemento => Form![Nombre] (Suponiendo que "Nombre" es el nombre del cuadro de texto en el formulario)
Y en Expresión => DBúsq("[Nombre]";"NombreTabla";"[Apellido]=Form![NombreComBoxApellido]"
3) Para que los datos se guarden en la tabla Datos basta con que esa tabla sea el origen de registro del formulario... y que los cuadros de texto y cuadros combinados estén enlazados a los campos de esa tabla a través del origen de control de los mismos...
Bueno.
Agradezco la raidez de tu respuesta. Está perfecto, es lo que yo necesitaba.
Ahora bien, estuve probando varias veces y buscando en la ayuda de access, pero sigo con un problema:
Al usar el DLookUp, el campo nombre se completa, pero el tema es que sea cual sea el apellido que elija (de la ciudad que sea) rellena el campo nombre (también el de tarea, claro) con los datos de la primer persona que aparece, el que tiene el código número 1.
Te muestro el código que use, que es el que vos me dijiste
Private Sub apellido_combo_AfterUpdate()
Me.tarea_txt = DLookup("tarea", "personas", "apellido =" & ; Forms.personas.apellido_combo)
Me.nombre_txt = DLookup("nombre", "personas", "apellido =" & ; Forms.personas.apellido_combo)
Me.tarea_txt.Requery
Me.nombre_txt.Requery
Agradezco de nuevo el nuevo tiempo
No entiendo la forma en que escribiste los criterios de la función DLookup, ¿probaste cómo yo te dije?
me.nombre = DLookup("[nombre]", "personas", "[apellido] = Form![apellido combo]")
me.tarea = DLookup("[tarea]", "personas", "[apellido] = Form![apellido combo]")
Form.Refresh
Pusiste el Form. ¿Refresh en el evento "Después de Actualizar" del ComBox de Ciudades?
Si así no te sale, probá hacerlo con Macros:
=DBúsq("[Nombre]";"personas";"[apellido]=Form![apellido combo]"
Y de última, si no tenés resultados, si querés mandame la BD a [email protected] así la veo, a ver en que estás fallando.
Ya lo pude desentrañar. Son esas idioteces por las que a veces te rompés la cabeza. El error que estaba cometiendo es que en vez de igualar el código de la persona con el campo estaba igualando el apellido y por eso me aparecía siempre el primer registro.
Utilicé el código que te envié porque es el que me funcionó. El que vos me mandaste no me funcionaba, por eso busqué en base a la función dlookup que vos me habías recomendado en la ayuda de access y utilicé lo que decía.
Te agradezco mucho tu tiempo y tu conocimiento, me ha sido de enorme utilidad.
Saludos.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas