none
Error al sumar campos de tabla de SQL en VB

    Pregunta

  • Hola!, tengo el siguiente código para sumar todos los campos de una columna con el mismo ID:

     conectar()
            Dim Query As String = "INSERT INTO facturas(NUMERO_DE_ORDEN,NUMERO_DE_FACTURA,FECHA,DESCRIPCION,MONEDA,MONTO_FACTURA,ACUMULADO,SALDO)VALUES(@numorden,@numfact,@fecha,@desc,@moneda,@monto,@acu,@saldo)"
            Dim comando As New SqlClient.SqlCommand(Query, coneccion)
            Dim ac As String = "SELECT SUM(MONTO_FACTURA)@acum FROM facturas  where NUMERO_DE_ORDEN = @numorden" 
            Dim com As New SqlClient.SqlCommand(ac, coneccion)
            Try
    comando.Parameters.AddWithValue("@numorden", comboordenaso.Text)
                    comando.Parameters.AddWithValue("@numfact", txtnumfact.Text)
                    comando.Parameters.AddWithValue("@fecha", txtfecha.Text)
                    comando.Parameters.AddWithValue("@desc", txtdesc.Text)
                    comando.Parameters.AddWithValue("@moneda", combomoneda.Text)
                    comando.Parameters.AddWithValue("@monto", txtmontofac.Text)
                    comando.Parameters.AddWithValue("@acum", com) 'programar para que sea suma de monto
                    comando.Parameters.AddWithValue("@saldo", txtmontofac.Text) 'programar para que sea resta de monto de orden y acu
                    comando.ExecuteNonQuery()
                    conexion.Close()
    
    
    
                    MsgBox("Éxito al Añadir la Factura")
               
            Catch ex As Exception
                MsgBox("No se pudo Insertar la Factura." & vbCrLf & ex.Message)
    
            End Try

    Pero me manda el siguiente error:

    No hay ninguna asignación de tipo de objeto System.Data.SqlClient.SqlCommand a un tipo nativo de un proveedor administrado conocido.

    Que es lo que está mal?

    Gracias!



    • Editado Ziany martes, 8 de noviembre de 2016 16:00
    martes, 8 de noviembre de 2016 15:41

Respuestas

  • Hola:

    Tu posteastes esta consulta
    SELECT SUM(MONTO_FACTURA)@acum FROM facturas  where NUMERO_DE_ORDEN = @numorden"

    La consulta correcta seria
    SELECT SUM(MONTO_FACTURA) As SUMA FROM facturas  where NUMERO_DE_ORDEN = @numorden

    Donde pongo VALOR_DE_FILTRADO se refiere al valor que tiene el parametro @numorden

    > la información la consulto en un datagridview con el resto de campos en la tabla <
    Con la consulta anterior lo que se calcula es la suma del campo MONTO_FACTURA con el filtro de NUMERO_DE_ORDEN, no interviene ningun campo mas.

    Si insertas un nuevo registro, para volver a calcular la suma, tienes que volver a ejecutar la consulta

    Un saludo desde Bilbo
    Carlos
    • Marcado como respuesta Ziany martes, 15 de noviembre de 2016 15:18
    lunes, 14 de noviembre de 2016 21:55

Todas las respuestas

  • Hola:
    Prueba algo como esto

           Try
                Dim msCadenaSQL As String = "Data Source=.\SQLEXPRESS;Initial Catalog=TU_BASE_DE_DATOS;Integrated Security=True"
                Dim lsQuery As String = "SELECT SUM(MONTO_FACTURA) As SUMA FROM facturas  where NUMERO_DE_ORDEN = @numorden"
                Dim loSuma As Object
                Using loConexion As New SqlConnection(msCadenaSQL)
                    ' crear comando
                    Using loComando As New SqlCommand(lsQuery, loConexion)
                        'añadir parametros al comando
                        loComando.Parameters.Add(New SqlParameter("@numorden", "VALOR_DE_FILTRADO"))
                        loConexion.Open()   ' abrir conexión
                        loSuma = loComando.ExecuteScalar()
                    End Using
                End Using
                MessageBox.Show("La suma es: " & loSuma.ToString)
            Catch ex As Exception
                MessageBox.Show(ex.Message)
            End Try
     
    Un saludo desde Bilbo
    Carlos
    martes, 8 de noviembre de 2016 23:15
  • Hola Carlos, gracias por responder.

    No me queda claro, en donde pusiste VALOR_DE_FILTRADO, a que se refiere?, y la información la consulto en un datagridview con el resto de campos en la tabla; me pregunto si haciéndolo de esta manera  se insertará en el gidview y si se actualiza cada vez que inserto una factura.

    Gracias!

    miércoles, 9 de noviembre de 2016 12:58
  • Hola:

    Tu posteastes esta consulta
    SELECT SUM(MONTO_FACTURA)@acum FROM facturas  where NUMERO_DE_ORDEN = @numorden"

    La consulta correcta seria
    SELECT SUM(MONTO_FACTURA) As SUMA FROM facturas  where NUMERO_DE_ORDEN = @numorden

    Donde pongo VALOR_DE_FILTRADO se refiere al valor que tiene el parametro @numorden

    > la información la consulto en un datagridview con el resto de campos en la tabla <
    Con la consulta anterior lo que se calcula es la suma del campo MONTO_FACTURA con el filtro de NUMERO_DE_ORDEN, no interviene ningun campo mas.

    Si insertas un nuevo registro, para volver a calcular la suma, tienes que volver a ejecutar la consulta

    Un saludo desde Bilbo
    Carlos
    • Marcado como respuesta Ziany martes, 15 de noviembre de 2016 15:18
    lunes, 14 de noviembre de 2016 21:55