none
recordset.fields(2) NO ACEPTA DECIMALES RRS feed

  • Pregunta

  • Hola.... alguien me podria ayudar compañeros? tengo la siguiente tabla en sql express 2008, el codigo en vb 6.0 el problema es que cuando escribo en sql directatamente si me acepta los decimales y cuando se lo paso por el recordset no, por ejemplo, le pongo 9.2 y me gurada 92.0 ya intente de todo convertir a double, currency y nada

    CREATE TABLE [dbo].[productos](
     [codigo] [varchar](20) NOT NULL,
     [descripcion] [varchar](100) NULL,
     [precioventa] [decimal](18, 2) NULL,
     [existencias] [decimal](10, 2) NULL,

    Registros.Fields(1) = VarDescripcion
    Registros.Fields(2) = CCur(Trim(VarPrecioVenta))

    Registros.Fields(2) = Cdbl(Trim(VarPrecioVenta))

    Registros.Update

    A Alguno de ustedes y le ha pasado? como lo hamn solucionado

    Gracias


    Jose Maria Bracamontes Almeraz

    domingo, 2 de junio de 2013 0:03

Respuestas

  • He estado probando en mi vb6 en español ahorita mismo y efectivamente si le pasas un 9.20 a CCur() o CDbl() te devuelve un 920... pero lo pruebo haciendo CDbl("9,20")  y te devuelve 9,2... 

    Pruebas a pasarle separador decimal una coma ok?? 


    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó vótala como útil. Saludos

    • Marcado como respuesta jmba24 domingo, 2 de junio de 2013 19:05
    domingo, 2 de junio de 2013 18:24
  • Visual Basic te está cogiendo la configuración regional del equipo sobre el que estas trabajando. Si cambias el idioma de Windows a ingles ya veras como le pasas 9,2 con coma y te sucede lo mismo. Pruébalo ya veras que es así. Sabiendo esto, debes trabajar si estas en español con coma coma separador decimal y automáticamente el recordset lo adecua al tipo de dato que entiende SQL...espero haberme explicado. Si no, házmelo saber

    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó vótala como útil. Saludos

    • Marcado como respuesta jmba24 domingo, 2 de junio de 2013 19:36
    domingo, 2 de junio de 2013 19:20

Todas las respuestas

  • Hola, lo primero estas estableciendo dos veces el mismo campo

    Registros.Fields(2) = CCur(Trim(VarPrecioVenta))

    Registros.Fields(2) = Cdbl(Trim(VarPrecioVenta))

    si te fijas estas asignado fields(2) un par de veces.

    luego te recomiendo que no uses una variable string para coger los valores numericos

    Estas haciendo CCur(Trim(VarPrecioVenta)),ves que estas hsciendo un Trim()?? Porque no usas VarPrecioVenta de tipo currency o double? Asi te evitarias problemas de esos,te quedaria asi

    Dim VarPrecioVenta As Double

    VarPrecioVenta = 92.0

    Registros.Fields(2) = VarPrecioVenta


    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó vótala como útil. Saludos



    domingo, 2 de junio de 2013 15:11
  • el valor lo estoy obteniendo de un textbox, al asignarselo a una variable de tipo double o currency  me quita el punto decimal

    dim miprecio as currency

    miprecio=precio.text

    (aqui es cuando pasa de ser 9.2 a 920)

    si lo manejo con el textbox todo esta bien, lo debugeo con F8 y cuando llega al

    Registros.Fields(2) = VarPrecioVenta

    llega con 9.2, pues lo estoy debugenado y es el valor que contiene varprecioventa, no se por que el recorset no esta respetando ese valor


    Jose Maria Bracamontes Almeraz

    domingo, 2 de junio de 2013 17:35
  • Te comento una cosa, en todo motor de base de datos nunca se guarda un valor numérico con comas como separador decimal eso ya lo sabes no? asi que el problema está en la conversion del dato de tipo texto a currency o double. Que idioma tienes configurado en tu equipo?

    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó vótala como útil. Saludos

    domingo, 2 de junio de 2013 18:18
  • He estado probando en mi vb6 en español ahorita mismo y efectivamente si le pasas un 9.20 a CCur() o CDbl() te devuelve un 920... pero lo pruebo haciendo CDbl("9,20")  y te devuelve 9,2... 

    Pruebas a pasarle separador decimal una coma ok?? 


    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó vótala como útil. Saludos

    • Marcado como respuesta jmba24 domingo, 2 de junio de 2013 19:05
    domingo, 2 de junio de 2013 18:24
  • curiosamente trato de ejecutar el siguiente codigo en una query de sql magnament studio y marca error

    update productos set precioventa='9,2'

    error al convertir el tipo de datos varchar a numeric.....

    ahora lo que hice en vb fue pasarle los datos al recordset con coma....... 

    no entendo si sql no acepta la coma y vb no acepta el punto...... entonces donde esta el bug????

    todo lo solucione de la siguiente manera:

    registros.fields(2)=replace(varprecioventa,".",",")

    registros.update

    sustituyendo el punto por la coma y asignandoselo al recorset..... se supone que el recordset se lo envia a sql.... si sql no acepta la coma..... como esta esta situacion????


    Jose Maria Bracamontes Almeraz

    domingo, 2 de junio de 2013 19:12
  • update productos set precioventa='9,2'

    error al convertir el tipo de datos varchar a numeric.....

    efectivamente te da ese error en el management studio porque le estas pasando a un campo decimal una cadena de caracteres. Si haces la consulta update productos set precioventa=9.2 te funciona seguro.


    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó vótala como útil. Saludos

    domingo, 2 de junio de 2013 19:17
  • Visual Basic te está cogiendo la configuración regional del equipo sobre el que estas trabajando. Si cambias el idioma de Windows a ingles ya veras como le pasas 9,2 con coma y te sucede lo mismo. Pruébalo ya veras que es así. Sabiendo esto, debes trabajar si estas en español con coma coma separador decimal y automáticamente el recordset lo adecua al tipo de dato que entiende SQL...espero haberme explicado. Si no, házmelo saber

    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó vótala como útil. Saludos

    • Marcado como respuesta jmba24 domingo, 2 de junio de 2013 19:36
    domingo, 2 de junio de 2013 19:20