Expresiones en access 2007

Tengo una tabla de access 2007 con campos numéricos. He creado un formulario para introducir los datos de esos tres campos numéricos, y un cuarto campo (en el formulario) donde quiero que me calcule el Desvío estándar de las tres anteriores. He intentado hacerlo mediante el generador de expresiones pero no lo consigo.

1 respuesta

Respuesta
1
Para hacer lo que comentas necesitas recurrir a código. Te explico cómo se podría hacer. Lo que es importante es que cojas los nombres de los campos que intervienen. Para saberlos, tienes que sacar las propiedades del campo en cuestión, te vas a la pestaña OTRAS y miras qué valor hay en la propiedad Nombre.
En el ejemplo te marco en negrita los nombres que debes cambiar por los que tú tengas en tu formulario, aunque al final te pongo las equivalencias. El cálculo se va a realizar al hacer click sobre un botón de comando.
Vamos allá:
1.- Crea un botón de comando en el formulario (cancelas el asistente). Sacas sus propiedades y le pones de nombre (según te explicaba más arriba) "cmdCalcula" (sin las comillas). Le das con el botón derecho del ratón y marcas la opción "Generar evento", y en la pantalla que te sale le dices que quieres generar código.
2.- Se te abrirá el editor de VB, con dos líneas (La de arriba Private Sub... y la de abajo End Sub). El código que te voy a pasar debes ponerlo entre esas dos líneas.
3.- El código es el siguiente:
---
Private Sub cmdCalcula_Click()
    Dim v1, v2, v3 As Double
    Dim sumaV As Double
    Dim vMedia As Double
    Dim vDEst As Double
    v1 = Me.txt1.Value
    v2 = Me.txt2.Value
    v3 = Me.txt3.Value
    sumaV = v1 + v2 + v3
    vMedia = sumaV / 3
    v1 = v1 - vMedia
    v2 = v2 - vMedia
    v3 = v3 - vMedia
    v1 = v1 * v1
    v2 = v2 * v2
    v3 = v3 * v3
    sumaV = v1 + v2 + v3
    vMedia = sumaV / 3
    vDEst = Sqr(vMedia)
    Me.txtResultado.Value = vDEst
End Sub
---
Las equivalencias son:
Txt1-> Nombre de tu campo donde recoges el primer número
txt2-> Nombre de tu campo donde recoges el segundo número
txt3-> Nombre de tu campo donde recoges el tercer número
txtResultado-> Nombre del cuadro de texto donde tiene que aparecer el resultado
No he puesto puntos de control, por lo que, si por ejemplo, uno de los números está en blanco, te saltará un error de código. Ojo!
Si no me he equivocado en el proceso de cálculo de la desviación típica la cosa debería funcionarte sin más problemas.
Bueno. Ya me dirás.
Muchas Gracias por tu atención.
Estoy entendiendo, ¿pero será posible que el calculo lo saque de manera automática? ¿O a través de un botón de comando es la única opción?
Gracias
Lamentablemente Access no es Excel, y el número de funciones incorporadas es relativamente (y digo relativamente) pequeño.
La función que tú pedías no está.
Si quieres más información mira este link: http://office.microsoft.com/es-mx/access-help/funciones-organizadas-por-categoria-HA010131676.aspx
Si tienes más dudas o puedo ayudarte en alguna cosa más me comentas.
Otra vez,
Donde dije digo digo Diego. Mira que me he pasado dos veces la lista y a la tercera (cuando ya te había enviado el anterior mensaje) la he visto. Suele pasar... :)
Aquí la tienes: http://office.microsoft.com/es-mx/access-help/funciones-ddesvest-dstdev-ddesvestp-dstdevp-HA001228828.aspx?CTT=5&origin=HA010131676
Siento el "patinazo" ;)
Estoy mirando el link.
¿Tampoco entonces seria posible tener ese calculo automático en un campo de un informe?
Porque en una consulta también es imposible.
Gracias
He estado leyendo la información del link y veo que tampoco te serviría para tu caso, porque según lo que pone, además de tenerse que utilizar en un módulo de VBA, opera de manera "vertical" (sobre un conjunto de registros) sobre los datos de una tabla, y no de manera "horizontal" (sobre los campos del mismo registro).
Para conseguir que el resultado se genere automáticamente tenemos que recurrir a un par de "trucos", en función de como estés operando conel formulario. Las situaciones que podemos contemplar (que se me ocurren bote pronto) son las siguientes:
1.- El usuario introduce, por este orden (importante el orden), el primer número, el segundo y el tercero.
Entonces lo que tienes que hacer es sacar las propiedades correspondientes al campo donde introduces el tercer número, te vas a la pestaña eventos y seleccionas el evento "Después de actualizar". Si te pones sobre la parte blanca de su derecha verás que te aparece un pequeño botón con puntos suspensivos. Haces click sobre él y dices que quieres generar código.
En el editor de VBA le escribes el código que te he pasado.
Así, cuando se meta el tercer número y se le dé al enter automáticamente te saldrá el valor en el cuadro de texto que recoge el resultado.
Si al dar al enter te va a un nuevo registro lo que tienes que hacer es sacar las propiedades del formulario, pestaña Otras, y en la propiedad ciclo le seleccionas "Registro activo"
2.- Vas recorriendo los registros (a través de registro anterior-registro siguiente).
Para que se te vaya actualizando el valor en función de los números de cada registro tienes que sacar las propiedades del formulario, eventos, y generarle código al evento "Al activar registro", y, evidentemente, le copias el código que te he pasado.
A ver si con esta sistemática te sirve y te es útil.
Ya me dirás.
Estoy probando estas dos opciones ultimas, pero me da "Error de compilación. No se encontró el método o el dato miembro "
Se debe esto a que mis campos se llaman: peso(kg), peso(kg)2, ¿y peso(kg)3 y los paréntesis generan error?
Gracias
Si le dices "depurar", ¿qué se te marca en amarillo?
Otra cosa, inténtalo poniendo el nombre de tus campos entre corchetes. Por ejemplo:
v1 = Me.[peso(kg)].Value
Ya me dirás.
He cambiado los nombres de los campos en la tabla a "peso1", "peso2", "peso3". No me da error, pero tampoco muestra nada en el campo destino.
Para que te des una idea, es una tabla donde se registran los datos de una evaluación antropometrica. El evaluador debe registrar un total de 120 valores numéricos en dicha tabla, divididos en 1°, 2° y 3° evaluación. (40 + 40 + 40 campos). Las 3 baterías de evaluaciones se guardan en en un registro. Por ejemplo, se evalúa el "peso" (en kg) 3 veces y lo que necesito es que el evaluador vea el desvío de esas 3 mediciones.
Te dejo una imagen del formulario.
http://www.bioforma.com.ar/imagenes/formulario.jpg
¿Esto podría hacerlo también en un informe?.
Muchas Gracias
http://www.bioforma.com.ar/imagenes/formulario.jpg
Al no "ver" qué estás haciendo es muy difícil saber qué es lo que está fallando. Por lo que me comentas parece que te hace bien los procesos pero no asigna el valor obtenido. ¿Por qué no compruebas el nombre del cuadro de texto de destino del resultado (pestaña Otras->Nombre), a ver si está llevando el resultado al cuadro que toca (Me.txtResultado.Value = vDEst)?
De todas maneras te puedo adelantar que los informes son unos bichos a los que hay que dar de comer aparte. Salvo campos calculados relativamente simples, no podrías hacer lo que me comentas en un informe.
La solución pasa por crear un campo en la tabla donde guardas los datos, llamémosle DEst, número doble, y que guarde el valor. Así te ahorrarías el código del evento de formulario "Al activar registro" y el informe lo podrías hacer de manera automática, sin entrar a hacer "cosas raras".
De todas maneras te he preparado una miniBD para que puedas echarle un vistazo para que veas cómo sería el comportamiento de la BD. Tiene los campos mínimos imprescindibles, y a partir de ahí tú le pones el diseño y los campos que necesites. El código está en el evento "después de actualizar" del campo "peso3". Haz todas las pruebas que necesites. Si hay algo que quieras saber sobre la BD me lo comentas. Puedes bajártela aquí.
Bueno. Ya me dirás qué tal. Ante cualquier duda ya sabes ;)

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas