
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:
El procedimiento para insertar datos en la tabla:
El procedimiento que he creado para sumar es el siguiente:
En Visual Basic añado registros a la tabla
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:
Les agradecería mucho si pudieran ayudarme.
Saludos!
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


0