ms access - valor - Contenido del cuadro de texto dinámico en un formulario de acceso continuo
rellenar datos automaticamente en word (2)
Tengo una tabla (identificación, nombre, apellido, dirección, etc.). Todos los campos (excepto ID) pueden ser NULL. Quiero hacer un formulario donde pueda encontrar todos los registros que tengan al menos un campo NULO. Hice una consulta (con el diseñador de consultas) y luego "vinculé" un formulario continuo a ella.
En la parte de Detalle del formulario coloco un ID de cuadro de texto (vinculado a la consulta) para que pueda tener todos los ID que tienen al menos un campo NULO. Hasta ahora todo bien, funciona.
Me gustaría informar al usuario, después de la ID, qué campos están en blanco. Así que puse otro cuadro de texto (llamado txt) y hago controles como If isNull (Me.Name) y luego Me.txt.Value = "El campo de nombre está en blanco". Funciona perfectamente pero solo para el primer disco. Todos los demás registros tienen el mismo mensaje en el cuadro de texto txt.
El código es así (por supuesto, se declaran stringW y lngth)
If IsNull(Me.Name.Value) Then
stringW = stringW & " Name field,"
End If
..... (lo mismo para Apellido, Número de teléfono, etc.)
lngth = Len(stringW) - 1
stringW = Left$(stringW, lngth)
Me.txt.Value = stringW
Parece que la forma se carga (pongo el código en la sección de carga), hace los controles una vez y luego copia el contenido de la cadena W en el cuadro de texto txt para cada registro.
¿Cómo podría resolverlo? Quiero decir, ¿cómo puedo tener un cuadro de texto en la forma continua que cambia sus ''contenidos informando al usuario de los campos en blanco del registro?
El problema aquí es que un cuadro de texto independiente en un formulario que se muestra como formularios continuos siempre mostrará el mismo valor para cada registro. Cualquier manipulación de VBA que aplique al cuadro de texto independiente solo utilizará los datos del registro actual.
Una solución para esto sería crear una consulta guardada en Access que calcule el estado de cada registro, luego base su formulario en la consulta y tenga el cuadro de texto vinculado al campo calculado [EmptyFields].
Es decir, para los datos de muestra en [Table1]
id Name Surname Address
-- ----- -------- ---------------------
1 Gord Thompson 123 Main St
2 Homer 742 Evergreen Terrace
3 Flanders
podrías crear una consulta guardada como esta
SELECT
[id],
[Name],
[Surname],
[Address],
Mid(IIf(IsNull([Name]),", Name","") & IIf(IsNull([Surname]),", Surname","") & IIf(IsNull([Address]),", Address",""),3) AS EmptyFields
FROM Table1
que devuelve
id Name Surname Address EmptyFields
-- ----- -------- --------------------- -------------
1 Gord Thompson 123 Main St
2 Homer 742 Evergreen Terrace Surname
3 Flanders Name, Address
y podría usar esa consulta como Record Source
para su formulario.
Entiendo que esto tiene más de un año, pero tuve el mismo problema y encontré una solución.
Simplemente escriba una función que cree la cadena que desea, que usa valores de su formulario. Entonces, en lugar de:
Me.Name.Value
Utilizarías:
Forms!FormName!ControlName.Value
Luego simplemente use la función como ControlSource para su cuadro de texto independiente. Haga esto haciendo clic en "..." en ControlSource, luego elija "Funciones", luego su módulo, luego la función misma. Funciona perfectamente para mi