none
Columna Porcentaje RRS feed

  • Pregunta

  • Hola Gente! tengo el siguiente problema. Tengo una BD en access con un campo llamado Rinde que es numérico/decimal.

    Ahora bien, Ese dato surge del siguiente código:
    Private Sub Rinde()
    Dim KgCarneNum As Double
    Decimal.TryParse(KgCarneTxtBx.Text, KgCarneNum)
    Dim KgNetosNum As Double
    Decimal.TryParse(KgNetosTxtBx.Text, KgNetosNum)
    Dim RindeNum As Decimal
    Decimal.TryParse(RindeTxtBx.Text, RindeNum)
    RindeNum = CDbl(KgCarneNum) / CDbl(KgNetosNum)
    RindeTxtBx.Text = RindeNum
    RindeTxtBx.Text = FormatPercent(RindeNum, 2)
    Como veran me genera un numero en porcentaje que al querer agregarlo a la base de datos a través del siguiente codigo me da Error.
    comando = New OleDbCommand("Insert into InfoFrigorifico ( Rinde)" & "values(@Rinde)", cadena)
    comando.Parameters.Clear()
    comando.Parameters.AddWithValue("@Rinde", CDec(RindeTxtBx.Text))
    cadena.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=C:\Users\Dell\Documents\Consignataria.accdb"
    cadena.Open()
    comando.ExecuteNonQuery()

    cadena.Close()

    Desde ya muchas gracias por su ayuda.

    Saludos.

    domingo, 13 de diciembre de 2020 0:06

Respuestas

  •  Yo necesito que me guarde el numero decimal, por ejemplo 51,42 y solo me guarda 51. 

    Cuando ocurre eso, casi siempre es un problema de conversión de tipos. En algún punto del circuito desde donde obtienes el número hasta donde lo grabas, has convertido de String a número o viceversa, y en esa conversión se han truncado los decimales, típicamente por estar usando un separador decimal que no coincide con el esperado por el sistema. Para resolverlo, hay que revisar minuciosamente todos los pasos uno por uno, comprobando en cuáles de ellos se hace alguna conversión de tipo de datos (que en vb.net puede ser implícita, no necesariamente tiene por qué estar escrita una función de conversión en el código fuente), revisar qué es lo que hace esa conversión, y cambiarla para que sea correcta.
    • Marcado como respuesta Gonzalo Radivoj domingo, 20 de diciembre de 2020 14:23
    domingo, 20 de diciembre de 2020 8:31

Todas las respuestas

  • Aunque no has dicho en qué línea sale el error ni cuál es el mensaje del error, sospecho que debe de ser aquí:

    CDec(RindeTxtBx.Text)

    El problema es que RindeTxtBx.Text contiene un texto formateado como porcentaje, pero CDec solo entiende números sin formato.

    La sugerencia es que, en su lugar, utilices RindeNum, que es el número que tenías sin formato antes de asignárselo al textbox:

    comando.Parameters.AddWithValue("@Rinde", CDec(RindeNum))

    O, si lo quieres dividido por 100 para que se salve en porcentaje:

    comando.Parameters.AddWithValue("@Rinde", CDec(RindeNum / 100))

    • Marcado como respuesta EricRRModerator miércoles, 16 de diciembre de 2020 17:12
    • Desmarcado como respuesta Gonzalo Radivoj sábado, 19 de diciembre de 2020 13:19
    domingo, 13 de diciembre de 2020 9:03
  • Hola Gonzalo,

    ¿Alguna novedad sobre la consulta realizada?Espero su respuesta.

    Gracias por usar los foros de MSDN.

    Eric Ruiz

    ____________________________

    Por favor recuerde "Marcar como respuesta" las respuestas que hayan resuelto su problema, es una forma común de reconocer a aquellos que han ayudado, y hace que sea más fácil para los otros visitantes encontrar la solución más tarde.

    Si tiene algún cumplido o reclamo sobre el soporte de MSDN siéntase en la libertad de contactar MSDNFSF@microsoft.com.

    lunes, 14 de diciembre de 2020 15:20
    Moderador
  • Hola Eric buenos dias, disculpa por la demora en la repuesta pero recien pude sentarme en estos dias a ver este tema.  ya marque como respuesta. Gracias


    sábado, 19 de diciembre de 2020 13:19
  • Alberto, muchas gracias por la respueta!! me funciono correctamente!

    Te puedo haceruna segunda consulta. 

    Ese mismo dato lo logre guardar en una Base de datos de access, pero el problema que tengo ahora es que me lo guarda como numero entero, sin los decimales. Yo necesito que me guarde el numero decimal, por ejemplo 51,42 y solo me guarda 51.

    En la base de datos de access la columna la tengo configurada como tamaño de campo decimal, formato: Numero General, Precision: 18, y escala 2

    Desde ya muchas gracias. 

    Saludos. 

    Gonzalo

     

    sábado, 19 de diciembre de 2020 13:28
  •  Yo necesito que me guarde el numero decimal, por ejemplo 51,42 y solo me guarda 51. 

    Cuando ocurre eso, casi siempre es un problema de conversión de tipos. En algún punto del circuito desde donde obtienes el número hasta donde lo grabas, has convertido de String a número o viceversa, y en esa conversión se han truncado los decimales, típicamente por estar usando un separador decimal que no coincide con el esperado por el sistema. Para resolverlo, hay que revisar minuciosamente todos los pasos uno por uno, comprobando en cuáles de ellos se hace alguna conversión de tipo de datos (que en vb.net puede ser implícita, no necesariamente tiene por qué estar escrita una función de conversión en el código fuente), revisar qué es lo que hace esa conversión, y cambiarla para que sea correcta.
    • Marcado como respuesta Gonzalo Radivoj domingo, 20 de diciembre de 2020 14:23
    domingo, 20 de diciembre de 2020 8:31