Visual Basic.NET - Problema al garbar un gridview

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

Problema al garbar un gridview

Publicado por Hector (110 intervenciones) el 18/10/2018 17:37:56
Hola amigos del foro mi consulta es la siguiente que quiero grabar una grilla que posee 9 columnas al grabar las detecta pero la ultima me dice que esta fuera de rango, este el código que utilizo para grabar y el que utilizo en los presente formularios en que se presenta.
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
Sub Graba()
    Dim ds As DataSet
    ds = Session("tabla")
    Dim builder As SqlCommandBuilder
    builder = Session("cmd")
    Dim sqladd As New SqlCommand
    sqladd = builder.GetInsertCommand()
    sqladd.Connection = conn
    Dim sqlmod As New SqlCommand
    sqlmod.Connection = conn
    Dim sqldel As New SqlCommand
    sqldel.Connection = conn
    sqladd.CommandText = "insert into Orden_Compara1 ([N_Filas], [Cantidad], [Repuestos], [Precio_Total], [Siniestro], [Patente_Vehiculo], [N_Cotizacion], [Nombre_Proveedor3], [Activo]) VALUES (@p1, @p2, @p3, @p4, @p5, @p6, @p7, @p8, @p9)"
    Try
        sqldel.CommandText = "delete from Orden_Compra1 where (Siniestro=" _
        + ds.Tables("Grilla").Rows(0).Item("Siniestro").ToString.Trim + ")"
        sqldel.ExecuteNonQuery()
    Catch ex As Exception
        Dim script As String = String.Format("alert('{0}');", ex.Message)
        ScriptManager.RegisterStartupScript(Me, GetType(Page), "Información Incorrecta", script, True)
    End Try
    For Each fila As DataRow In ds.Tables("Grilla").Rows
        If Not fila.RowState = DataRowState.Deleted Then
            sqladd.Parameters(0).Value = fila("N_Filas")
            sqladd.Parameters(1).Value = fila("Cantidad")
            sqladd.Parameters(2).Value = fila("Repuestos")
            sqladd.Parameters(3).Value = fila("Precio_Total")
            sqladd.Parameters(4).Value = fila("Siniestro")
            sqladd.Parameters(5).Value = fila("Patente_Vehiculo")
            sqladd.Parameters(6).Value = fila("N_Cotizacion")
            sqladd.Parameters(7).Value = fila("Nombre_Proveedor3")
            sqladd.Parameters(8).Value = fila("Activo")
            sqladd.ExecuteNonQuery()
        End If
    Next
End Sub
además le adjunto archivo en donde muestra el error, favor de ayudarme ya que sin eso no puedo seguir avanzando en los otros formularios que siguen, ya que de este depende el resto, desde ya muchas 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 giancarlo
Val: 377
Bronce
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Problema al garbar un gridview

Publicado por giancarlo (488 intervenciones) el 24/10/2018 06:29:21
en lugar de usar
1
sqladd.Parameters(7).Value = fila("Nombre_Proveedor3")
¿por que no usas?

antes del FOR
1
sqladd.Parameters.add(@p7, int/varchar/ETC).Value = fila("Nombre_Proveedor3")

luego del FOR
1
sqladd.Parameters(@p7).Value = fila("Nombre_Proveedor3")

intenta con eso y nos comentas
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: 9
Ha disminuido su posición en 2 puestos en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Problema al grabar un gridview

Publicado por Hector (110 intervenciones) el 02/11/2018 14:24:10
Amigo te informo que no resulto el cambio siempre el mismo mensaje que el 8 esta fuera del intervalo, algo que se me olvido contarte que los datos los llamo a través de una consulta, es de decir, de una tabla llamada Ajuste2 el cual posee 24 campos el del cual solo saco 9 el cual te mostré anteriormente en el código, además hago el mismo procedimiento con la tabla Ajuste3 y saco otra consulta sacando algunos campos, y me funciona muy bien con el mismo código, a través de otro formulario, ya no se que hacer más.
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 giancarlo
Val: 377
Bronce
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Problema al grabar un gridview

Publicado por giancarlo (488 intervenciones) el 02/11/2018 15:37:23
8? No debería ser @p8?
cuando vas a agregar varioa registros, debes agregar una sola vez los paranetros, luego solo modificas el valor dentro del bucle, porque, segun tu codigo estaríaa agregando y agregando los parametros:

Antes del FOR (es importante seleccionar el tipo, int, varchar, etc)
sqladd.Parameters.add(@p7, int/varchar/ETC).Value = fila("Nombre_Proveedor3")

Dentro del for, ya no agregarás el parametro, pero si lo vas a modificar y ejecutar:
1
sqladd.Parameters(@p7).Value = fila("Nombre_Proveedor3")

Algo que veo es que ingresas las variables del @p1 al @p9, pero cuando agregas los parametros,lo haces del 0 al 8, entiendo que es por los indices, pero preferible,escribe el nombre del parametro, es decir del @p1 al @p9

Ejecutalo, y si te sale un error, envía las pantallas del error que te sale y el códugo que estas usando para revisarlo nuevamente
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: 9
Ha disminuido su posición en 2 puestos en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Problema al grabar un gridview

Publicado por Hector (110 intervenciones) el 02/11/2018 22:29:44
Hola amigo te cuento que no hay caso dentro del word esta mejor explicado, pero lo del antes del for no resulta.
ahora te mando el mismo código que utilizo para grabar el detalle de la mano de obra, el cuel resulta Ok. pero antes te envío el llamado para la gridview que grabe anteriormente en ajuste3 y lo realizo a través de una vista de consulta.
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
Sub llenar_grilla(Optional ByVal opcion As String = "")
    Dim valor As String
    If opcion = "" Then
        If CMBSINIESTRO.Text = "---" Then
            valor = TXTITEM.Text
        Else
            If TXTITEM.Text <> "" Then
                valor = TXTITEM.Text
            Else
                valor = CMBSINIESTRO.SelectedValue
            End If
        End If
    Else
        valor = opcion
    End If
 
    Try
        da = New Data.SqlClient.SqlDataAdapter("Select * From Consulta3 where Siniestro = '" + valor.ToString + "'", conn)
        da.MissingSchemaAction = MissingSchemaAction.AddWithKey
        Dim builder As Data.SqlClient.SqlCommandBuilder = New SqlClient.SqlCommandBuilder(da)
        Dim ds As New DataSet
        da.Fill(ds, "Grilla")
        Dim vista As DataView = New DataView(ds.Tables("Grilla"), " ", "N_Filas asc", DataViewRowState.CurrentRows)
        Grilla.DataSource = vista
        Grilla.DataBind()
        Session.Add("tabla", ds)
        Session.Add("cmd", builder)
        contador_items.Text = ds.Tables("Grilla").Rows.Count
        TXTITEM.Text = contador_items.Text
    Catch ex As Data.SqlClient.SqlException
        Dim script As String = String.Format("alert('{0}');", ex.Message)
        ScriptManager.RegisterStartupScript(Me, GetType(Page), "Datos mal ingresados", script, True)
    Catch ex As Exception
        Dim script As String = String.Format("alert('{0}');", ex.Message)
        ScriptManager.RegisterStartupScript(Me, GetType(Page), "Información Incorrecta", script, True)
    End Try
End Sub

y ahora el código para grabar la gridview
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
Sub Graba()
    Dim ds As DataSet
    ds = Session("tabla")
    Dim builder As SqlCommandBuilder
    builder = Session("cmd")
    Dim sqladd As New SqlCommand
    sqladd = builder.GetInsertCommand()
    sqladd.Connection = conn
    Dim sqlmod As New SqlCommand
    sqlmod.Connection = conn
    Dim sqldel As New SqlCommand
    sqldel.Connection = conn
    sqladd.CommandText = "insert into Orden_Reparacion1 ([N_Filas], [Detalle_Mobra], [Ptotal_Ajustado], [Siniestro], [Patente_Vehiculo], [Activo], [N_Orden]) VALUES (@p1, @p2, @p3, @p4, @p5, @p6, @p7)"
    Try
        sqldel.CommandText = "delete from Orden_Reparacion1 where (Siniestro=" _
        + ds.Tables("Grilla").Rows(0).Item("Siniestro").ToString.Trim + ")"
        sqldel.ExecuteNonQuery()
    Catch ex As Exception
        Dim script As String = String.Format("alert('{0}');", ex.Message)
        ScriptManager.RegisterStartupScript(Me, GetType(Page), "Información Incorrecta", script, True)
    End Try
    For Each fila As DataRow In ds.Tables("Grilla").Rows
        If Not fila.RowState = DataRowState.Deleted Then
            sqladd.Parameters(0).Value = fila("N_Filas")
            sqladd.Parameters(1).Value = fila("Detalle_Mobra")
            sqladd.Parameters(2).Value = fila("Ptotal_Ajustado")
            sqladd.Parameters(3).Value = fila("Siniestro")
            sqladd.Parameters(4).Value = fila("Patente_Vehiculo")
            sqladd.Parameters(5).Value = fila("Activo")
            sqladd.Parameters(6).Value = fila("N_Orden")
            sqladd.ExecuteNonQuery()
        End If
    Next
End Sub
y si te das cuenta es el mismo código que utilizo para todas las grillas que grabo y ahora en este manda el mismo mensaje de siempre, desde ya muchas 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
Imágen de perfil de giancarlo
Val: 377
Bronce
Ha mantenido su posición en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Problema al grabar un gridview

Publicado por giancarlo (488 intervenciones) el 02/11/2018 22:45:02
como te decía:

Antes del FOR (es importante seleccionar el tipo, int, varchar, etc)
1
sqladd.Parameters.add(@p7, int/varchar/ETC).Value = fila("Nombre_Proveedor3")
Dentro del for, ya no agregarás el parametro, pero si lo vas a modificar y ejecutar:
1
sqladd.Parameters(@p7).Value = fila("Nombre_Proveedor3")

son los 2 a la vez: Desde el inicio, lo que estas haciendo es modificar un parametro, pero como vas a modficar algo que nunca agregaste? es decir, que no existe?? para dejar de hacer tanto lío te voy a poner como debería ser:
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
Dim sqlmod As New SqlCommand
sqlmod.Connection = conn
Dim sqldel As New SqlCommand
sqldel.Connection = conn
sqladd.CommandText = "insert into Orden_Reparacion1 ([N_Filas], [Detalle_Mobra], [Ptotal_Ajustado], [Siniestro], [Patente_Vehiculo], [Activo], [N_Orden]) VALUES (@p1, @p2, @p3, @p4, @p5, @p6, @p7)"
'aqui, primero AGREGAS los parametros:
sqladd.Parameters.add("@p1").Value = 0
sqladd.Parameters.add("@p2").Value = 0
sqladd.Parameters.add("@p3").Value = 0
sqladd.Parameters.add("@p4").Value = 0
sqladd.Parameters.add("@p5").Value = 0
sqladd.Parameters.add("@p6").Value = 0
sqladd.Parameters.add("@p7").Value = 0
 
Try
    sqldel.CommandText = "delete from Orden_Reparacion1 where (Siniestro=" _
    + ds.Tables("Grilla").Rows(0).Item("Siniestro").ToString.Trim + ")"
    sqldel.ExecuteNonQuery()
Catch ex As Exception
    Dim script As String = String.Format("alert('{0}');", ex.Message)
    ScriptManager.RegisterStartupScript(Me, GetType(Page), "Información Incorrecta", script, True)
End Try
For Each fila As DataRow In ds.Tables("Grilla").Rows
    If Not fila.RowState = DataRowState.Deleted Then
        'cuando ya los tienes agregado, RECIEN LOS MODIFICAS, 
        'no puedes modificar algo que NO AGREGASTE
        'ESPECIFICA EL PARAMETRO CORRECTO Y NO LOS INDICES
        sqladd.Parameters("@p1").Value = fila("N_Filas")
        sqladd.Parameters("@p2").Value = fila("Detalle_Mobra")
        sqladd.Parameters("@p3").Value = fila("Ptotal_Ajustado")
        sqladd.Parameters("@p4").Value = fila("Siniestro")
        sqladd.Parameters("@p5").Value = fila("Patente_Vehiculo")
        sqladd.Parameters("@p6").Value = fila("Activo")
        sqladd.Parameters("@p7").Value = fila("N_Orden")
        sqladd.ExecuteNonQuery()
    End If
Next
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: 9
Ha disminuido su posición en 2 puestos en Visual Basic.NET (en relación al último mes)
Gráfica de Visual Basic.NET

Problema al grabar un gridview

Publicado por Hector (110 intervenciones) el 06/11/2018 15:34:07
Hola Master he aquí nuevamente para decirte que esta funcionando bien , te mando el nuevo código que estoy utilizando con arespectiva e indicaciones nuevas que me realizaste, hasta ahí bien, pero al momento de grabar por el execute me dice que no puede convertir un string a int32, pero revise los campos declarados y todo esta bien, favor de echarle un vistazo, y disculpa las molestias, desde ya muchas 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