entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

2votos

buenas tardes estoy desarrollando una aplicacion en vb.net y me da un error al intendar adicionar un registro en una tabla en memoria ("La matriz de entrada es más larga que el número de columnas en esta tabla")

la tabla fue creada en una formulario de la siguiente manera :

    Public Property dt_Debitos As New DataTable With {.TableName = "Debitos"}
    Public Property ds_Debitos As New DataSet

Private Sub Crear_dt_Debitos()
        Try
            dt_Debitos = New DataTable
            Dim clave(1) As DataColumn
            With dt_Debitos.Columns
                ' .Add(New DataColumn With {.ColumnName = "Id", .DataType = Type.GetType("System.Int32"), .AllowDBNull = True, .Unique = True})

                Dim column As DataColumn

                column = New DataColumn()
                column.DataType = System.Type.GetType("System.Int32")
                column.ColumnName = "Id"
                column.AllowDBNull = False
                column.Unique = True
                .Add(column)
                clave(0) = column

                .Add(New DataColumn With {.ColumnName = "Debito_Id", .DataType = Type.GetType("System.Int32"), .AllowDBNull = True, .Unique = False})
                .Add(New DataColumn With {.ColumnName = "Fecha_Vencimiento", .DataType = Type.GetType("System.DateTime"), .AllowDBNull = True, .Unique = False})
                .Add(New DataColumn With {.ColumnName = "Descripcion", .DataType = Type.GetType("System.String"), .AllowDBNull = True, .Unique = False})
                .Add(New DataColumn With {.ColumnName = "Genera_Mora", .DataType = Type.GetType("System.Boolean"), .AllowDBNull = True, .Unique = False})
                .Add(New DataColumn With {.ColumnName = "Articulo_Id", .DataType = Type.GetType("System.Int32"), .AllowDBNull = True, .Unique = False})
                .Add(New DataColumn With {.ColumnName = "Cantidad", .DataType = Type.GetType("System.Int32"), .AllowDBNull = True, .Unique = False})

                .Add(New DataColumn With {.ColumnName = "MontoNominal", .DataType = Type.GetType("System.Double"), .AllowDBNull = True, .Unique = False})
                .Add(New DataColumn With {.ColumnName = "MontoMora", .DataType = Type.GetType("System.Double"), .AllowDBNull = True, .Unique = False})
                .Add(New DataColumn With {.ColumnName = "Pagar", .DataType = Type.GetType("System.Boolean"), .AllowDBNull = True, .Unique = False})
                .Add(New DataColumn With {.ColumnName = "MontoaPagar", .DataType = Type.GetType("System.Double"), .AllowDBNull = True, .Unique = False})

                .Add(New DataColumn With {.ColumnName = "Concepto_Id", .DataType = Type.GetType("System.Int32"), .AllowDBNull = True, .Unique = False})
                .Add(New DataColumn With {.ColumnName = "Debito_Origen_Id", .DataType = Type.GetType("System.Int32"), .AllowDBNull = True, .Unique = False})
                .Add(New DataColumn With {.ColumnName = "PorcIVA", .DataType = Type.GetType("System.Double"), .AllowDBNull = True, .Unique = False})
                .Add(New DataColumn With {.ColumnName = "MontoIVA", .DataType = Type.GetType("System.Double"), .AllowDBNull = True, .Unique = False})
                .Add(New DataColumn With {.ColumnName = "MontoPago", .DataType = Type.GetType("System.Double"), .AllowDBNull = True, .Unique = False})

            End With
            ds_Debitos.Tables.Clear()
            ds_Debitos.Tables.Add(dt_Debitos)
            With ds_Debitos
                dt_Debitos.PrimaryKey = clave
            End With

            gc_Debitos.DataSource = dt_Debitos
        Catch ex As Exception
            MsgBox(ex.Message, MsgBoxStyle.Critical, "Error")
        End Try
    End Sub

y estoy agregandole registros en 2 procedimientos diferentes...

Private Sub Buscar_Debitos()
        If nSuscripcion_Id > 0 Then
            Using ds = Suscripciones.Debitos_a_Pagar(nSuscripcion_Id)
                With ds.Tables("Debitos")
                    If .Rows.Count > 0 Then
                        Dim vItems(0 To 15)
                        Dim Cuenta As Integer = 0
                        Dim MtoMora As Double = 0
                        For i = 0 To .Rows.Count - 1
                            Cuenta = Cuenta + 1
                            vItems(0) = Cuenta 'Id
                            vItems(1) = .Rows(i)("Debito_Id") 'Debito_Id
                            vItems(2) = .Rows(i)("Fecha_Vencimiento") 'Fecha_Vencimiento
                            vItems(3) = .Rows(i)("Descripcion") 'Descripcion
                            vItems(4) = .Rows(i)("Genera_Mora") 'Genera_Mora
                            vItems(5) = -1 ' Artículo_Id
                            vItems(6) = 1 'Cantidad
                            vItems(7) = .Rows(i)("SaldoPendiente") 'MontoNominal
                            MtoMora = MontoMora(.Rows(i)("SaldoPendiente"), .Rows(i)("Genera_Mora"), .Rows(i)("Fecha_Vencimiento"))
                            vItems(8) = MtoMora 'MontoMora
                            vItems(9) = True  'Pagar
                            vItems(10) = CDbl(.Rows(i)("SaldoPendiente")) + MtoMora  'MontoaPagar
                            vItems(11) = .Rows(i)("Concepto_Id") 'Concepto_Id
                            vItems(12) = -1 'Debito_Origen_Id
                            vItems(13) = 0 'PorcIVA
                            vItems(14) = 0 'MontoIVA
                            vItems(15) = CDbl(.Rows(i)("SaldoPendiente")) + MtoMora 'MontoPago
                            dt_Debitos.Rows.Add(vItems)

                        Next
                    End If
                End With
            End Using
        End If
        Totalizar()
    End Sub

ahora bien desde otro formulario intento adicionarle registros y me da el error

Private Sub Guardar()
        Try
            If Validar() = True Then
                     With frmPago.dt_Debitos
                        If t_Item.EditValue > 0 Then
                            Dim vItems(0 To 15)
                            ' creacion del concepto Principal
                            vItems(0) = t_Item.EditValue 'Id
                            vItems(1) = -1 'Debito_Id
                            vItems(2) = FechaPago 'Fecha_Vencimiento
                            vItems(3) = CArticulo.Nombre 'Descripcion
                            vItems(4) = False 'Genera_Mora
                            vItems(5) = CArticulo.Articulo_Id ' Artículo_Id
                            vItems(6) = t_Cantidad.EditValue 'Cantidad
                            vItems(7) = MontoNominal 'MontoNominal

                            vItems(8) = 0 'MontoMora
                            vItems(9) = True  'Pagar
                            vItems(10) = MontoNominal  'MontoaPagar

                            vItems(11) = sl_Concepto.EditValue  'Concepto_Id
                            vItems(12) = -1 'Debito_Origen_Id
                            vItems(13) = t_PorcIVA.EditValue 'PorcIVA
                            vItems(14) = t_MtoIVA.EditValue 'MontoIVA
                            vItems(15) = MontoNominal 'MontoPago
                            .Rows.Add(vItems)
                            .AcceptChanges()
                        End If
                    End With
                End If
                MsgBox("Artículo anexado con éxito", MsgBoxStyle.Information, "Atención")
                Me.Close()
            End If

        Catch ex As Exception
            MsgBox(ex.Message, MsgBoxStyle.Critical, "Error")
        End Try

    End Sub

alli si me da error aunque el array que utilizo tiene exactamente la misma longitud del primero..

1voto

carlossevi comentado

Muy bien documentado con código, pero ¿cuál es el mensaje del error que te da? ¿En qué línea se provoca el fallo?

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta