Visual Basic - Sumar varios campos de SQL en VB

Life is soft - evento anual de software empresarial
 
Vista:
sin imagen de perfil

Sumar varios campos de SQL en VB

Publicado por Ziany (8 intervenciones) el 09/11/2016 15:15:59
Hola a todos, necesito ayuda con una duda,
Necesito saber como lograr sumar todos los campos de una tabla que tengan la misma foreign key (en este caso seria el Numero de Orden)

Creé un procedimiento en SQL, pero no se como pasarlo a visual, de igual manera no se si estará correcto.
Mis tablas son las siguientes:
LA TABLA A MODIFICAR ES ESTA:

1
2
3
4
5
6
7
8
9
10
11
12
create table facturas(
NUMERO_DE_ORDEN BIGint not null,
NUMERO_DE_FACTURA BIGINT not null,
FECHA date not null,
DESCRIPCION varchar(300) not null,
MONEDA VARCHAR (20) NOT NULL,
MONTO_FACTURA MONEY not null,
ACUMULADO MONEY not null,
SALDO MONEY not null
constraint pk_facturas primary key (NUMERO_DE_FACTURA),
constraint fk_facturas foreign key (NUMERO_DE_ORDEN) references orden(NUMERO_DE_ORDEN)
)

El procedimiento para insertar datos en la tabla:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
create procedure insertfact(
@numorden BIGINT,
@numfact BIGint,
@fecha date,
@desc varchar(300),
@moneda varchar(20),
@monto MONEY,
@acu money,
@saldo money
)
as
insert into facturas
values (@numorden,@numfact,@fecha,@desc,@moneda,@monto,@acu,@saldo)
go

El procedimiento que he creado para sumar es el siguiente:

1
2
3
4
5
6
7
8
create procedure acum(
@numorden int
)
as
 
SELECT NUMERO_DE_ORDEN, SUM( MONTO_FACTURA ) ACUMULADO FROM facturas GROUP BY NUMERO_DE_ORDEN
update facturas set NUMERO_DE_ORDEN=@numorden
go

En Visual Basic añado registros a la tabla

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Private Sub btnañadir_Click_1(sender As Object, e As EventArgs) Handles btnañadir.Click
        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)
        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", txtmoneda.Text)
            comando.Parameters.AddWithValue("@monto", txtmontofac.Text)
            comando.Parameters.AddWithValue("@acu", txtmontofac.Text) 'lograr que sea suma de monto de todas las facturas que posean el mismo numero de orden
            comando.Parameters.AddWithValue("@saldo", txtmontofac.Text) 'lograr que sea la resta del monto de la orden de la tabla orden menos el acumulado de la tabla facturas
            comando.ExecuteNonQuery()
            coneccion.Close()
            MsgBox("Éxito al Añadir la Factura")
        Catch ex As Exception
            MsgBox("No se pudo Insertar la Factura." & vbCrLf & ex.Message)
        End Try
    End Sub

De momento a @acu y @saldo les pongo el textbox del monto, pero en realidad estos no deben ser añadidos por el usuario, debo lograr que se actualice automaticamente cada vez que añado una factura.

Estos datos los consulto mediante un datagridview, su codigo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
Private Sub btnaceptar_Click(sender As Object, e As EventArgs) Handles btnaceptar.Click
        sqlfact = "select * from facturas"
        sqlord = "select * from orden"
        sqlcontra = "select * from contrato"
        conectar()
        dafact = New SqlClient.SqlDataAdapter(sqlfact, coneccion)
        cbfact = New SqlClient.SqlCommandBuilder(dafact)
        daorden = New SqlClient.SqlDataAdapter(sqlord, coneccion)
        cborden = New SqlClient.SqlCommandBuilder(daorden)
        dacontra = New SqlClient.SqlDataAdapter(sqlcontra, coneccion)
        cbcontra = New SqlClient.SqlCommandBuilder(dacontra)
        ds = New DataSet
        dafact.Fill(ds, "factura")
        dacontra.Fill(ds, "contrato")
        daorden.Fill(ds, "orden")
        dgvfact2.DataSource = ds
        dgvfact2.DataMember = "factura"
        dgvordenes2.DataSource = ds
        dgvordenes2.DataMember = "orden"
        dgvcontra.DataSource = ds
        dgvcontra.DataMember = "contrato"
        coneccion.Close()
        dgvordenes2.AutoResizeColumns(
            DataGridViewAutoSizeColumnsMode.AllCells)
    End Sub

Les agradecería mucho si pudieran ayudarme.

Saludos!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de jorge
Val: 45
Ha aumentado 1 puesto en Visual Basic (en relación al último mes)
Gráfica de Visual Basic

Sumar varios campos de SQL en VB

Publicado por jorge (21 intervenciones) el 09/11/2016 17:21:13
hola creo que te faltaria el where en esa consulta

1
2
3
4
SELECT Sum(Campo2)
FROM Tabla
WHERE CampoX = Condicion
GROUP BY Campo1


saludos.

:)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Sumar varios campos de SQL en VB

Publicado por Ziany (8 intervenciones) el 09/11/2016 17:24:43
De acuerdo , pero luego de agregarle el where , como llamo el procedimiento en Visual Basic?
Gracias,
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Sumar varios campos de SQL en VB

Publicado por Ziany (8 intervenciones) el 09/11/2016 18:38:46
Hola Jorge,
Mirare el link a ver si me puede ayudar.
Gracias por intentar ayudarme, he puesto la misma pregunta en otros foros y eres el unico que a respondido,
Saludos!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de jorge
Val: 45
Ha aumentado 1 puesto en Visual Basic (en relación al último mes)
Gráfica de Visual Basic

Sumar varios campos de SQL en VB

Publicado por jorge (21 intervenciones) el 09/11/2016 18:44:36
de amiga o amigo como consejo te doy esque te des de alta en esa pagina del link que te deje .. quizas hay puedena resolver la respuesta a tu pregunta saludos amiga o amigo..

:)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Andres Leonardo
Val: 3.117
Oro
Ha mantenido su posición en Visual Basic (en relación al último mes)
Gráfica de Visual Basic

Sumar varios campos de SQL en VB

Publicado por Andres Leonardo (1798 intervenciones) el 09/11/2016 22:53:44
Creo que tienes un error de concepto ...

Tu llamas al SP a fin de uqe este te de los valores puedes tqambien dar paramrtros de salida ... pero lo ideal seria (segun veo) que vayas sumando en el clie^nte y mandes eso a grabar a la base en la cabecera

Quizas si nos explicas que deseas lograr te demos una mejor guia del codigo

Que deseas hacer tiene suna pantalla donde tienes los datos.....
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Sumar varios campos de SQL en VB

Publicado por Ziany (8 intervenciones) el 10/11/2016 14:25:06
Bueno, tengo varios Forms: LOGUEO DE USUARIO | AÑADIR CONTRATO | AÑADIR ORDEN DE SERVICIO | AÑADIR FACTURAS | CONSULTAS.

Digamos que quiero añadir una factura.
En esa Form tengo los siguientes elementos:

ComboBox para elejir la orden a la que se encuentra asociada,
TextBox para ingresar la fecha de factura,
TextBox para añadir una descripcion,
TextBox para el numero de factura,
TextBox para añadir el monto de la factura
ComboBox para elejir la moneda (Euros, Dolares...)

Todos esos campos se tienen que añadir a la tabla de facturas en sql, lo que ya logre.
Ademas tengo otros dos campos en mi tabla, los cuales son:
Acumulado y Saldo.

Debo lograr que al añadir una factura, el acumulado se actualice automaticamente, sumando todos los montos de factura que tengan la misma orden asociada.

Para el saldo debo lograr que al monto de cada Orden de servicio se le reste el acumulado de sus facturas.

Ejemplo:

Tengo una Orden de servicio "A" por 100.000
Y una Orden de servicio "B" por 50.000

Tengo dos facturas para la orden "A" por 25.000 para esa orden
El acumulado deberia ser 50.000
y el saldo deberia ser 50.000

Tengo una factura para la orden "B" por 75.000
El acumulado deberia ser 75.000
y el saldo deberia ser 25.000

Esta informacion quiero que se vea en el Form de Consultas, en un datagridview.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar