Visual Basic.NET - Sumar Registros Duplicados en una Tabla en Visual Basic

 
Vista:
sin imagen de perfil
Val: 13
Ha disminuido su posición en 2 puestos en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Sumar Registros Duplicados en una Tabla en Visual Basic

Publicado por Ebert (4 intervenciones) el 13/11/2019 02:53:31
Buen día, quisiera por favor alguien que me ayude, no tengo mucha experiencia en este lenguaje y conozco pocas herramientas del mismo, el problema es el siguiente:
tengo una tabla donde se llena con registros duplicados y necesito hacer un procedimiento donde se lean todos los registros iguales y se sumen algunos campos que este tiene, por ejemplo:
código 1 Precio 10 cantidad 3
código 1 Precio 10 cantidad 2
código 1 Precio 10 cantidad 8

en la tabla se deben borrar los registros y aparecer algo así:

código 1 Precio 10 cantidad 13

quise hacerlo con datareader anidados pero al eliminar registros me da error cuando vuelve al ciclo donde se comienza el datareader en este caso uso un while.

si alguien me podría ayudar lo agradezco, gracias
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 Phil Rob
Val: 2.751
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Sumar Registros Duplicados en una Tabla en Visual Basic

Publicado por Phil Rob (753 intervenciones) el 13/11/2019 08:37:44
Hola,

Pareceme que tienes que hacer un DataTable "duplicado" por escribir una sola vece los registros que tienen los mismos valores con la sum de todos.

Envías el codigo del procedimiento y miro como lo hacer ...

Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 13
Ha disminuido su posición en 2 puestos en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Sumar Registros Duplicados en una Tabla en Visual Basic

Publicado por Ebert (4 intervenciones) el 13/11/2019 21:35:24
Saludos gracias por querer ayudar, este es el código en el cual tengo el problemas, si pudiera ayudar le agradecería, de antemano muchas gracias

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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
Dim cmda As New OleDb.OleDbCommand
Dim Stotal As Double = 0
Dim cant As Double = 0
Dim punit As Double = 0
Dim fecha As String
Dim sqla As String
Dim ref, ref1 As Integer
cmd.Connection = conn
cmd.CommandType = CommandType.Text
cmd.CommandText = "SELECT CODITEM, ITEM, PRECIO, CANTIDAD, TOTALITEM, FECHA, REFERENCIA FROM MESAS WHERE MESA = " & mesa & ""
dr = cmd.ExecuteReader()
If dr.HasRows Then
    While dr.Read()
        producto = dr(0).ToString
        descripcion = dr(1).ToString
        punit = CDbl(dr(2))
        cant = 0
        Stotal = 0
        fecha = dr(5).ToString
        ref = Val(dr(6))
        cmdPG.Connection = conn
        cmdPG.CommandType = CommandType.Text
        cmdPG.CommandText = "SELECT CODITEM, ITEM, PRECIO, CANTIDAD, TOTALITEM, FECHA, REFERENCIA FROM MESAS WHERE MESA = " & mesa & " AND CODITEM = " & producto & ""
        drPG = cmdPG.ExecuteReader()
        If drPG.HasRows Then
 
            'borrar registros de mesa
 
            cmda.CommandType = CommandType.Text
            cmda.Connection = conn
            sqla = "DELETE FROM MESAS WHERE MESA = " & mesa & " AND REFERENCIA = " & ref1 & " "
            cmda.CommandText = sqla
 
 
            While drPG.Read()
                If producto = drPG(0).ToString Then
                    ref1 = Val(drPG(6))
                    cant = cant + CDbl(drPG(3))
                    If punit < CDbl(drPG(2)) Then
                        punit = CDbl(drPG(2))
                    End If
                End If
                'borra el registro leído
                If (ref1 <> ref) And (producto = dr(0).ToString) Then
                    MsgBox(ref.ToString + " y " + ref1.ToString)
                    cmda.ExecuteNonQuery()
                End If
            End While
        End If
        drPG.Close()
 
        Stotal = cant * punit
 
        ' Actualiza los valores
 
        sqla = "UPDATE MESAS SET "
        sqla += "PRECIO = " & Str(punit) & ", "
        sqla += "CANTIDAD = " & Str(cant) & ", "
        sqla += "TOTALITEM = " & Str(Stotal) & " "
        sqla += "WHERE MESA = " & mesa & " AND REFERENCIA = " & ref & " "
 
 
        cmda.CommandText = sqla
 
        cmda.ExecuteNonQuery()
    End While
Else
    MsgBox("No Existen Registros para la consulta")
End If
dr.Close()

este es el código del procedimiento, como podrá ver quise hacerlo con dos reader pero al eliminar un registro al regresar al ciclo while me da error dice: registro ha sido borrado, claro entiendo que el reader no consigue el registro donde quedó apuntando, pero no conozco mucho este lenguaje estoy empezando en el.
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 Phil Rob
Val: 2.751
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Sumar Registros Duplicados en una Tabla en Visual Basic

Publicado por Phil Rob (753 intervenciones) el 14/11/2019 00:03:17
Hola,

No es un procedimiento que has enviado, este es una novela ...

Comprendo que quiere eliminar las líneas duplicas y las reemplazar por una sola con el campo “Cantidad” igual a la suma de los cantidades de cada línea.

Buscare una solución mañana.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 13
Ha disminuido su posición en 2 puestos en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Sumar Registros Duplicados en una Tabla en Visual Basic

Publicado por Ebert (4 intervenciones) el 14/11/2019 00:08:49
Gracias, como le escribi anteriormente ya solucioné con la sugerencia que me envió agradecido
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
Val: 13
Ha disminuido su posición en 2 puestos en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Sumar Registros Duplicados en una Tabla en Visual Basic

Publicado por Ebert (4 intervenciones) el 14/11/2019 00:07:08
Amigo Phil Rob gracias por tu sugerencia, investigué un poco sobre el DataTable y efectivamente logré hacer el procedimiento con el mismo, me costo un poco que hiciera lo que yo quería pero lo hice, solo me faltaba exactamente eso una sugerencia de una instrucción para ejecutarlo. Muchas gracias, Tengo un poco de experiencia en programación pero a la vieja escuela (DOS), y tenía muchos años que no programaba por eso me cuesta adaptarme a esto pero ahí voy solucionando.
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 Phil Rob
Val: 2.751
Oro
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Sumar Registros Duplicados en una Tabla en Visual Basic

Publicado por Phil Rob (753 intervenciones) el 14/11/2019 08:58:30
Hola,

Nos mensajes se están cruzado…

Felicitadas por la solución.

Que tenga un buen día
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar