none
Suma RRS feed

  • Pregunta

  • Hola a todos.

    Tengo este código con el cual pretendo simplemente poner en un texbox el resultado de la suma. Dicho texbox esta configurado por propiedades para formatear ese dato en valores numéricos con comas y dos decimales.

    Sin embargo, no funciona así y hay que recurrir a funciones para lograr el formato. Ejemplo FormatNumber()

     Using connection As New SqlConnection(ConfigurationManager.ConnectionStrings("TickePack.My.MySettings.BoleteriaConnectionString").ConnectionString)
                Dim comando As New SqlCommand("SELECT SUM(cantidad) AS Suma FROM            Movimientos 
    WHERE        (Movimientos.codruta = @codruta) AND (Movimientos.fecha = @fecha) AND (Movimientos.codhor = @codhor)", connection)
                Dim adapter As New SqlDataAdapter(comando)
                Dim table As New DataTable
                comando.Parameters.Clear()
                comando.Parameters.AddWithValue("@fecha", Today)
                comando.Parameters.AddWithValue("@codruta", LookRuta.EditValue)
                comando.Parameters.AddWithValue("@codhor", LookProg.EditValue)
    
                connection.Open()
                Dim suma As Object = comando.ExecuteScalar()
                TexVendidos.EditValue = suma
                connection.Close()
            End Using

    He intentado que la variable suma sea Int32 y no funciona cuando hay valores nulos. Intento condicionar con IIF() para poner cero si es null y como quiera lanza el error.

    Quiero obtener el valor y poder formatearlo sin mas contratiempo a "###,###.##"

    Gracias.

    viernes, 14 de diciembre de 2018 2:30

Respuestas

  • Hola Formulaz5:

    No inicialices suma como object, sino como int32, si no quieres que tenga decimales. O como cualquier valor con decimales,

    pero en la consulta haz dos cosas.

    la primera si la resolucion es nula la consulta sería.

    select isnull(sum(cantidad),0) as SUMA ....

    Si cantidad no coincide con el tipo de dato que necesitas en base de datos, entonces, "castealo"

    Select cast (isnull(sum(cantidad),0) as float) as SUMA ....

    de manera que si cantidad por ejemplo es decimal(10,4) y tu lo quieres insertar en un double, la base de datos, ya te devuelva el dato formateado al tipo esperado.

    Espero te ayude

    • Propuesto como respuesta Pedro AlfaroModerator viernes, 14 de diciembre de 2018 17:14
    • Marcado como respuesta Formulaz5 viernes, 14 de diciembre de 2018 18:32
    viernes, 14 de diciembre de 2018 7:06

Todas las respuestas

  • Hola Formulaz5:

    No inicialices suma como object, sino como int32, si no quieres que tenga decimales. O como cualquier valor con decimales,

    pero en la consulta haz dos cosas.

    la primera si la resolucion es nula la consulta sería.

    select isnull(sum(cantidad),0) as SUMA ....

    Si cantidad no coincide con el tipo de dato que necesitas en base de datos, entonces, "castealo"

    Select cast (isnull(sum(cantidad),0) as float) as SUMA ....

    de manera que si cantidad por ejemplo es decimal(10,4) y tu lo quieres insertar en un double, la base de datos, ya te devuelva el dato formateado al tipo esperado.

    Espero te ayude

    • Propuesto como respuesta Pedro AlfaroModerator viernes, 14 de diciembre de 2018 17:14
    • Marcado como respuesta Formulaz5 viernes, 14 de diciembre de 2018 18:32
    viernes, 14 de diciembre de 2018 7:06
  • Se me olvidaba, tienes que comprobar que la consulta resuelva algo, porque puede que no tengas datos, en el conjunto a resolver, por tanto evaluar, en tu código cliente, si ha traido algo, sino le pones un 0.
    viernes, 14 de diciembre de 2018 7:08
  • Gracias Javi.

    Así lo haré para evitar problemas.

    viernes, 14 de diciembre de 2018 18:33