vb.net的DataGridView如何编辑后保存到Access数据库中?

zzahkj 2011-03-04 04:55:35
vb.net的DataGridView如何编辑后保存到数据库中?我现在已经实现数据表在DataGridView中显示了,可随便对一个单元格进行编辑后却无法保存到原来的Access数据表中,求高手指点,给一段代码?谢谢!
...全文
1014 31 打赏 收藏 转发到动态 举报
写回复
用AI写文章
31 条回复
切换为时间正序
请发表友善的回复…
发表回复
lwd203 2011-03-17
  • 打赏
  • 举报
回复
才看到,我qq 369316244 留言
lwd203 2011-03-08
  • 打赏
  • 举报
回复
有几点注意的地方:
1.oledb和sql基本都是一样的,当出现不能更新的时候,你必须确定access数据库设置了主键,如果使用我发给你的这个类的话,字段名称不用在意;
2.另外,操作数据库时,你自己的思路是需要清晰的,我看了你上面的代码,感觉你没有理解这个过程;
希望上面的代码对你有所帮助
lwd203 2011-03-08
  • 打赏
  • 举报
回复
如果你datagridview的datasource是datatable,将上述方法写在button事件下,应该没有问题 你可以试试
lwd203 2011-03-08
  • 打赏
  • 举报
回复
急的话 直接使用这个类试试:

Public Class DataOperator
Private conn As OleDb.OleDbConnection = Nothing
Private comm As OleDb.OleDbCommand = Nothing
Private CB As OleDb.OleDbCommandBuilder
Private Adapter As OleDb.OleDbDataAdapter
Public Sub updataTable(ByVal constr As String, ByVal pubtable As DataTable, ByVal selectformstr As String)
conn = New OleDb.OleDbConnection(constr)
conn.Open()
comm = New OleDb.OleDbCommand
Adapter = New OleDb.OleDbDataAdapter
comm.Connection = conn
comm.CommandType = CommandType.Text
comm.CommandText = selectformstr
Adapter.SelectCommand = comm
CB = New OleDb.OleDbCommandBuilder(Adapter)
CB.QuotePrefix = "["
CB.QuoteSuffix = "]"
If CB Is Nothing Then
CB.DataAdapter = New OleDb.OleDbDataAdapter
Adapter.DeleteCommand = CB.DataAdapter.DeleteCommand
Adapter.InsertCommand = CB.DataAdapter.InsertCommand
Adapter.UpdateCommand = CB.DataAdapter.UpdateCommand
End If

Dim temptb As DataTable
Dim DR As DialogResult
temptb = pubtable.GetChanges()

If temptb IsNot Nothing Then
DR = MsgBox("数据已改变,是否要保存?", MsgBoxStyle.YesNo, "提示")
If DR = Windows.Forms.DialogResult.Yes Then
Adapter.Update(pubtable)
MsgBox("更新成功", MsgBoxStyle.DefaultButton1, "提示")
Else : Exit Sub
End If
Else : Exit Sub
End If
conn.Close()
End Sub
End Class
哪吒 2011-03-08
  • 打赏
  • 举报
回复
重头做一遍试试吧

DataAdapter生成后 再修改access,DataAdapter是不会改变的。得重新生成。
star_ais 2011-03-07
  • 打赏
  • 举报
回复
你的数据库一直是保持连接状态的?如果不是,似乎是你没有打开数据库。
flfq 2011-03-07
  • 打赏
  • 举报
回复

Dim ds As New DataSet
Dim adatper As SqlServerCe.SqlCeDataAdapter
Dim cBuilder As SqlServerCe.SqlCeCommandBuilder



adatper = New SqlServerCe.SqlCeDataAdapter(strSql, Conn)
adatper.Fill(ds, "result")
DataGridView1.DataSource = ds.Tables("result")

cBuilder = New SqlServerCe.SqlCeCommandBuilder(adatper)



adatper.UpdateCommand = cBuilder.GetUpdateCommand
adatper.Update(ds, "result")


大概意思就是这样了,自己完善一下吧
star_ais 2011-03-07
  • 打赏
  • 举报
回复
我曾经遇到过这样的问题,利用自带的Update会出现无法更新数据的情况,后来为了提高移植性,索性使用SQL语句进行更新。我要是没记错的话,利用Adpter的更新好像需要设置权限以及关键字,日子长没有实践过了,你再试试吧
zzahkj 2011-03-07
  • 打赏
  • 举报
回复
你说的我都做了,还是不成功![Quote=引用 24 楼 zhaozheng1988 的回复:]
1,检查是否设置主键
2, 你是否用的是DataAdapter控件?是的话由它生成数据集,dataset1
3, datagridview的datasource 设置成 其他数据源---项目数据源---dataset1-----****表
4,DataGridview1.Update()
If DataSet11.HasChanges(DataRowState.Modified) Th……
[/Quote]
zzahkj 2011-03-07
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 star_ais 的回复:]
你的数据库一直是保持连接状态的?如果不是,似乎是你没有打开数据库。
[/Quote]修改后也会出现无修改的消息框,并没做任何改变!
哪吒 2011-03-07
  • 打赏
  • 举报
回复
1,检查是否设置主键
2, 你是否用的是DataAdapter控件?是的话由它生成数据集,dataset1
3, datagridview的datasource 设置成 其他数据源---项目数据源---dataset1-----****表
4,DataGridview1.Update()
If DataSet11.HasChanges(DataRowState.Modified) Then
table1DataAdapter.Update(DataSet11.****表)
MsgBox("更改成功!")


你用了哪个控件???
哪吒 2011-03-07
  • 打赏
  • 举报
回复
我认为21楼说的很对。
没有设置主键是不能通过这个方式 进行update的 只能进行select 和 insert 这两个命令
你试试?
flfq 2011-03-07
  • 打赏
  • 举报
回复
[Quote=引用 20 楼 zzahkj 的回复:]
可是前面我已经用OleDb了,能不能告诉我OleDb怎么做 我是一个菜鸟 如果再用sql连接的话,一些对象在命名空间的中不明确,呵呵 见效 刚接触这不到10天

引用 18 楼 flfq 的回复:
VB.NET code

Dim ds As New DataSet
Dim adatper As SqlServerCe.SqlCeDataAdapter
Dim cBuilder As……
[/Quote]
你把有sqlce的地方都改成oledb就可以了,方法是一样的
wolfxin2010 2011-03-07
  • 打赏
  • 举报
回复
你的数据表是否有primary key,如果表中没有主键是不能动态地更新数据!~
zzahkj 2011-03-07
  • 打赏
  • 举报
回复
可是前面我已经用OleDb了,能不能告诉我OleDb怎么做 我是一个菜鸟 如果再用sql连接的话,一些对象在命名空间的中不明确,呵呵 见效 刚接触这不到10天[Quote=引用 18 楼 flfq 的回复:]
VB.NET code

Dim ds As New DataSet
Dim adatper As SqlServerCe.SqlCeDataAdapter
Dim cBuilder As SqlServerCe.SqlCeCommandBuilder




VB.NET code

adatper = New SqlServerCe……
[/Quote]
哪吒 2011-03-06
  • 打赏
  • 举报
回复
你把你代码贴出来 大家一起给你看看
哪吒 2011-03-06
  • 打赏
  • 举报
回复
我没用过access 我用的是sqlserver 哈哈 我不太懂
zzahkj 2011-03-06
  • 打赏
  • 举报
回复
为什么修改后只能出现“无法更新”[Quote=引用 9 楼 zhaozheng1988 的回复:]
首先将DataAdapter生成数据集----dataset1
然后在面板下面出现了 dataset11


Try
DataGridview1.Update()
If DataSet11.HasChanges(DataRowState.Modified) Then
table1DataAdapter.Update(DataSet11.****表)
MsgBox……
[/Quote]
zzahkj 2011-03-06
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 zhaozheng1988 的回复:]
好像不行 我都怀疑在DataGridView修改数据表能不能更新到原来的Access数据库中?
哪吒 2011-03-06
  • 打赏
  • 举报
回复
首先将DataAdapter生成数据集----dataset1
然后在面板下面出现了 dataset11


Try
DataGridview1.Update()
If DataSet11.HasChanges(DataRowState.Modified) Then
table1DataAdapter.Update(DataSet11.****表)
MsgBox("更改成功!")
End If
Catch ex As Exception
MsgBox("无法更改!", MsgBoxStyle.Information)
End Try

试试
基本流程就是这



加载更多回复(9)

16,554

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧