** NORMAS DEL FORO **
Inicio del foro Inicio del foro > Access y VBA > Access y VBA
  Mensajes nuevos Mensajes nuevos RSS - Obtener valor de un campo en un subformulario.
  Preguntas frecuentes Preguntas frecuentes  Buscar en el foro   Eventos   Registro Registro  Iniciar sesion Iniciar sesion

Tema cerradoObtener valor de un campo en un subformulario.

 Responder Responder
Autor
Mensaje
JoseraGR Ver desplegable
Nuevo
Nuevo
Avatar

Unido: 06/Octubre/2020
Localización: Granada
Estado: Sin conexión
Puntos: 20
Enlace directo a este mensaje Tema: Obtener valor de un campo en un subformulario.
    Enviado: 06/Octubre/2020 a las 21:35
Buenas

Este es mi primer post en el foro acabo de registrarme LOLLOLLOL.

Bueno mi problema es el siguiente, a ver si no me lio mucho con la explicación. Tengo tres tablas relacionadas todas por el mismo campo clave:
-.T_ModeloGeneral: campo clave "Matricula"
-.T_Modelo: campo clave "Matricula", además tengo el campo "CV1" indexado sin duplicados.
-.T_CV: campo clave "Matricula", además tengo el campo "CV1" indexado sin duplicados.

Los datos los introduzco mediante un formulario que a su vez tiene un subformulario:
-.F_Modelo: formulario principal que contiene los datos de la tabla T_ModeloGeneral
-.SubFrmF_Modelo: subformulario que contiene los datos de la tabla T_Modelo.

Bien tengo dos botones uno para salir del formulario y otro para nuevo registro, en ellos estan declaradas las macros en el evento al hacer clic.

La cuestion es que en la tabla T_CV, debo de copiar el campo "Matricula" y el campo "CV1", lo hago mediante un comando de SQL:
miSql = "INSERT INTO T_CV(Matricula,CV1) VALUES ('" & Me.Matricula & "','" & Me.CV1 & "')"
DoCmd.RunSQL miSql

No consigo que se realice dicho comando (en negrita). Mediante la utilidad de inspecciones, veo que si consigue leer el campo "Matricula" pero me da error en el "CV1". No se si la expresión esta mal hecha, creo que si, al estar este textbox dentro del formulario. he cambiado la sintaxis de distintas formas pero nada de nada. Un ejemplo que he puesto ha sido este:
Forms![F_MODELO]![SubFrmF_Modelo].Form.CV1.Value

Como digo estoy atascado en esto, y es la base del resto de la BD que estoy diseñando. Os agradezco la ayuda de antemano y si puede ser una pequeña explicación del porque para no seguir metiendo la pata en lo sucesivo.

Un Saludo

Josera
 
Arriba
xavi Ver desplegable
Administrador
Administrador
Avatar
Terrassa-BCN

Unido: 10/Mayo/2005
Localización: Catalunya ||||
Estado: Sin conexión
Puntos: 14720
Enlace directo a este mensaje Enviado: 06/Octubre/2020 a las 22:08
Hola JoseraGR y bienvenido al foro,

Pues, si como parece, el campo CV1 está situado en un subformulario, no vas desencaminado.

Me!NombreControlSubformulario.Form!CV1 en lugar de Me!CV1

Para asegurarte puedes poner un punto de interrupción y evaluar los valores.

Un saludo
Xavi, un minyó de Terrassa

Mi web
Arriba
JoseraGR Ver desplegable
Nuevo
Nuevo
Avatar

Unido: 06/Octubre/2020
Localización: Granada
Estado: Sin conexión
Puntos: 20
Enlace directo a este mensaje Enviado: 07/Octubre/2020 a las 18:36
Buenas

He probado de dos formas diferentes, y me sigue dando error "no encuentra campo de la expresión". Las dos formas han sido:

Me!CV1.Form!CV1
Me!SubFrmF_Modelo.Form!CV1
Os pongo el código que utilizo por si dais con algo que no he visto yo:

Private Sub cmdNuevoModelo_Click()

  'Declaramos variables
   Dim vCategoria As String
   'Guardamos el registro
   DoCmd.RunCommand acCmdSaveRecord
  'Obtenemos el valor del tipo de material
  vCategoria = Mid(Me.Categoria.Value, 1, 10)
  'Segun el tipo de material
  If vCategoria = "Automotor " Or vCategoria = "Locomotora" Then
    Call MatriculaT_CV
  End If
  'Situamos el foco del subformulario en el campo Escala
  Forms!F_MODELO.SubFrmF_Modelo.Escala.SetFocus
  'Situamos el formulario para introducir un nuevo registro
  DoCmd.RunCommand acCmdRecordsGoToNew
  'Situamos el foco del formulario en el campo NombreModelo
  Me.NombreModelo.SetFocus

End Sub

Private Sub cmdSalirFormulario_Click()

  'Declaramos variables
  Dim vCategoria As String
  'Guardamos el registro
  DoCmd.RunCommand acCmdSaveRecord
  'Obtenemos el valor del tipo de material
  vCategoria = Mid(Me.Categoria.Value, 1, 10)
  'Segun el tipo de material
  If vCategoria = "Automotor " Or vCategoria = "Locomotora" Then
    'Llamamos al procedimiento MatriculaT_CV
    Call MatriculaT_CV
  End If
  'Cerramos el formulario
  DoCmd.Close acForm, "F_Modelo"

End Sub

Private Sub MatriculaT_CV()
  
  'Declaramos variables
  Dim miSql As String
  Dim vCV1 As String
  vCV1 = Me!CV1.Form!CV1
  'Construimos la expresión en SQL para insertar Matricula y CV1 en T_CV
  miSql = "INSERT INTO T_CV(Matricula,CV1) VALUES ('" & Me.Matricula & "',vCV1)"
  'Ejecutamos la expresión de SQL
  DoCmd.RunSQL miSql
  
End Sub


Arriba
xavi Ver desplegable
Administrador
Administrador
Avatar
Terrassa-BCN

Unido: 10/Mayo/2005
Localización: Catalunya ||||
Estado: Sin conexión
Puntos: 14720
Enlace directo a este mensaje Enviado: 07/Octubre/2020 a las 19:13
En el evento MatriculaR_CV (que se supone en el formulario principal) , esta línea:

miSql = "INSERT INTO T_CV(Matricula,CV1) VALUES ('" & Me.Matricula & "',vCV1)"

Seguro que no funciona.

En cualquier caso:

miSql = "INSERT INTO T_CV(Matricula,CV1) VALUES ('" & Me.Matricula & "'," & vCV1 & "')"

Y antes de eso, si el control que contiene el subformulario se llama SubFrmF_Modelo y, en el formulario que contiene, existe un control llamado CV1, entonces la asignación debería funcionar:

vCV1 = Me!SubFrmF_Modelo.Form.Controls("CV1")

Revisa lo subrayado y nos cuentas.

Un saludo
Xavi, un minyó de Terrassa

Mi web
Arriba
JoseraGR Ver desplegable
Nuevo
Nuevo
Avatar

Unido: 06/Octubre/2020
Localización: Granada
Estado: Sin conexión
Puntos: 20
Enlace directo a este mensaje Enviado: 07/Octubre/2020 a las 20:53
BIENNNNNN!!!!!!!!!

Funciona correctamente, tal y como lo has puesto, MUCHAS GRACIAS.

Y ya por rizar el rizo, puedo hacer esto:

miSql = "INSERT INTO T_CV(Matricula,CV1) VALUES ('" & Me.Matricula & "','" & Me!SubfrmF_Modelo.Form.Controls("CV1") & "')"

en lugar de esto

  vCV1 = Me!SubFrmF_Modelo.Form.Controls("CV1")
  'Construimos la expresión en SQL para insertar Matricula y CV1 en T_CV
  miSql = "INSERT INTO T_CV(Matricula,CV1) VALUES ('" & Me.Matricula & "','" & vCV1 & "')"

Un saludo



Arriba
hipromark Ver desplegable
Habitual
Habitual
Avatar

Unido: 18/Julio/2016
Localización: Caracas
Estado: Sin conexión
Puntos: 71
Enlace directo a este mensaje Enviado: 11/Octubre/2020 a las 16:38
Pues si entendí bien el problema, creo que eso lo hubieras podido hacer directo en el formulario usando funciones de macro ya prestablecidas en Access, sin liarte con todo ese código. 

Sólo te hago la sugerencia porque Access tiene muchas herramientas ya probadas que sirven para hacer lo mismo de manera más sencilla y veo muchos casos en que se complican metiéndose a programar VBA sin tener necesidad.
Arriba
xavi Ver desplegable
Administrador
Administrador
Avatar
Terrassa-BCN

Unido: 10/Mayo/2005
Localización: Catalunya ||||
Estado: Sin conexión
Puntos: 14720
Enlace directo a este mensaje Enviado: 13/Octubre/2020 a las 09:14
Hasta dónde a mi me consta, un poco complicado hacer esa inserción con las macros preestablecidas. 

En cuanto a "programar VBA sin tener necesidad" ahí entraríamos en las preferencias personales. Yo huyo de las macros como del diablo. Me aporta muchísima más información (y control) un código VBA que las macros (incrustadas o no) de una aplicación.

@JoseraGR: efectivamente, el código se puede simplificar tal como has puesto. Incluso ir un paso más allá:

CurrentDb.Execute "INSERT INTO T_CV(Matricula,CV1) VALUES ('" & Me.Matricula & "','" & vCV1 & "')", dbFailOnError

Un saludo


Xavi, un minyó de Terrassa

Mi web
Arriba
hipromark Ver desplegable
Habitual
Habitual
Avatar

Unido: 18/Julio/2016
Localización: Caracas
Estado: Sin conexión
Puntos: 71
Enlace directo a este mensaje Enviado: 13/Octubre/2020 a las 09:42
Pues Xavi como todo, puede ser un tema personal, pero yo opino que si los técnicos de Microsoft ya nos han hecho el trabajo creando la funcionalidad de Macros en Access, que además tiene opciones de documentación, y esa herramienta ha pasado controles de calidad de Microsoft, pues me parece como inventar el agua tibia ponerse a programar un código casero cuyo control de calidad lo hace un sólo individuo, y por eso digo que muchas veces no hay la necesidad de hacer ese trabajo extra. 

Yo hago 99 por ciento de lo que necesito hacer en Access con las herramientas de Access y sólo me siento a programar en VBA cuando es estrictamente necesario.

Arriba
Mihura Ver desplegable
Administrador
Administrador
Avatar

Unido: 06/Mayo/2005
Localización: En la dehesa
Estado: Sin conexión
Puntos: 13990
Enlace directo a este mensaje Enviado: 13/Octubre/2020 a las 10:06
Hola hipromark,

No conozco ni un solo informático -que use Access profesionalmente- que no diga lo que ha referido Xavi:
     "Yo huyo de las macros como del diablo"

Tú serías el primero, ... para todo hay una primera vez.  Wink


Jesús Mansilla Castells.
Saludos desde Móstoles.

Access Aplicaciones
Tecsys.es
Arriba
xavi Ver desplegable
Administrador
Administrador
Avatar
Terrassa-BCN

Unido: 10/Mayo/2005
Localización: Catalunya ||||
Estado: Sin conexión
Puntos: 14720
Enlace directo a este mensaje Enviado: 13/Octubre/2020 a las 10:34
Ya dije que era una preferencia personal. Y, como dice Jesus, no conozco conocía ni un solo desarrollador Access (y conozco unos cuantos) que prefiera una macro a un código VBA. Ya no podré seguir diciendo lo mismo.

Un saludo


Xavi, un minyó de Terrassa

Mi web
Arriba
hipromark Ver desplegable
Habitual
Habitual
Avatar

Unido: 18/Julio/2016
Localización: Caracas
Estado: Sin conexión
Puntos: 71
Enlace directo a este mensaje Enviado: 13/Octubre/2020 a las 10:36
Pues ya puedes contarle a tus amigos. Yo llevo 20 años -trabajando profesionalmente con Access- y nunca he huído de los Macros aunque puedo programar con VBA cuando es necesario, y también te puedo comentar que mi padre ha trabajado por más de 30 años con Access desarrollando aplicaciones para muchas empresas en Venezuela y en los Estados Unidos y nunca ha escrito una sola linea de código en su vida. Como te parece.
Arriba
Mihura Ver desplegable
Administrador
Administrador
Avatar

Unido: 06/Mayo/2005
Localización: En la dehesa
Estado: Sin conexión
Puntos: 13990
Enlace directo a este mensaje Enviado: 13/Octubre/2020 a las 10:45
Bueno, visto lo visto, y que JoseraGR ha solucionado su problema cerramos el hilo.


P.D. Access 1.0 sale al mercado en el año 1.992.
Jesús Mansilla Castells.
Saludos desde Móstoles.

Access Aplicaciones
Tecsys.es
Arriba
 Responder Responder
  Compartir tema   

Ir al foro Permisos de foro Ver desplegable