Valor de la opción decimal en un grupo de opciones.

En un formulario de access quiero poner una serie de grupos de opciones (son preguntas de un test) en donde el valor de la opción de alguna de ellas tiene que ser 0.5 y no me deja, poniéndolo a 0. Necesito que ese valor lo vuelque a los campos de la tabla para luego sumarlos. No me permite poner como valor de la opción un número decimal. No se si esto puede ser.

1 respuesta

Respuesta
1
No acabo de entender tu consulta. ¿Podrías explicarme cómo creas ese grupo de opciones, y dónde quieres poner ese 0.5 que comentas?
Se trata de lo siguiente:
A la hora de poner un grupo de opciones en un formulario, me va preguntando los botones de opciones que quiero poner. Una vez que están puestos, me pregunta que valor quiero dar a cada botón (por defecto el programa va dando 1,2,...). Pues bien, es en ese valor donde yo quiero darle un valor decimal (en mi caso 0.5) pero no me deja. El campo de la tabla donde luego se refleja este valor lo tengo como número decimal.
No se cual es el problema
Muchas gracias por responder tan rápido
Te comento: ese valor que me comentas no es el valor que va a tener el campo, sino que es el valor identificador de la opción, y por eso no te deja poner el 0.5 que comentas.
En otras palabras, y dicho de otra manera, el valor que te pide es un valor para identificar la opción. De manera que, si el usuario marca el "primer circulito", Access sepa que la opción marcada es la 1, y así sucesivamente.
Lo que tú quieres hacer se debe hacer a través de código. Es un poco trabajosillo, pero yo te explico el primero y tú tendrás que hacer lo mismo para todos:
Vamos a suponer lo siguiente: tú tienes un campo que le llamaré Resp1, y ese campo recogerá el valor de la respuesta del cuadro de opciones. La tabla donde se recoge la información de las respuestas se llamará TRespuestas.
Tienes que hacer lo siguiente:
1.- Creas un formulario basado en la TRespuestas. Eliminas todas las etiquetas y sacas las propiedades del campo Resp1. Te vas a Pestaña Formato-> Visible: NO. Pones ese campo en algún rinconcillo del formulario donde no te moleste.
2.- Creas un grupo de opciones. Te saldrá el asistente. Aquí dejas los valores que te marca por defecto. Configuras todos los pasos hasta que te llegue la pantalla de "qué quieres hacer con el valor de la opción seleccionada". Le marcas "Guardar el valor para un uso posterior". Sigues con la configuración hasta el final. Para este ejemplo yo ye supuesto tres opciones.
3.- Sacas las propiedades del marco y te vas a la pestaña Otras->Nombre y le pones por nombre (sin comillas): mrcR1
4.- Todavía en esas propiedades te vas a la pestaña Eventos y te vas al evento "Después de actualizar". Clicas sobre el pequeño botón de puntos suspensivos y, en la pantalla que te sale, le dices que quieres generar código. En la nueva pantalla que te sale le escribes el siguiente código:
---
Private Sub mrcR1_AfterUpdate()
Dim vR As Integer
'Coge el valor de la opción marcada
vR = Me.mrcR1.Value
'Actúa en función de la opción marcada
Select Case vR
'Primera casilla seleccionada. Supongamos que
'su puntuación es 0,5
Case 1
Me.Resp1.Value = 0.5
'Segunda casilla. Supongamos que su puntuación
'es 1,5
Case 2
Me.Resp1.Value = 1.5
'Tercera casilla. Supongamos que su puntuación
'es 2,5
Case 3
Me.Resp1.Value = 2.5
'Por si acaso, el valor en caso de no hacer nada
'es cero
Case Else
Me.Resp1.Value = 0
End Select
End Sub
---
Si tuvieras una cuarta opción deberías añadir una línea más de código, siempre por encima del Case Else, del tipo
Case 4
Me.Resp1.Value = el valor que quieras
5.- Añades en el formulario un cuadro de texto, y le ponemos de nombre txtTotal. En ese cuadro escribes: Resp1+Resp2+. +RespN
Así, ese cuadro iría recogiendo los totales.
6.- Esto deberías hacerlo para cada uno de los grupos de opciones que crearas, evidentemente cambiando sus nombres para identificarlos inequívocamente (mrcR2, etc.) y en el código vR = Me. MrcR2. Value, por un lado, y Me. Resp2. Value, por otro, etc.
Ya me dirás qué tal te ha ido. Ante cualquier problemilla me comentas.
Lo primero agradecerte la contestación pero 2 cosas:
- Haciendo lo que me dices funciona bien pero como son test que se van pasando a varias personas, al poner una opción se queda marcada para el resto como predeterminada y al salir del formulario el test se queda sin marcar como si no estuviera hecho aunque en la tabla si quedan almacenados los valores
- Sigo sin entender lo del valor de la opción que me explicas al principio porque realmente ese valor, yo puedo poner el que quiera mientras sea un nº entero y me lo guarda en el campo de la tabla que yo elija y puedo sumarlos.. etc.. El problema es que no puedo poner un decimal.
Muchas gracias
Paso a contestar tus preguntas por orden de fácil a difícil:
- Primero, la última: efectivamente, tú puedes poner el número que quieras mientras sea un entero. Eso significa que las características del grupo de opciones sólo admiten números enteros. Es algo predeterminado de Access y no se puede cambiar. No tiene nada que ver con el tipo que tengas tú definido en tu campo, porque estableces la relación entre grupo de opciones y campo a posteriori.
Por ejemplo, si tu campo fuera String, si intentas, en el grupo de opciones, poner los valores "Primera opción" (en vez de 1) verás que te salta un mensaje de error. No te admite un string.
Cuando le metes un valor decimal, en vez de saltarte un mensaje de error, lo que hace es redondear a un entero.
En definitiva, es el objeto "grupo de opciones" que, por sus características, no admite valores decimales.
- Entiendo que cuando quieres añadir un registro nuevo te quedan marcadas las respuestas del usuario anterior. Para mí, esto es un "fallo" de Access (hablo en genérico, no es que Access falle). Para corregir lo anterior te propongo la siguiente solución:
1.- Creas un botón de comando que tenga por titulo algo parecido a "Guardar respuestas e ir a nuevo cuestionario". De nombre (te recuerdo: Propiedades->Pestaña Otras->Nombre) le ponemos cmdGuardaYNuevo
2.- A ese botón, en el evento "Al hacer click", le añades el siguiente código:
---
Private Sub cmdGuardaYNuevo_Click()
    DoCmd. RunCommand acCmdSave
    DoCmd. RunCommand acCmdRecordsGoToNew
    Dim mrcs As Object
    For Each mrcs In Me.Controls
        With mrcs
            Select Case .ControlType
                Case acOptionGroup
                    .Value = Null
            End Select
        End With
    Next
End Sub
---
Lo que hace este código es recorrer todos los grupos de opciones del formulario y asignarles el valor "Null" para que "borre" las opciones que habían quedado marcadas.
3.- Respecto de la tercera cuestión, que es ver las opciones que marcó en su día un usuario, esto ya es una cosa más difícil y un poco más laboriosa. Antes de darte una respuesta detallada necesitaría que me indicaras qué nombre has puesto a los grupos de opciones. Basta que me des el nombre de los tres primeros, suponiendo que ahí veré la secuencia que has utilizado para nombrarlos. Por ejemplo, los nombres de mi ejemplo eran mrcR1, mrcR2, etc.
Con esta información podré ser más preciso en la respuesta.
Ya me dirás cosas.
Muchas gracias porque hasta ahora va funcionando como me dices. El nombre de los grupos que me pides son: pregunta1, pregunta2, pregunta3... y los campos de las tablas son pr1, pr2, pr3... Lo que necesitaría ahora es lo que tú dices, que pudiera recuperar las opciones que cada paciente (son pacientes) rellenó en un momento determinado (son test que se pasan cada cierto tiempo y van con fecha) y no solo el valor total del test que eso lo hago con el sumatorio. (Con lo fácil que era si dejara coger el valor decimal). De nuevo muchas gracias por tu tiempo.
Como ya te comentaba el proceso va a llevar un poquito de trabajo, pero así seguro que pasamos un rato divertido ;
Parto del supuesto que, cuando creaste los marcos, dejaste los valores que te salían por defecto (1 para la opción primera, 2 para la opción segunda, etc.).
Vamos allá:
1.- Abres en vista diseño la tabla donde recoges la información. Ahí tienes que añadir tantos campos nuevos (los llamaremos Ox -> O de "O"pcion) como preguntas tienes en el cuestionario. Todos estos campos serán de tipo número. Es decir, añades:
O1, O2, O3, ., Ox. Guardas la tabla.
2.- Abres el formulario en vista diseño y te vas a "Agregar campos existentes". Verás que ahora te aparecen los campos recién creados. Los tienes que arrastrar uno a uno al formulario (a algún rinconcito donde no molesten porque no se van a ver).
La manera más rápida es arrastrarlos "a saco" y después hacer una selección múltiple. Es decir, sin soltar la tecla shift (mayúsculas), haces:
- Click sobre las etiquetas. Cuando las tengas todas seleccionadas le das a la tecla Supr y borrarás todas las etiquetas
- Click sobre los campos. Cuando los tengas todos seleccionados te vas a propiedades, pestaña formato, propiedad visible, y la estableces en NO
3.- Ahora pulsas la combinación de teclas ALT+F11. Se te abrirá el editor de VB. Allí verás todo el código que escribiste a los marcos "After Update". A cada uno le tienes que añadir una línea de código (justo debajo de la línea "valor=.", que diga:
Me.Ox.Value = valor
Te debería quedar, para el primero, algo así como:
valor = Me.pregunta1.Value
Me.O1.Value = valor
Para el segundo:
valor = Me.pregunta2.Value
Me.O2.Value = valor
Y así con todos.
4.- Ahora supongo que en formulario tendrás algún campo que identifique al paciente (un ID, un código, o incluso un nombre). Tenemos que coger el nombre de ese campo identificativos para el código que te explico en el punto 5. Para el ejemplo supongamos que el campo se llama "IdPaciente"
5.- Volvemos al formulario. Sacamos las propiedades del formulario y nos vamos a Pestaña Eventos->Al activar registro. Allí le decimos que queremos generar código y le escribimos el siguiente código (ojo, que está incompleto. Tú tendrás que acabar de escribirlo):
---
Private Sub Form_Current()
Dim vID As Variant
vID = Me.IdPaciente.Value
If IsNull(vID) Then Exit Sub
Me.respuesta1.Value = Me.O1.Value
Me.respuesta2.Value = Me.O2.Value
'Aquí todas las que tengas cambiando la numeración hasta
Me.respuestaX.Value = Me.Ox.Value
End Sub
---
Recuerda que tienes que cambiar los nombres que me he inventado por los que tú tengas en tu BD.
---
Aprovecho para apuntarte un par de ideas que quizá puedan ser de tu interés. Si te parecen atractivas pues las aplicas ;):
Para poder abrir el formulario donde está el cuestionario en función de la utilidad que le vas a dar puedes hacer lo siguiente:
Copias el formulario y lo pegas con otro nombre, por ejemplo, si el original es FTest, pues este será FTestConsulta
Creas un formulario en blanco, que te hará de menú. Ahí insertas dos botones: uno para abrir FTest y otro para abrir FTestConsulta.
En el botón que abre FTest, en vista diseño, haces click con el botón derecho y clicas sobre la primera opción "Generar Evento.", y después generar código. Le escribes este código:
DoCmd. OpenForm "FTest",,,, acFormAdd
Lo que hace este código es abrirte el formulario y dejarlo a punto para introducir un nuevo registro.
En el botón que abre FTestConsulta, en vista diseño, haces lo mismo que en el anterior y le asignas este código:
DoCmd. OpenForm "FTestConsulta",,,, acFormReadOnly
Lo que hace este código es abrirte el formulario y mostrarlo como sólo lectura, para no poder modificar ningún dato por error.
A lo anterior hay que añadir que en FTestConsulta, en vista diseño, puedes borrar el botón de añadir registro porque no tiene sentido si sólo es consulta.
Evidentemente tendrás que adaptar los nombres que te he escrito a los que tú realmente tengas en tu BD
En este último formulario (FTestConsulta) se puede poner un campo para realizar búsquedas, pero eso es otra historia ;)
Espero que todo te funcione bien. Ante cualquier duda me dices cosas.
Un gran saludo, y suerte!
Bueno, la cosa va mejorando pero tras poner el código del punto 5 que me dices, no veo que queden marcadas las respuestas que ya han sido dadas. Si que en los campos Ox que hemos creado aparece el nº (1,2,3...) pero no en el formulario. Siento darte tanta paliza. Saludos
He hecho algunas pruebas con una miniBD y a mí sí que me funciona. Luego no se me ocurre qué puede estar fallando.
El punto 3 coge el valor del grupo de opciones y lo lleva al campo Ox
El punto 5 coge el valor del campo Ox y lo lleva al grupo de opciones
El proceso en sí es simple. Así, "a distancia", no puedo saber qué es lo que está yendo mal. Si te parece bien, llegados a este punto, ¿me podrías pasar la BD (please, comprimida en zip) y yo le echo un vistazo? Si tienes registros confidenciales puedes pasarme una copia borrando todos los registros.
Mi mail es [email protected]
Bueno. Ya me dirás cosas.
Ya esta, ya está. En el punto 5 me había confundido y donde había que poner el nombre del marco, ponía el nombre del campo. Ya funciona perfectamente.
Muchísimas gracias por tu tiempo e interés. Un saludo

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas