none
Eliminar fila de un datatable ? RRS feed

  • Pregunta

  • Buenos dias

     Pues tengo un problem al eliminar una fila de un datatable, el caso es que con una tabla "Trabajos" funciona, y con otra "clientes" NO

    el código es :

    Dim i As Integer
                Dim cnn As New OleDb.OleDbConnection("provider=Microsoft.ACE.OLEDB.12.0;data Source=" & UbiBaseDatos & "BD-prueba.accdb")
                Dim sql As String = "SELECT * FROM Clientes"
                Dim da As New OleDb.OleDbDataAdapter(sql, cnn)
                Dim cb As New OleDb.OleDbCommandBuilder(da)
                Dim dt As New DataTable("BorraCliente")
                da.Fill(dt)
                Cliente = TBoxNombre.Text
                For i = 0 To dt.Rows.Count - 1          
                    If dt.Rows.Item(i).Item("Nombre").ToString = Cliente Then
                        'dt.Rows.Item(i).Delete()                                                    opción 1      <=====================
                        'dt.Rows.RemoveAt(i)                                                          opción 2      <=====================
                        Exit For
                    End If
                Next
                        Try
                    da.Update(dt)
                    dt.AcceptChanges()
                Catch ex As Exception
                    MessageBox.Show("Error :" & ex.Message, "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Error)
                End Try
                cnn.Close()

    Si utilizo la opcion 1 me tira un mensaje de

    "No se han especificado valores para algunos de los parametros requeridos"

    Si utilizo la opcion 2 NO da error alguno, pero NO borra la fila, el caso es que con otra tabla (trabajos), funciona perfectamente, y los campos son parecidos

    Que puede estar pasando?

    Gracias por vuestra respuesta.

    jueves, 5 de junio de 2014 9:00

Respuestas

  • Me contesto Yo mismo,

    Gracias a Javier y Leandro por sus respuestas, el problema estaba en que hay que añadir las lineas

    cb.QuotePrefix = "["
    cb.QuoteSuffix = "]"

    Y ya funciona bien . . .  queda asi

    Dim i As Integer
                Dim cnn As New OleDb.OleDbConnection("provider=Microsoft.ACE.OLEDB.12.0;data Source=" & UbiBaseDatos & "BD-prueba.accdb")
                Dim sql As String = "SELECT * FROM Clientes"
                Dim da As New OleDb.OleDbDataAdapter(sql, cnn)
                Dim cb As New OleDb.OleDbCommandBuilder(da)
                Dim dt As New DataTable("BorraCliente")
                cb.QuotePrefix = "["
                cb.QuoteSuffix = "]"
                da.Fill(dt)
                Cliente = TBoxNombre.Text
                For i = 0 To dt.Rows.Count - 1           ' Recorre datatable buscando indice del Cliente a borrar
                    If dt.Rows.Item(i).Item("Nombre").ToString = Cliente Then
                        dt.Rows.Item(i).Delete()
                        Exit For
                    End If
                Next

    • Marcado como respuesta Antogi miércoles, 11 de junio de 2014 21:45
    jueves, 5 de junio de 2014 16:25

Todas las respuestas

  • Puedes hacerlo así:

    For Each row As DataRow In dt.Rows        
        If CStr(row("Nombre")) = Cliente Then
            row.Delete()
            Exit For
        End If
    Next


    Saludos, Javier J

    jueves, 5 de junio de 2014 9:59
  • hola

    prueba algo como esto

    Dim cnn As New OleDb.OleDbConnection("provider=Microsoft.ACE.OLEDB.12.0;data Source=" & UbiBaseDatos & "BD-prueba.accdb")
    Dim sql As String = "SELECT * FROM Clientes"
    Dim da As New OleDb.OleDbDataAdapter(sql, cnn)
    Dim cb As New OleDb.OleDbCommandBuilder(da)
    Dim dt As New DataTable()
    da.Fill(dt)
    
    Cliente = TBoxNombre.Text
    
    DataRow rowSel;
    ForEach row As DataRow To dt.Rows         
    	If row("Nombre").ToString = Cliente Then
    		rowSel = row
    		Exit For
    	End If
    Next
    
    If rowSel IsNot Nothing Then
    	rowSel.Delete()
    End If

    valida con un breakpoint que encuentra algna coincidencia que eliminar

    How to: Delete Rows in a DataTable

    ----

    tambien podrias usar el Select() en el datatable para no tener que realizar el for

    How to remove a certain row from DataTable?

    saludos


    Leandro Tuttini

    Blog
    Buenos Aires
    Argentina

    jueves, 5 de junio de 2014 11:25
  • Me contesto Yo mismo,

    Gracias a Javier y Leandro por sus respuestas, el problema estaba en que hay que añadir las lineas

    cb.QuotePrefix = "["
    cb.QuoteSuffix = "]"

    Y ya funciona bien . . .  queda asi

    Dim i As Integer
                Dim cnn As New OleDb.OleDbConnection("provider=Microsoft.ACE.OLEDB.12.0;data Source=" & UbiBaseDatos & "BD-prueba.accdb")
                Dim sql As String = "SELECT * FROM Clientes"
                Dim da As New OleDb.OleDbDataAdapter(sql, cnn)
                Dim cb As New OleDb.OleDbCommandBuilder(da)
                Dim dt As New DataTable("BorraCliente")
                cb.QuotePrefix = "["
                cb.QuoteSuffix = "]"
                da.Fill(dt)
                Cliente = TBoxNombre.Text
                For i = 0 To dt.Rows.Count - 1           ' Recorre datatable buscando indice del Cliente a borrar
                    If dt.Rows.Item(i).Item("Nombre").ToString = Cliente Then
                        dt.Rows.Item(i).Delete()
                        Exit For
                    End If
                Next

    • Marcado como respuesta Antogi miércoles, 11 de junio de 2014 21:45
    jueves, 5 de junio de 2014 16:25