Problema con un campo porcentanje en un formulario

Tengo un problema un poco surrealista, y no sé si me vas a poder ayudar.

Tengo un formulario con un subformulario. En este último, hay un campo de porcentaje de beneficio, en el que el usuario puede introducir dicho porcentaje a aplicar al producto.

El tema es que esta base de datos no la uso yo, sino otra persona a la que le hice la base de datos.

Entonces, esta persona ya me ha llamado dos veces porque, sin saber porqué, introduce mal el porcentaje (textualmente me dice que si quiere poner un 25%, pone el 2, pone el 5, y añade "otra cosa" sin darse cuenta), y el campo se vuelve loco. Entonces, cuando quiere introducir otro porcentaje de beneficio, por ejemplo, 30% (escribiendo 30 nada más), te lo pone como 3000%. Es como si perdiera el formato de porcentaje. Para arreglarlo, tengo que entrar en la tabla (yo, porque el cliente no sabe ni lo tengo habilitado para eso), e introducir un valor cualquiera en ese campo.

Lo más surrealista es que me he copiado la base de datos a mi ordenador, y en el mío no da problemas. Ahora bien, he comprobado la configuración de número de Windows y el cliente (el que usa la base de datos, vamos) tiene la misma configuración que mi portátil. Y, para más inri, si se la copio nuevamente (todo esto sin tocar la tabla ni nada, solo introduciendo el valor en el campo del subformulario), ¡Funciona correctamente! Y para rizar el rizo, intento en su ordenador a provocar el fallo, probando a introducir todo tipo de probabilidades, como 30, 30.45, 30,25%, 300.32... Y no soy capaz de provocar el fallo.

Sinceramente, ya no sé por dónde tirar. He llegado a pensar en el código que le tengo puesto al actualizar ese campo de beneficio. Os paso la configuración del campo, tanto en la tabla como en el formulario, y el código, por si pudiera venir por ahí:

2 respuestas

Respuesta
1

Si no has conseguido reproducir el error que te reporta el cliente, quizá no te esté diciendo toda la verdad. Prueba a poner una máscara de entrada a ver si le vuelve a pasar. Y si los decimales no hacen falta, quítalos y entonces la máscara puede ser 00 o 99.

Respuesta
1

Como bien te dice Ricohablador, si no vas a usar decimales, ¿por qué defines un campo numérico como doble?

Lo normal es que la gente escriba 10, 15, 20, ( sin necesidad de poner %), por lo que bastaría con darle tamaño Byte. Pero incluso, aunque quisieran escribir 7,5 ¿por qué no definirlo como Simple?.

Además, al no decir que "otra cosa" le añade, es difícil saber que se debe corregir. Ya que por ejemplo, por decir algo, podrías poner en su evento Antes de actualizar

If textA>50 then

Msgbox"El descuento no puede ser mayor a a 50"...

Docmd. Cancelevent

end if

Mira, si tengo una tabla con Precio(moneda), PorcentajedeDescuento(byte), PrecioFinalMoneda y con ella hago un formulario

Cuando pulso Enter

Me "cubro" la posibilidad de que deje el porcentaje en blanco. Pero si le pongo un valor

Cuando pulso Enter

Si el campo Porcentaje de Descuento lo definiera como Simple y dos decimales, sería lo mismo

El código del evento Después de actualizar tanto Precio como Porcentaje de descuento es el mismo

Private Sub PorcentajeDeDescuento_AfterUpdate()
PrecioFinal = Precio * (1 - Nz([PorcentajeDeDescuento]) / 100)
End Sub
Private Sub Precio_AfterUpdate()
PrecioFinal = Precio * (1 - Nz([PorcentajeDeDescuento]) / 100)
End Sub

Hola, Julián. Muchas gracias por la info. Desde luego, tengo que aprender a manejar mejor los tipos de numéricos que hay. Yo leí en la ayuda de Access, pero no me queda muy claro para qué casos usar unos y otros.

Un saludo.

Los tamaños de los campos es para evitar, por ejemplo, lo que pasa en la "Alta Cocina", usan unos platos inmensos para ponerte dos aceitunas o tres cucharadas de sopa.

https://docs.microsoft.com/es-es/office/vba/access/concepts/miscellaneous/fieldsize-property?f1url=%3FappId%3DDev11IDEF1%26l%3Des-ES%26k%3Dk(vbaac10.chm4349);k(TargetFrameworkMoniker-Office.Version%3Dv16)%26rd%3Dtrue 

Si eso lo leí, y bien, pero echo en falta un ejemplo con la aplicación práctica.

¿Cuál es la máscara de entrada para un porcentaje?

Te lo pregunto porque he probado a meter 99,99%, y me desconfigura totalmente el campo. Lo tengo formateado como Porcentaje, y la base de datos lo guarda como, por ejemplo, 0,45 (en el caso de 45%). Pero al ponerle esa máscara de entrada, me pone todos los demás campos como 0,45, ¿me explico? Vamos, que los divide todos los cien. Además de que la entrada de números en el campo es rara.

¡Gracias!

Por partes, para un campo porcentaje no necesitas máscara de entrada( puedes ponérsela pero no es necesario). Mira la imagen

De forma que cuando lo defines como simple ya puedes poner decimales, y cuando empiezas a escribir ya te pone "en la cola" el símbolo %

Te he dejado el campo de la respuesta anterior Simple paro nada en formato y le he añadido otro campo Porcentajetextoentero, que no es numérico, sino texto, por si quisiera escribirlo todo él, los números, la coma, los decimales y el símbolo

Si tengo el formulario y sólo pongo valor en PorcentajeNumero

Por el contrario si escribo en el cuadro de texto PorcentajeTextoEntero(no hagas caso a las etiquetas). Escribo sólo 20,54 y el símbolo ya se lo añade Access

Y si quisiera escribirlo todo

Repito que tiene que escribirlo todo, pero el resultado es el mismo

Los códigos son

Private Sub PorcentajeCiento_AfterUpdate()
PrecioFinal = Precio * (1 - Nz([PorcentajeCiento]))
End Sub
Private Sub PorcentajeNumero_AfterUpdate()
PrecioFinal = Precio * (1 - Nz([PorcentajeNumero]) / 100)
End Sub
Private Sub PorcentajeTextoEntero_AfterUpdate()
Dim s As Single
s = Nz(CDec(Left([PorcentajeTextoEntero], 5))) / 100
PrecioFinal = Precio * (1 - s)
End Sub

En el caso de PorcentajeCiento ya no hay que dividir por 100 ya que Access interiormente ya lo hace.

Vale. Voy a ponerlo en simple, porque una respuesta, o más bien una acción, tengo que darle, porque si no parece que no quieres solucionar el problema. Vamos, un placebo.

Gracias por todo.

La pregunta no admite más respuestas

Más respuestas relacionadas