Obtener valor de un campo en un subformulario. |
Responder |
Autor | |
JoseraGR
Nuevo Unido: 06/Octubre/2020 Localización: Granada Estado: Sin conexión Puntos: 20 |
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 . 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 |
|
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: 14734 |
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
|
|
JoseraGR
Nuevo Unido: 06/Octubre/2020 Localización: Granada Estado: Sin conexión Puntos: 20 |
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 |
|
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: 14734 |
Enviado: 07/Octubre/2020 a las 19:13 |
En el evento MatriculaR_CV (que se supone en el formulario principal) , esta línea: 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
|
|
JoseraGR
Nuevo Unido: 06/Octubre/2020 Localización: Granada Estado: Sin conexión Puntos: 20 |
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 |
|
hipromark
Habitual Unido: 18/Julio/2016 Localización: Caracas Estado: Sin conexión Puntos: 71 |
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.
|
|
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: 14734 |
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 |
|
hipromark
Habitual Unido: 18/Julio/2016 Localización: Caracas Estado: Sin conexión Puntos: 71 |
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. |
|
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: 14011 |
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. |
|
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: 14734 |
Enviado: 13/Octubre/2020 a las 10:34 |
Ya dije que era una preferencia personal. Y, como dice Jesus, no
Un saludo
|
|
hipromark
Habitual Unido: 18/Julio/2016 Localización: Caracas Estado: Sin conexión Puntos: 71 |
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.
|
|
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: 14011 |
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.
|
|
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 |