|
Responder
|
| Autor | |
Sheerkhan
Asiduo
Unido: 01/Octubre/2011 Estado: Sin conexión Puntos: 284 |
Tema: Recorrer propiedades modulo de claseEnviado: 03/Febrero/2024 a las 14:50 |
|
Hola, buenas. Lo que pretendo hacer es desde un módulo de clase actualizar la tabla pasándole las propiedades de forma dinámica. No sé si puede hacerse, pero ya he probado a construir la variable (Nomfld ) de muchas formas y no consigo hacer que funcione. Gracias de antemano por vuestro tiempo. Sheerkhan Private Sub GuardarconSlCase(rs As DAO.Recordset) 'Propósito: Guardar los valores de las propiedadades _actualizadas en la tabla de la base de datos 'Esto funciona******************************* With rs .Fields("codCliente").Value = Me.m_codCliente .Fields("Nombre").Value = Me.m_Nombre .Fields("CodPostal").Value = Me.m_CodPostal .Fields("Provincia").Value = Me.m_Provincia End With 'Esto funciona******************************* 'PRUEBA************************************ 'Conseguir pasarle la propiedad de forma dinámica 'Ej. Nombre de la propiedad = m_Nombre del campo Dim fld As DAO.Field Dim Nomfld As Variant With rs For Each fld In .Fields Nomfld = "Me.m_" & fld.Name Select Case fld.Name Case "IdCliente" 'Autonumerico de la tabla Case "CodCliente" .Fields(fld.Name).Value = 88888 ' Funcion Autonumerico en Mdl_Autonum Case "Nombre" .Fields("Nombre").Value = Me.m_Nombre Case Else '.Fields(fld.Name).Value = Nomfld 'Aquí es donde no consigo que funcione ****************** End Select Next End With End Sub |
|
![]() |
|
xavi
Ver perfil usuario
Enviar mensaje privado
Ver los mensajes del usuario
Visite la página de los usuarios
Añadir a la lista de amigos
Administrador
Terrassa-BCN Unido: 10/Mayo/2005 Localización: Catalunya |||| Estado: Sin conexión Puntos: 14926 |
Enviado: 03/Febrero/2024 a las 15:04 |
|
A ver...
En Nombre utilizas Me.m_Nombre lo que entiendo devuelve el valor que hubiera en el control m_Nombre del formulario. Entonces en el Else debes hacer lo mismo: .Fields(fld.Name).Value = Me(Nomfld) (tu estás pasando como valor el nombre del control, no su contenido) Vamos, digo yo. Un saludo
Editado por xavi - 03/Febrero/2024 a las 15:04 |
|
![]() |
|
Sheerkhan
Asiduo
Unido: 01/Octubre/2011 Estado: Sin conexión Puntos: 284 |
Enviado: 03/Febrero/2024 a las 16:02 |
|
Hola Xavi, buenas tardes. El código no está en un formulario sino en un módulo de clase y lo que intento pasarle son las propiedades del objeto creado, declaradas en el encabezamiento del mismo módulo de clase, no el contenido de algún control(combo, cuadro de texto etc) .Fields("Provincia").Value -- Es el campo del recordset que quiero actualizar, esto funciona = Me.m_Provincia --(Me.) Supongo que se refiere al objeto o clase, y el resto lo construyo a partir del nombre del campo. Igual no se puede hacer así, si conoces otro modo que no sea uno a uno, estoy aprendiendo. Perdona si no sé explicarme lo suficiente, es que acabo de empezar con los módulos de clase. Tampoco funciona (acabo de probarlo), Me(Nomfld)-- Resulta en (MeMem_CodPostal) Gracias.
|
|
![]() |
|
xavi
Ver perfil usuario
Enviar mensaje privado
Ver los mensajes del usuario
Visite la página de los usuarios
Añadir a la lista de amigos
Administrador
Terrassa-BCN Unido: 10/Mayo/2005 Localización: Catalunya |||| Estado: Sin conexión Puntos: 14926 |
Enviado: 03/Febrero/2024 a las 16:09 |
|
Nada que perdonar. Tu por lo menos estas empezando con los módulos de clase. Para mi es una de esas "tareas pendientes" que aun no he tenido tiempo (ni necesidad) de abordar.
A ver si alguien con más experiencia nos ilustra sobre el tema.
|
|
![]() |
|
Sheerkhan
Asiduo
Unido: 01/Octubre/2011 Estado: Sin conexión Puntos: 284 |
Enviado: 03/Febrero/2024 a las 16:10 |
|
Si hubiera alguna forma de meter las propiedades en una colección, array o similar ¿se podria hacer? ¿Alguna idea? Gracias.
|
|
![]() |
|
Mihura
Ver perfil usuario
Enviar mensaje privado
Ver los mensajes del usuario
Visite la página de los usuarios
Añadir a la lista de amigos
Administrador
Unido: 06/Mayo/2005 Localización: En la dehesa Estado: Sin conexión Puntos: 14428 |
Enviado: 03/Febrero/2024 a las 16:31 |
|
Que yo sepa no se puede ... y mira que lo busque
.Las propiedades, en este caso el 'equivalente' del campo del Recordset no se pueden nombrar de manera indirecta. Yo pensé en declarar un array de dos dimensiones o un objeto Collection (o Dictionary) metiendo en uno el nombre del campo y en otro el valor ... pero no me convenció nada de nada.
|
|
![]() |
|
Sheerkhan
Asiduo
Unido: 01/Octubre/2011 Estado: Sin conexión Puntos: 284 |
Enviado: 03/Febrero/2024 a las 16:56 |
|
Yo estoy igual, no sé por donde tirar, si dejarlo o qué. Es una lástima, pues de poder hacerlo de forma dinámica nos ahorraría mucho código repetitivo. Gracias.
|
|
![]() |
|
Mihura
Ver perfil usuario
Enviar mensaje privado
Ver los mensajes del usuario
Visite la página de los usuarios
Añadir a la lista de amigos
Administrador
Unido: 06/Mayo/2005 Localización: En la dehesa Estado: Sin conexión Puntos: 14428 |
Enviado: 03/Febrero/2024 a las 17:07 |
|
Poderse se puede ... con un array / collection / dictionary ... la cuestión es ¿merece la pena?.
Hay algunos casos que si, por el hecho de tener los valores de un registro de un recordset 'a disposición' ... pero en la mayoría no. También puedes tirar por el camino de crearte una función que te cree la clase con todas las variables que necesitas (a partir del TableDef lo consigues). Eso sí, cada vez que cambies la tabla te toca cambiar la clase. |
|
![]() |
|
Sheerkhan
Asiduo
Unido: 01/Octubre/2011 Estado: Sin conexión Puntos: 284 |
Enviado: 03/Febrero/2024 a las 17:33 |
|
Lo que no encuentro es como acceder a las propiedades de forma recursiva algo como for each ¿como puedo obtener el listado de los miembros de la clase? ¿se puede?
|
|
![]() |
|
Mihura
Ver perfil usuario
Enviar mensaje privado
Ver los mensajes del usuario
Visite la página de los usuarios
Añadir a la lista de amigos
Administrador
Unido: 06/Mayo/2005 Localización: En la dehesa Estado: Sin conexión Puntos: 14428 |
Enviado: 03/Febrero/2024 a las 17:55 |
|
Lo que buscas no existe ... no hay una colección de propiedades de una clase.
Te la puedes crear tú.
|
|
![]() |
|
Sheerkhan
Asiduo
Unido: 01/Octubre/2011 Estado: Sin conexión Puntos: 284 |
Enviado: 03/Febrero/2024 a las 18:03 |
|
A eso me refiero, ¿como la puedo crear por medio de código sin tener que meterlas a mano?
|
|
![]() |
|
Mihura
Ver perfil usuario
Enviar mensaje privado
Ver los mensajes del usuario
Visite la página de los usuarios
Añadir a la lista de amigos
Administrador
Unido: 06/Mayo/2005 Localización: En la dehesa Estado: Sin conexión Puntos: 14428 |
Enviado: 03/Febrero/2024 a las 18:12 |
|
Busca VBIDE.
|
|
![]() |
|
Sheerkhan
Asiduo
Unido: 01/Octubre/2011 Estado: Sin conexión Puntos: 284 |
Enviado: 03/Febrero/2024 a las 18:16 |
|
Ok, voy a intentar aprender algo ![]() Gracias
|
|
![]() |
|
javier.mil
Ver perfil usuario
Enviar mensaje privado
Ver los mensajes del usuario
Visite la página de los usuarios
Añadir a la lista de amigos
Colaborador
Unido: 10/Agosto/2005 Localización: España Estado: Sin conexión Puntos: 4856 |
Enviado: 04/Febrero/2024 a las 17:55 |
|
Buenas, Para saber el nombre de todas las propiedades con su respectivo valor de todos los campos de todas la tablas puedes puedes hacerlo con el siguiente codigo Copia y pega en un MODULO STANDARD ( No de Clase) Private Function funTest() Call XecListarPropiedadesCamposTablas MsgBox "Fin" DoCmd.RunCommand acCmdAppMaximize ' << aconsejable No obligatorio DoCmd.RunCommand acCmdDebugWindow End Function Public Sub XecListarPropiedadesCamposTablas() '--------------------------------------------------------------------------------------- ' Procedimiento: XecListarPropiedadesCamposTablas ' Fecha: 04/02/2024 ' Autor: Javier Gomez ("Javier.Mil") ' WEB: www.accessdemo.info ' Proposito: Lista todas las propiedades con su respectivo valor de todos los campos de todas las tablas '--------------------------------------------------------------------------------------- On Error Resume Next Dim tdf As DAO.TableDef Dim fld As DAO.Field Dim prp As DAO.Property For Each tdf In CurrentDb.TableDefs If Left(tdf.Name, 4) <> "MSys" Then For Each fld In tdf.Fields For Each prp In fld.Properties Rem imprime nombre y valor de la propiedad Debug.Print tdf.Name & " >>>> " & fld.Name & " >>>> " & prp.Name & " >>>> " & prp.Value Next prp Next fld End If Next tdf End Sub Editado por javier.mil - 04/Febrero/2024 a las 18:05 |
|
![]() |
|
Sheerkhan
Asiduo
Unido: 01/Octubre/2011 Estado: Sin conexión Puntos: 284 |
Enviado: 06/Febrero/2024 a las 00:35 |
|
Hola Javier. Tienes toda la razón, no se me había ocurrido hacerlo por medio de la tabla, en mi caso es perfectamente aplicable, pues las propiedades de la clase coinciden con los campos de la tabla. Al final desistí, después pasar día y medio leyendo y dándole vueltas, me dí cuenta que mis conocimientos no son suficientes y por obcecarme no estaba avanzando. Así que las metí "a piñón" y a otra cosa mariposa. ![]() De todas formas, bueno es saberlo. Por mí se puede cerrar el hilo. Muchas gracias. (a todos)
|
|
![]() |
|
Responder
|
|
|
Tweet
|
| Ir al foro | Permisos de foro ![]() Usted No puede publicar nuevos temas en este foro Usted No puede responder a temas en este foro Usted No puede borrar sus mensajes en este foro Usted No puede editar sus mensajes en este foro Usted No puede crear encuestas en este foro Usted No puede votar en encuestas en este foro |