Actualizar tabla con campos calculados en Formularios

Me acabas de solucionar otra pregunta que de nuevo te agradezco, pero tengo otra duda que también me tiene atascado, a ver si me la puedes solucionar:
Tengo un formulario llamado 1-Facturas, en él tengo varios cuadros de texto que toman el valor de una tabla llamada Alumnos, y luego tengo otros cuadros de texto en los que en Propiedades-Origen del control, hacen un cálculo basado en los otros cuadros de texto,
Ejemplo: en el cuadro de texto Total1 tengo: =[Precio Mensual]*[Cantidad de Horas] que son 2 campos de la tabla Alumnos; en esa misma tabla tengo el campo Total1, pero no sé cómo hacer para que en ese campo aparezca el valor calculado con los otros campos, por lo que está vacío, lo mismo me pasa con los cálculos que tengo con otros conceptos, con dto, etc..
Tengo una consulta de anexar con la que añado en la tabla Facturas, los campos de la Tabla alumnos necesarios para las facturas, pero todos los campos que tengo calculados como el del ejemplo anterior me aparecen vacíos.
La duda concreta del ejemplo que pongo es: ¿Cómo hago para que en la tabla Alumnos me aparezca en el campo Total1 el resultado de multiplicar el valor de los campos Precio Mensual y Cantidad de Horas?
Y otra pregunta ¿el nombrar a los campos con nombres que contienen espacios da problemas en VBA? Cuando empecé con la base no tenía pensado andar con visual basic y puse nombre como Cantidad de Horas, que igual me convendría cambiar para evitar problemas, ¿no?
Un saludo de nuevo y gracias por tu ayuda.
{"lat":42.8184002681643,"lng":-1.64468765258789}

1 respuesta

Respuesta
1
Cuando se hacen cálculos en un cuadro de texto hay que referir los campos al formulario.
Si los cuadros de texto se llaman [Precio Mensual] y [Cantidad de Horas] sería:
=form![Precio Mensual].Value*Form![Cantidad de Horas].Value
Para anexar el cuadro de texto Texto1 sería " & Form!Texto1.Value & " ya que el campo de la tabla es numérico, si el campo de la tabla fuese de texto '" & Form!Texto1.Value & "' y si fuese de fecha cDate('" & Form!Texto1.Value & "')
la sql sería: Insert Into Alumnos (Total1) Values (" & Form!Texto1.Value & ")
Respecto de los espacios en blanco en campos y tablas, es mejor no tenerlos, pero con los [] funcionan perfectamente, unicamente la molestia de ponerlos.
Me cuentas.
Gracias,
No me queda Claro, a ver si he hecho bien,
En Propiedades-Origen del control del cuadro de texto Total1 escribo como me dices:
 =form![Precio Mensual].Value*Form![Cantidad de Horas].Value , sustituyo Precio Mensual por PrecioEuros que es como he llamado al cuadro de texto, y se me convierte automáticamente en: =[Formulario]![PrecioEuros].[Valor]*[Formulario]![Cantidad de Horas].[Valor]
¿dónde tengo que poner Insert Into Alumnos (Total1) Values (" & Form!Texto1.Value & ")?
Tampoco entiendo qué es Texto1, ¿es el nombre del cuadro de texto donde estoy haciendo los cálculos (entonces sería Total1, no?)?
Como me indicaste en otra consulta tengo un sub en (lo he asignado a un botón llamado numerar, para numerar las facturas cuando le doy), ha quedado así:
Private Sub Numerar_Click()
Dim db As Database
Dim vFac As Double
Dim rs1 As Recordset
Dim rs2 As Recordset
Set db = CurrentDb
Set rs1 = db.OpenRecordset("Select Max(NumFactura) as UltFac From Facturas")
vFac = rs1!UltFac
Set rs2 = db.OpenRecordset("Select NumFactura From Alumnos Order by Nombre")
Do While Not rs2.EOF
vFac = vFac + 1
rs2.Edit
rs2!NumFactura = vFac
rs2.Update
rs2.MoveNext
Loop
End Sub
Private Sub Numerar_Click()Dim db As DatabaseDim vFac As DoubleDim rs1 As RecordsetDim rs2 As RecordsetSet db = CurrentDbSet rs1 = db.OpenRecordset("Select Max(NumFactura) as UltFac From Facturas")vFac = rs1!UltFacSet rs2 = db.OpenRecordset("Select NumFactura From Alumnos Order by Nombre")Do While Not rs2.EOFvFac = vFac + 1rs2.Editrs2!NumFactura = vFacrs2.Updaters2.MoveNextLoopEnd Sub
He intentado añadir la linea que me pones: Insert Into Alumnos (Total1) Values (" & Form!Texto1.Value & ") pero me da error de compilación en Alumnos (se esperaba fin de la instrucción)
Gracias de nuevo por tu ayuda
;-D
Son demasiadas cosas para verlas aquí, si quieres mándame la BD (en access 2003 y con pocos registros para que no pese mucho) y la echo un vistazo.
[email protected]
Hasta luego, Angeles
Hola Ángeles;
He probado como me dices con DoCmd. RunSql "Insert Into Alumnos (Total1) Values (" & Form!Texto1. Value & ")", lo he puesto en el loop que va registro a registro sumando 1 al nº de factura, pero lo que me hace es coger el valor de Total1 del primer registro de la Tabla Alumnos y en la tabla Facturas me crea un registro nuevo con todos los campos vacíos menos el campo Total1 que tiene siempre el valor del Total1 del primer registro de la Tabla Alumnos.
No entiendo cómo no hay una manera sencilla de hacer que un campo calculado en un formulario se pueda archivar en una tabla, ya como un valor definitivo. O que en la misma tabla se pueda calcular un campo dependiendo de otros.
Un saludo y gracias por tu ayuda de nuevo.
(xxxxxx)
Creo que no nos estamos entendiendo, una consulta de insertar datos es:
Supongamos que queremos insertar el valor de los cuadros de texto Texto1 y Texto2 en los campos Campo1 y Campo2 de una tabla que llamamos Tabla1, la consulta sería:
DoCmd.RunSql "Insert Into Tabla1 (Campo1, Campo2) Values ('" & Form!Texto1.Value & "', '" & Form!Texto2.Value & "')
Parece que no nos entendemos je je.
Tengo una tabla (Alumnos) tengo una Private Sub que asocio a un botón que tengo en el formulario Facturas, con la que me numera uno a uno los registros con un nº de factura correlativo y cuyo primer nº es el nº del último registro de la Tabla Facturas donde están archivadas las facturas de los meses anteriores. Hasta hay bien.
El Problema viene en que tengo varios campos calculados en el formulario Facturas y quiero que a la vez que el bucle me anota un nº en el campo nº de factura también me asigne los campos calculados del formulario a la tabla alumnos (por ejemplo: tengo unidades de concepto 1 multiplicado por precio1 me da FTotal1 que me gustaría que apareciera en la tabla alumnos en el campo Total1, luego lo mismo con el concepto2, suma de totales, totales menos dtos, etc.)
Si pongo: DoCmd.RunSQL "Insert Into Alumnos (Total1, [Nº Cta/Cte Asteriscos]) Values ('" & Form!FTotal1.Value & "', '" & Form![FNº Cta/Cte Asteriscos].Value & "') "
En el bucle que va numerándome los registroslo que me hace es: cada vez que añade un nº al registro (eso está bien), me añade un nuevo registro en el que los campos Total1 y nº cta... cogen el valor del formulario pero del primer registro y el resto de campos están vacíos, con lo que la tabla alumnos que tenía 30 registros pasa a tener 30 registros con sus campos y su nº de factura, pero con los campos Total1 y Nº de Cta/Cte con asteriscos vacíos y otros 30 registros en los que sólo están esos dos campos y el resto vacíos, y además los 30 con los valores: Total1, ¿115? y Nº Cta... :2054 0099 23 0000****52 pero además los 30 con el mismo valor.
¿Dónde tengo que poner la instrucción DoCmd...? ¿Para qué me añada el valor al campo pero en el mismo registro, sin que cree otro registro?
Siento el rollo, no sé si me explico bien, sé que es difícil entenderlo sin ver la base.
Gracias de todos modos por tu atención.
Mándame la BD (en access 2003) porque no me entero.
¿Te la puedo mandar en access 2007? Porque no me deja convertirla a 2003.
;-D
Lo siento, no tengo access 2007
Acabo de ver tú correo, el lunes lo miro, ahora estoy de "fin de semana" y... tengo muchos compromisos... hoy un cumpleaños, mañana fútbol... bueno que hasta el lunes me lo doy como libre.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas