VB 2005 DELETE
Private Sub btnDel_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDel.ClickDim 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