Access - Usar nombres de campo variables

 
Vista:
sin imagen de perfil

Usar nombres de campo variables

Publicado por JAVIER (18 intervenciones) el 10/03/2022 09:55:02
Tengo un formulario con campos TxNumPersona01, TxNumPersona02,
TxNumPersona03 … TxApellidos01, TxApellidos02, TxApellidos03 …, etc
En el siguiente procedimiento no consigo redactar correctamente el Recorset ya que me da error al hacer referencia al campo Fm!TxNumPersona 01, 02, 03 etc

Sub Actualizar (NumCampo As String) ‘NumCampo es 01, 02, 03 ……
Dim db As Database
Dim RstDatos As Recordset
Set db = CurrentDb()
Set Fm = Forms!Recibos
CmNumPersona = "Fm!TxNumPersona" & NumCampo
CmApellidos = "Fm!TxApellidos" & NumCampo
Set RstDatos = db.OpenRecordset("SELECT NumCofrade, Apellidos, Nombre FROM “Datos” WHERE NumPersona = '" & CmNumPersona & "'")

Muchas gracias por vuestra ayuda
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Antoni Masana
Val: 78
Ha mantenido su posición en Access (en relación al último mes)
Gráfica de Access

Usar nombres de campo variables

Publicado por Antoni Masana (32 intervenciones) el 10/03/2022 15:12:38
Cuando veo estas aberraciones pienso en que momento del aprendizaje de programación se falto a clase.

1
2
CmNumPersona = "Fm!TxNumPersona" & NumCampo
CmApellidos = "Fm!TxApellidos" & NumCampo

Voy a intentar explicarlo.

Cuando se define una variable en un programa el compilador sabe que debe reservar un área de memoria que el tamaño lo define el tipo de variable. Se guarda el puntero a esta área de memoria y cada vez que encuentra la variable lo cambia por el puntero.

Si se entiende este concepto pregunto ¿Como diferencia una variable de un texto el compilador? Es decir para NumCampo no es lo mismo que "NumCampo", el primero es una variable y el segundo un texto.

1
2
CmNumPersona = "Fm!TxNumPersona" & NumCampo  '-- Asigna un texto y el contenido de una variabla a CmNumPersona
CmNumPersona = Fm!TxNumPersona01             '-- Asigna el contenido de una variabla a CmNumPersona

Saludos.
\\//_
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Usar nombres de campo variables

Publicado por JAVIER (18 intervenciones) el 10/03/2022 18:18:50
Muchas gracias, pero tu respuesta no resuelve mi problema.
El error se produce en
= '" & CmNumPersona & "'

Quizá sea porque nunca asistí a clase programación
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Usar nombres de campo variables

Publicado por JAVIER (18 intervenciones) el 11/03/2022 09:13:49
Voy a intentar plantear mi problema de otra forma

El código siguiente funciona perfectamente
1
CmNumPersona = Fm!TxNumPersona2
1
Set RstDatos = db.OpenRecordset("SELECT NumPersona , Apellidos, Nombre FROM “Datos” WHERE NumPersona = '" & CmNumPersona & "'")

De la siguiente forma no funciona. Error en la línea 1
1
CmNumPersona = Fm!TxNumPersona & NumCampo 'Siendo NumCampo=2
1
Set RstDatos = db.OpenRecordset("SELECT NumPersona , Apellidos, Nombre FROM “Datos” WHERE NumPersona = '" & CmNumPersona & "'")

Y así tampoco. Error en la linea 2
1
CmNumPersona = "Fm!TxNumPersona" & NumCampo 'Siendo NumCampo=2
1
Set RstDatos = db.OpenRecordset("SELECT NumPersona , Apellidos, Nombre FROM “Datos” WHERE NumPersona = '" & CmNumPersona & "'")

Gracias a todos los colaboradores
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Usar nombres de campo variables

Publicado por Anonimo (3316 intervenciones) el 11/03/2022 10:09:23
Me aclararía algo conocer de donde sale este elemento:

Fm!TxNumPersona

En principio parece que 'Fm' es un recordset y en ese caso no entenderá como un elemento de ese conjunto (como nombre de un campo) a: TxNumPersona & NumCampo o a "Fm!TxNumPersona" & NumCampo

En la supuesta línea de que se trate de un recordset y se desea acceder a uno de sus campos cuyo nombre puede simular una serie:
(campo1, campo2 ... campoN)

Lo que funcionaria seria esto:
1
CmNumPersona = Fm.Fields ("TxNumPersona" & NumCampo)

Se le asignaría al elemento CmNumPersona el valor almacenado en el campo del recordset cuyo nombre fuera TxNumPersonaN
(siendo la 'N' un numero que se integraria como parte del nombre del campo)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Usar nombres de campo variables

Publicado por JAVIER (18 intervenciones) el 11/03/2022 10:33:35
Fm es un formulario
y TxNumPersona2 un campo del mismo. También existen TxNumPersona1 , TxNumPersona3, TxNumPersona4 ...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Usar nombres de campo variables

Publicado por Anonimo (3316 intervenciones) el 11/03/2022 12:06:52
Para un formulario es 'mas de lo mismo'.

Los formularios contienen objetos y al formulario en el que corre el código se le conoce como 'Me', en base a ello la forma de proceder es:

1
CmNumPersona = Me.Controls.Item("TxNumPersona" & NumCampo)

Puede funcionar tambien así:

1
CmNumPersona = Me.Controls ("TxNumPersona" & NumCampo)

(el primero me ha funcionado en todas las versiones de Access)

Normalmente se suele utiiizar para aplicar propiedades a subconjuntos definidos, por ejemplo así:

1
2
3
4
Dim XX As Long
For  XX = 1 to 10
Me.Controls.Item("TxNumPersona" & XX).Visible = True
Next XX

Nota:
Es la forma de acceder a las propiedades del objeto (para lectura y si permite también escritura), no se le indica que la propiedad es 'Value' porque habitualmente es la que toma por defecto....

1
CmNumPersona = Me.Controls.Item("TxNumPersona" & NumCampo).Value
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

Usar nombres de campo variables

Publicado por JAVIER (18 intervenciones) el 11/03/2022 14:14:11
Perfecto
Muchas gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar