Guardar datos calculados de subform

Os comento mi planteamiento. Tengo una aplicación para la venta de maquinas
Tengo un formulario principal llamado maquinas, basado en la tabla maquinas. Este contiene un subformulario(notas_de_envío), basado en la tabla notas de envío y dentro de este subformulario hay otro, bultos, basado en la tabla bultos.
En el subformulario bultos he creado un cuadro de texto(texto7) en el que calculo el peso total de todos los bultos y también otro cuadro(texto9) para calcular el numero de bultos.
Hasta aquí todo me sale perfectamente, el problema es que en el formulario notas_de_envío tengo esos dos últimos campos también(peso_total y nº_bultos), y quiero que se guarden en la tabla notas de envío. En origen de control pongo el campo correspondiente de la tabla para que lo guarde, pero no se como hacerlo mediante código para calcular esos valores en el subformulario notas_de_envío, no se si tengo que ponerlo en Eventos al cambiar, al actualizar o donde, ni cual es el código, porque he probado distintas maneras y no lo consigo
Me gustaría que me ayudasen

1 respuesta

Respuesta
1
Pues la manera más fácil que conozco es con código.
Debes darle al control que apunta a la tabla (peso_total y nº_bultos), por cierto no es muy recomendable usar º para el nombre de los campos, debes poner lo mismo que pones en los campos calculados. Por ejemplo imagino que tu campo calculado sera algo parecido a
= [campo1]+[campo2]  ¿no?
Pués en el codigo deberías poner:
me.peso_total = me.campo1+me.campo2
Ahora viene lo complicado de definir, digo complicado por que cada uno sabe como lo tiene. Hay que decidir en que "evento" quieres que realice ese calculo. Al salir de un campo determinado, o de todos, al entrar en el campo peso_total, al hacer click en el campo, al presionar un botón de comando, al actualizar el formulario... en fin. Prueba primero si te funciona y luego decides.
Para probar te recomiendo que lo hagas con un botón de comando, lo creas sin el asistente, sin la "varita mágica" seleccionada, y luego en su evento "al hacer click" pones el código anterior y pruebas si te arroja los resultados deseados y te los guarda en la tabla.
Gracias por responder
Para lo del peso:
El origen de control del campo calculado, situado en el formulario BULTOS, es: =Suma([PESO_BULTO]), se encuentra en el texto7.
Lo que quiero es pasar este valor al campo PESO_TOTAL del formulario NOTAS_DE_ENVÍO, que corresponde con el campo de la tabla en que se basa.
Quiero que cuando añada un bulto o modifique el peso de alguno existente se cambie el valor de PESO_TOTAL. En texto7 funciona, dentro del formulario BULTOS funciona correctamente, pero necesito que se guarde en la tabla NOTAS_DE_ENVÍO, que es donde esta el campo PESO_TOTAL.
Probé poniendo en el texto7 en la propiedad "Eventos" Al cambiar lo siguiente:
Texto7 = Forms(FORMULARIO_NOTAS_DE_ENVÍO).Form.PESO_TOTAL.Value
Probé modificando ese código de varias formas, pero no hay manera.
Para lo del numero de bultos sería lo mismo, pero en vez de ser una suma es una cuenta de los bultos que hay, y quiero guardarlo en otro campo, pero el proceso seria el mismo.
No se que es lo que estoy haciendo mal..
Un saludo
Perdón, pero no sé porque me empeñe en que todo ocurría en el mismo formulario.
Me explico por si acaso me confundo: un formulario con un subformulario1 y dentro de este un subformulario2. Lo que quieres es pasar unos datos del subformulario2 al subformulario1.
Entonces la sintaxis correcta es:
me.parent!peso_total = me.texto 7  Si lo realizas en un evento del subformulario2
me.peso_total = Me!nombredelsubformulario2.Form!texto7  Si lo realizas desde el subformulario 1
Me!nombresubformulario1.Form!peso_total = Me!nombresubformulario1.Form!nombresubformulario2.Form!texto7   Si lo haces desde el formulario principal.
Espero haber acertado ahora.
Muchas gracias de nuevo, mejor explicado imposible, aunque no doy con la solución
He probado poniendo ese código en el Evento Al cambiar del campo texto7 pero no consigo nada.
Si lo quiero poner en el formulario principal, ¿sobre qué campo y que evento pongo el código?
Realmente son 3 formularios creados independientemente, he ido arrastrando uno a otro, para que sean subformularios, eso no tendrá nada que ver, ¿no? ¿O debería haber añadidos los formularios mediante el botón de subformularios?
Los subformularios están unidos por claves primarias, por si sirve de algo..
Saludos
No te funciona en el evento al cambiar del campo texto7, porque es un campo calculado, y el "cambio" de datos se hace automáticamente, por lo que Access no lo detecta. Prueba a ponerlo en el evento "al cambiar" del campo donde cambies el peso del bulto, cosa que si supongo que teclearas.
Perdona, pero me acabo de dar cuenta ahora, que es mejor que lo pongar en el evento "después de actualizar" de este último campo que te comento (el texto7 como calculado, tampoco detecta la actualización), ya que el evento "al cambiar" se produce en cada inserción de carácter y te daría problemas.
Un saludo.
Buenas tardes
No obtengo ninguna solución positiva. Ni siquiera intentando lo que me dices en un nuevo formulario.Algo hago mal y no se que.Por ejemplo:
Tengo el formulario f con un cuadro de texto llamado texto1 y dentro añado el subformulario es con un cuadro de texto llamado texto2. Para que salga lo del texto2 en el texto 1 iría a propiedades de texto2 y en el Evento Después de actualizar pondría:
Me.Parent!texto1 = Me.Texto2
He probado tambien con esto otro, por si acaso,pero sigo igual:
Me.f.Form!texto1 = Me.Texto2
Me.Texto2 = f.Form!texto1
Me!f.Form!texto1 = Me.Texto2
Aver si sabes que es lo que estoy haciendo mal..
Muchas gracias
Pues no se, sólo se me ocurre una cosa: ¿Dónde estas poniendo todo eso? ¿En la hoja de propiedades o en el editor de código?
En la hoja de propiedades pulso en el botón ... del evento que quiera y luego en el generador de código.
Una ultima cosilla, si puedes hacerlo, crear dos formularios simples como lo que estoy haciendo yo, con otros datos, y me enseñas el código para ver somo lo haces solo si puedes..
Muchas gracias de todas formas.Aver si algún otro sabría ayudarme, aunque igual es problema del Access 2007, que es la primera vez que lo utilizo(antes utilizaba 2003), pero que tampoco hay mucha diferencia..
Acabo de leer tu contestación y aunque no lo dudaba, he realizado la prueba que dices. Funciona perfecto. Una pregunta el subformulario donde tienes el campo calculado ¿es continuo? (Aunque esto lo que puede crear es un problema de "sincronización") Por eso, ¿No te da ningún resultado? ¿Te da error? ¿Un dato erróneo?. Dime algo más porque por lo demás esta bien. Para hacer la prueba pon un botón de comando que en su evento click ejecute el código, así veras si es problema del evento.
Pero ahora, releyendo lo que me comentas, si en el ejemplo que pones "texto2" es un campo calculado, tienes el mismo problema que te comente antes.
Yo te comento el ejemplo que he realizado:
2 tablas
Tabla1 con los campos cliente, empresa y total peso
Tabla2 con los campos nbulto y peso
He relacionado ambas tablas con los campos cliente <==>nbulto
Un formulario basado en la tabla1 y en el un subformulario basado en la tabla 2
En este subformulario un campo calculado con origen de datos = suma ([peso])
Luego en el subformulario, en el campo peso, en el evento al actualizar he puesto:
me.parent.totalpeso = me.texto7 (este es el nombre del campo calculado)
Y como te digo funciona perfectamente.
Efectivamente me equivoque en el ! (Se me liaron las ideas y las teclas).
Si ves mi último mensaje en mi ejemplo lo he puesto correctamente. De todas las maneras a mi me funciona perfectamente, en este ejemplo y en aplicaciones que tengo por ahí distribuidas.
No comentas que pasa cuando haces click en el botón, si te da error, o que pone en el campo en cuestión o si no hace nada.
Una cosa que se me ocurre, por mirar, es que todos los campos tengan el mismo formato, imagino que numérico.
Buenos días
He comprobado que funciona perfectamente haciendo una nueva base de datos con las tablas y formularios que me has indicado
Tenía varios problemas:
-Antes,al poner el código indicaba: me.parent!totalpeso = me.texto7, que es como me indicaste en una respuesta anterior y asi estaba mal. solamente por poner el simbolo ! en vez de un . ya no funcionaba.
El campo calculado y posteriormente el botón lo tenía puesto en el encabezado del subformulario, en vez de tenerlo en el pie, tampoco me iva por eso.
De todas maneras, ¿aplico estos cambios a mi base de datos y sigue sin funcionarme.Hay alguna opción en los campos o algo que no me permita hacer esto? Es que no comprendo como no puedo funcionar así, porque hago de nuevo un formulario basado en la tabla NOTAS_DE_ENVÍOS y otro en la tabla BULTOS, y los relaciono de la misma manera pero no consigo que tome los datos al hacer click en el botón
Esto es muy raro, pero seguiré intentándolo, modificando formularios, haciéndolos de nuevo.. como sea, je je
Gracias de nuevo
Se me paso contestarte a eso
Cuando hago click en el botó no pasa absolutamente nada, ni me indica error ni nada, se queda el campo vacío.
El campo PESO TOTAL es numérico si, ¿el cuadro de texto texto7 se puede modificar para que sea numérico o hay que hacer alguna otra cosa? ¿No se si en el código tendría que ir el me.texto7.value o algo de eso? Es que lo di en clase pero hace ya un par de años y no recuerdo mucha cosa de Visual..
Si pongo todos los campos en formato texto, ¿funcionará?
Saludos
una vez más. El tema del .value se enseña porque es prudente hacer referencia a la propiedad a la que nos referimos, y además así se aprende a referenciar un control. Pero Access, da esa propiedad como predeterminada, si no la cambias es la que tomara.
La verdad no lo entiendo y veo que no vamos a llegar a ningún lado. Si no tienes inconveniente, ¿Por qué no me remites las tablas y formularios que tienes, y que entran en el problema? Dejalos con sólo un par de datos ficticios (para saber que tipo de datos se introducen) y lo reviso por si encuentro algo.
[email protected]
Ok. El único problema es que hasta el lunes no puedo acceder a esa base de datos, si no te importa el lunes lo mando
Gracias y un saludo
Sin problemas. Mándamela el lunes y la miro .
Buenos días
Te he mandado ya la base de datos con un par de datos, en el formulario principal, los primeros datos se obtendrían de otra bd.
He modificado algunas cosillas de los formularios y por eso no salen datos en algunos casos.
Simplemente es por si puedes averiguar cual es el problema que tengo, que me estoy volviendo loco... je je
Gracias de nuevo
Saludos
Lo siento por mi grave error, mi correo es [email protected] no .com como te indique por error. Intenta mandármela otra vez y lo siento.
No pasa nada, ya está enviado de nuevo
Pues te vas a reír (o no) pero no se que le pasa a la cuenta de correo que no me entra nada (¡Ya decía yo que tenía pocos correos! ¡Ni de publicidad!), así que he abierto otra cuenta
[email protected] (confirmada la dirección y que funciona), ya lo siento, si sigues interesado envíamela de nuevo.
Buenos días.
Te lo he vuelto a mandar
¿Qué raro que no los recibas, sin cambiar nada te ha pasado?
Saludos
Pues si que es raro si, pero así es. En fin, ya la he recibido y creo haber encontrado el error.
Lo primero es, cómo te comente en mi primera contestación, no usar º en el nombre de un campo o control. Al escribirlo en VBA no lo reconoce.
Y por otro lado en el campo nº bultos del subformulario "notas de envío" tenía como origen y como nombre "id maquina". Lo he cambiado y funciona perfectamente.
Si es necesario te la reenvío modificada.
Y recuerda, no utilices símbolos ni acentos en los NOMBRES de campos, controles, formularios, etc.. Otra cosa es en el titulo. En VBA siempre se llama a los objetos por su NOMBRE y todo eso da problemas.
Muchas gracias por ayudarme
Si me gustaría que me lo enviases, así lo tengo de la manera que funciona bien.
Hasta mañana o el lunes no podré modificar la mía, si me lo mandas lo miraré en casa
Tendré en cuenta tus consejos
Gracias de nuevo
Cuando reciba la BD doy por cerrado el tema
Saludos
Ya te he mandado el archivo.
Gracias por enviármelo, pero no puedo abrirlo ya que no dispongo del office 2010, ¿me lo puedes mandar para el 2003?
Un saludo
Por supuesto que te la vuelvo a mandar, aunque sin florituras, es que me voy de fin de semana y si no no te la podría mandar hasta el lunes.
Te la mande en ese formato porque la que me enviaste era una .accdb, pero bueno solucionado.
Te he enivado dos correos. El primero con la extensión .mdb y luego otro con la extensión .jag. Si necesitas el segundo, con cambiarle la extensión a .mdb vale.
(Todo ello es porqué Outlook no suele abrir los archivos con extensión .mdb).

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas