Conexión de campos en subformulario

Te molesto porque tengo un problema con un subformulario.
La situación es la siguiente: He realizado un formulario de búsqueda y modificación, basado en los datos de una persona. Que intenta, además de ver los datos cargados por el sistema, dar lugar a que se modifiquen los que son incorrectos
Este formulario, posee en el "Encabezado de formulario" un cuadro combinado en donde se listan las personas cargadas, y mediante vb, al seleccionar una persona "x" aparecen los datos cargados de esa persona en los campos que están el detalle del formulario y también en el subformulario (que hace referencia a lugares de trabajo de la persona "x", y que se carga en la tabla "lugar1")
La vinculación entre frm y subfrm se dan a través de 2 campos id y lugar y id_dato y id_lugar respectivamente.
Consigo que al seleccionar una persona en el cuadro combinado del encabezado, en el subformulario los cuadros id_datos y id_lugar sean los correspondientes. Ahora bien el conflicto surge en un cuadro combinado que hace referencia al lugar de trabajo de la persona. Este lugar de trabajo surge de una tabla "nombre" que contiene código, id_lugar y nombre.
El cuadro combinado de lugar tiene como origen del control la información volcada en la tabla que se referencia con el subformulario que es la tabla "lugar1". Y como origen de la fila una consulta que selecciona el código, id_lugar y nombre de la tabla "nombre". Si en el criterio de la consulta le pongo que el id_lugar de la tabla "nombre" sea = a el cuadro id lugar sólo se pueden ver los nombres de lugar del partido que se carga al abrir el formulario (por más que cuando se cambia de persona cambia el cuadro id lugar del subfrm). Si le elimino este criterio no se filtra obviamente por el lugar en cuestión y me muestra todos los nombres de la tabla nombre.
Quise ser los más explicativo posible.

2 respuestas

Respuesta
1
Disculpa la tardanza en responderte, pero trataré de ayudarte.
Prueba agregando el criterio que me comentaste que realiza la consulta, y luego en un evento del formulario y subformulario llamado 'Al activar registro', pon DoCmd. Requery "Nombre_Campo". No está actualizando tus datos, a eso puede deberse que no te esté mostrando los datos que precisas.
Genial, lo pude resolver.
Muchas gracias.
Igual finalmente no usé exactamente lo que me indicaste, yo también había intentado con el docmd.requery, pero se lo ponía directamente a los cuadros especificados y no me daba resultado.
Lo coloqué en Al activar registro y me tiraba error con el tema del nombre, probé poniendo Forms! Lugar! Lugar o me. Lugar y nada, en el formulario principal ponía forms! Datos. Lugar! Lugar y tampoco, me sltaba error de visual.
Finalmente usé este código en al activar y funcionó, no es inmediato pero, en 2-3 segundos refresca los datos.
Dim ctlCombo As Control
    '
    Set ctlCombo = Forms!datos.lugar!lugar
    '
    ctlCombo.Requery
Saludos.
Respuesta
1
Disculpa que no haya contestado antes pero he estado de vacaciones y ahora estoy revisando los temas pendientes.
He visto que ya lo tienes resuelto así que... poco puedo hacer.
Ya que estamos te hago otra consulta si no te molesta:
Estoy intentando hacer que un botón de un formulario sirva tanto para "agregar nuevo registro" como para "ir al registro siguiente".
El formulario es tanto un formulario de búsqueda como para agregar datos, O sea, tengo un botón que generé como "ir al registro siguiente" en donde, en caso de haber más registros pueda ir moviéndose entre ellos para ver los datos cargados.
Pero mi idea es que en caso de que no haya más registros para adelante, en vez de salir una venta de access que dice "No puede ir al registro especificado" porque no hay más registros, me agregue un nuevo registro, guardando los datos agregados o no en el registro que dejo.
Suponía que debía hacerse mediante código con algún if tal cosa, else tal otra, pero no sé cuales serían esas cosas.
Muchas gracias.
Saludos
Por lo que entiendo que quieres hacer, sería el siguiente código:
Me. Refresh
If Me.CurrentRecord <= Me.Recordset.RecordCount Then
    DoCmd.GoToRecord acActiveDataObject, Me.Name, acNext
End If
Me tira un error en la línea Docmd.GoToRecord...
No logro entender el código, pero ante la duda te digo lo que pienso que tendría que hacer.
If el próximo campo está vacío entonces
 (agregue un nuevo resgistro) DoCmd.GoToRecord , , acNewRec
(Guarde el registro anterior) DoCmd.DoMenuItem acFormBar, acRecordsMenu, acSaveRecord, , acMenuVer70
else
(vaya al registro siguiente) DoCmd.GoToRecord , , acNext 
DoCmd.DoMenuItem acFormBar, acRecordsMenu, acSaveRecord, , acMenuVer70
endif
Lo que me falta es saber como poner si el próximo campo está vacío.
De todas formas si el código que vos me decís funciona para lo mismo bienvenido sea.
Agradezco el tiempo nuevamente.
Saludos
Antes de enviarte el código estuve probándolo y funcionaba correctamente.
Cuando estás en un registro nuevo de un formulario, el número de registro que tienes activo es el número de registros de la tabla más uno. Si la tabla tiene 5 registros, tendrías el valor 6 en Me. CurrentRecord.
Al comparar este valor con el número de registros de la tabla (Me. Recordset. RecordCount), sabemos si estamos ya posicionados en un registro nuevo o no, por lo que, de no estarlo, nos moveremos al registro siguiente (o a un registro nuevo si estabas ya en el último).
Revisa el código que pusiste y si te sigue dando problemas envíame una prueba 'pequeña' de la base de datos a mi correo '[email protected]'.
Santiago el problema es que no tengo campos numéricos en el inicio de los registros, leyendo la explicación que mandaste, supongo que será esa la razón por la que no anduvo.
Sencillamente le puse if campo1.value =null then y listo
Seguramente el código que vos me mandaste es más acorde a lo que yo quería pero de todas formas este me ha funcionado.
Agradezco enormemente tu tiempo, seguramente usaré el código que enviaste en otra oportunidad, y además me sirvió tu explicación para poder entender un poco más como es que funciona vb lo cual me sirve para poder seguir probando y aprendiendo.
Saludos!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas