Caption de un objeto que es valor de una tabla

Dudas sobre Tablas, Consultas, Formularios, Informes...
s4sser
Nivel 1
Mensajes: 3
Registrado: Jue Ene 10, 2019 11:54 pm

Caption de un objeto que es valor de una tabla

Mensajepor s4sser » Jue Ene 10, 2019 11:57 pm

Hola a todos,

Estoy haciendo un formulario con ciertos botones cuyo texto (el caption del botón u objeto) quiero que cargue del primer registro que hay en una tabla consulta que ya tengo creada. El caso es que no se si es posible o cuál sería la manera de escribirlo... es algo así como un desref del excel...
=[Tabla1]![Columna1][ ¿cómo sigo para decirle el número de fila/registro? ]

Si fuera posible a través de VBA también me valdría, aunque la otra forma sería mejor... Cuál es la forma de escribir este tipo de fórmulas?

Muchas gracias por la ayuda

Avatar de Usuario
Sveinbjorn
Moderador
Mensajes: 1039
Registrado: Sab Oct 24, 2015 10:12 pm

Re: Caption de un objeto que es valor de una tabla

Mensajepor Sveinbjorn » Sab Ene 12, 2019 8:23 am

Hola, tendrás que hacerlo usando VBA y la función DLookup(), por ejemplo, en el evento "Al cargar" de tu formulario poniendo algo como esto:

Me.NombreBoton1.Caption=DLookUp("Campo1","NombreTabla/Consulta")
Me.NombreBoton2.Caption=DLookUp("Campo2","NombreTabla/Consulta")
Sveinbjorn El Rojo

s4sser
Nivel 1
Mensajes: 3
Registrado: Jue Ene 10, 2019 11:54 pm

Re: Caption de un objeto que es valor de una tabla

Mensajepor s4sser » Sab Ene 12, 2019 12:53 pm

Muchas gracias por contestar,
Me.NombreBoton1.Caption=DLookUp("Campo1","NombreTabla/Consulta")

En la sintaxis de la función DLookUp donde dices Campo1 cómo puedo seleccionar el primer campo y en otro botón el segundo campo de la misma columna de la tabla?

Tengo una tabla como esta:

Imagen

Y en el boton 1 quiero poder decirle por fórmula que aparezca Roberto, en el botón 2 Juan y en el botón 3 María. Esa tabla se va actualizando y siempre quiero mostrar los valores de arriba abajo porque está ordenada de forma descendente.

Avatar de Usuario
Sveinbjorn
Moderador
Mensajes: 1039
Registrado: Sab Oct 24, 2015 10:12 pm

Re: Caption de un objeto que es valor de una tabla

Mensajepor Sveinbjorn » Sab Ene 12, 2019 9:28 pm

A ver, aclaremos conceptos sobre el ejemplo de tabla que pones:

Los campos son las "columnas", de nombres Campo1, Campo2, Campo3
Las filas son registros, así, el primer registro sería la terna Roberto-25-Valencia, el segundo Juan-22-Madrid...
Con la función DLookup() buscas en una tabla/consulta (la que indicas en el segundo parámetro) un dato (contenido en el campo que le indicas en el primer parámetro) de un registro. Si no indicas ningún criterio (en el tercer parámetro de la función), te devolverá la primera coincidencia, es decir, el valor del campo del primer registro.

En tu pregunta inicial dices "Estoy haciendo un formulario con ciertos botones cuyo texto (el caption del botón u objeto) quiero que cargue del primer registro que hay en una tabla consulta"

Y eso es lo que haría la función propuesta. Si la tabla (o consulta) se llamase TDatos, y el botón cmdUno, con

Código: Seleccionar todo

Me.cmdUno.Caption=DLookUp("Campo1";"TDatos")

te podría cono texto del botón "Roberto".
También podrías Usar la función DFirst() en vez de DLookup().

Ahora, sin embargo, dices que quieres " seleccionar el primer campo y en otro botón el segundo campo de la misma columna de la tabla"
Pues te diré que así como tienes la tabla, de forma sencilla solo puedes obtener los nombres de Roberto y María (y eso suponiendo que éste sea el último de la tabla), usando DLookUp() o DFirst() para el primero y DLast() para el último. Si tu tabla/consulta tuviera un campo Orden, podrías usar DLookUp y usar ese campo orden como criterio, por ejemplo con DLookUp("Campo1,"TDatos","Orden=2") te devolvería "Juan".

Otra cosa que se me ocurre es que hagas todo el procedo usando un recordset, algo así (te lo escribo sin probarlo, y sin control de errores, que no ando por casa), y suponiendo que quieres rellenar 4 botones que se llaman cmdBoton01, cmdBoton02 y así...:

Código: Seleccionar todo

Dim rst As DAO.Recordset
Dim i As Integer
Set rst=CurrentDb.OpenRecordset("TDatos")
If not rst.BOF=rst.EOF Then
   rst.MoveFirst
     For i=1 to 4
        Me.Controls("cmdBoton" & Format(i,"00")).Caption=rst("Campo1")
        rst.MoveNext
     next i
End If
rst.Close
Set rst=Nothing
Sveinbjorn El Rojo

s4sser
Nivel 1
Mensajes: 3
Registrado: Jue Ene 10, 2019 11:54 pm

Re: Caption de un objeto que es valor de una tabla

Mensajepor s4sser » Mar Ene 15, 2019 10:04 am

Muchísimas gracias por la respuesta, he avanzado bastante.

Con el If Not rst.BOF = rst.EOF Then controlas que no haya llegado al final cierto? Es que no me entra en ese If no se por qué. Lo he quitado y funciona pero es interesante y me gustaría saber por qué puede ser que no entre al if?

Muchas gracias por la ayuda

Avatar de Usuario
Sveinbjorn
Moderador
Mensajes: 1039
Registrado: Sab Oct 24, 2015 10:12 pm

Re: Caption de un objeto que es valor de una tabla

Mensajepor Sveinbjorn » Mar Ene 15, 2019 10:33 am

Con ese If se comprueba que el recordset tenga registros BOF significa Begin Of File y EOF significa End Of File. Lo que acabo de ver es que te puse mal la comprobación, y debiera ser: If Not (rst.BOF AND rst.EOF) Then , o If Not (rst.BOF = rst.EOF) Then. Por eso no te entra en ese bloque. :oops:

Otra forma de verlo es con If Not rst.RecordCount=0 Then, pero cuidado con el tipo de recordset que abras, porque puede no ser fiable
Sveinbjorn El Rojo


Volver a “Objetos Access”

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 2 invitados