当前位置:编程学习 > C#/ASP.NET >>

VB 2005 DELETE

    Private Sub btnDel_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDel.Click
        Dim dataAdapter As New OleDb.OleDbDataAdapter(sqlStr, connStr)
        Dim commandBuilder As New OleDb.OleDbCommandBuilder(dataAdapter)
        dt.Rows(CStr(CInt(txtToyNo.Text) - 1)).Delete()
        dataAdapter.Fill(dt)
        dataAdapter.Update(dt)
        dt.AcceptChanges()
        dataAdapter.Dispose()
        save()
    End Sub
 Sub save()
        'Save the table's changes back to the database
        Dim changes As Integer
        'Open a connection to the database for updating
        Dim dataAdapter As New OleDb.OleDbDataAdapter(sqlStr, connStr)
        Dim commandBuilder As New OleDb.OleDbCommandBuilder(dataAdapter)
        'Update the database with changes from the data table
        changes = dataAdapter.Update(dt)
        dataAdapter.Dispose()
        'Display the number of changes made
        If changes > 0 Then
            MsgBox(changes & " changed rows were stored in the database.")
        Else
            MsgBox("No changes made.")
        End If
    End Sub
但是我是save不到Access --------------------编程问答-------------------- 你这个要是能保存更改到数据库中那才叫做问题呢~

Private   Sub   btnDel_Click(ByVal   sender   As   System.Object,   ByVal   e   As   System.EventArgs)   Handles   btnDel.Click 
     Dim   dataAdapter   As   New   OleDb.OleDbDataAdapter(sqlStr,   connStr) 
     Dim   commandBuilder   As   New   OleDb.OleDbCommandBuilder(dataAdapter) 
     dt.Rows(CStr(CInt(txtToyNo.Text)   -   1)).Delete()  ‘删除记入 ,这个DT 我暂且认为是DataTable
     dataAdapter.Fill(dt)  '用数据库中的数据刷新 DT,上面那个更改也就没有了(内部机制可能是清空了DT了吧)
     dataAdapter.Update(dt) ’将刚刚填充的数据更新到数据库(实际上是没有更新的)
     dt.AcceptChanges()  ‘这个是接受更改,其实这个在上面那个Update已经做了,(不过这里应该是做了也没有用)
     dataAdapter.Dispose() 
     save() 
End   Sub 


后面那个方法也是不能更新的。原因一是,你已经跟新过了。原因而是,你调用了 dt.AcceptChanges()  

.NET 内部更新机制是通过检查Datarow的状态来更新的,一旦调用了 dt.AcceptChanges()  ,接受了更改,DataRow的状态就会变成未更改。因此你做任何Update都是无效的。

我建议你删掉那个Fill,直接更新即可。 另外,后面那个过程也直接合并到上面比较好。
--------------------编程问答--------------------  学习 --------------------编程问答-------------------- 不可能,update不到,他出現No changes made
  Private Sub btnDel_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDel.Click
        Dim dataAdapter As New OleDb.OleDbDataAdapter(sqlStr, connStr)
        Dim commandBuilder As New OleDb.OleDbCommandBuilder(dataAdapter)
        dt.Rows(CStr(CInt(txtToyNo.Text) - 1)).Delete()
        dataAdapter.Fill(dt)
        dt.AcceptChanges()
        dataAdapter.Update(dt)

        dataAdapter.Dispose()

        save()
    End Sub
 Sub save()
        'Save the table's changes back to the database
        Dim changes As Integer
        'Open a connection to the database for updating
        Dim dataAdapter As New OleDb.OleDbDataAdapter(sqlStr, connStr)
        Dim commandBuilder As New OleDb.OleDbCommandBuilder(dataAdapter)
        'Update the database with changes from the data table
        changes = dataAdapter.Update(dt)
        dataAdapter.Dispose()
        'Display the number of changes made
        If changes > 0 Then
            MsgBox(changes & " changed rows were stored in the database.")
        Else
            MsgBox("No changes made.")
        End If
Help me???? --------------------编程问答-------------------- 呵呵

NO Changes Made

不久是没有更改吗~,哦, 你可能理解错了, 我指更新到数据库



你这个有2个问题影响

第一个, 你在BtnDel_Click 里面,  删除数据后, 又用数据库的数据更新了 DT,结果相当于没有更改。
第二个,你又使用了AcceptChanges,这个会把所有RowState 重置,  在Update(DT)的时候,由于找不到被修改的行(你删除的时候, 那个行实际Rowstate 变成Deleted,但你接受了后 ,就彻底删了)

然后,让我搞不明白的,你第二个过程有更新一次,然后显示结果, 为什么呢?

--------------------编程问答-------------------- 你那个第二个过程, 如果前面不改的话, 那个过程,应该是永远显示 没有更新

因为你前面已经更新了, 在调用这个方法之前又没有更改。

(当然,你愿意用调试器暂停执行,然后更改DT,在继续,我也就没有什么可以说的了)
补充:.NET技术 ,  VB.NET
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,