dataGrid添加新纪录问题

maskX 2002-09-01 09:38:35
在dataGrid中添加几条纪录后,再删除其中新加的一条会出错,
出错信息为:

“无法为更新定位行。一些值可能已在最后一次读取后以更改“

我发现好像是因为access中设置了自编号字段(主健),新添的纪录没有主健,
所以删除时会出错,但自编号字段(主健)在dataGrid中无法写入主健字段,
请问有什么解决方法阿?

新手问题请务见笑。

...全文
66 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
chenyu5188 2002-09-03
  • 打赏
  • 举报
回复
在输入数据后要用update方法更新数据源,你要删除,就要用delect方法来删除。
maskX 2002-09-03
  • 打赏
  • 举报
回复
哎,无奈阿,客户点名要用VB作,点名要直接在dataGrid上添加、删除,

我现在是用MSFlexGrid,一行一行写代码实现的阿!!!!

虽然,问题没解决,但还是感谢诸位热心帮助。

散分!

hand2001 2002-09-02
  • 打赏
  • 举报
回复
dataGrid是鸡肋控件,很方便,但问题多多哦。如果非要用他,建议不要直接在dataGrid上添加、删除记录,而是通过按钮增加、删除。
maskX 2002-09-02
  • 打赏
  • 举报
回复
to killcat(纱耄):
你的方法不好使:(

=====================================================
你的数据库是否有自编号字段?
主要问题处在于自编号字段,这个字段在dataGrid中不可写,
dataGrid自己也不对他进行自编号,导致删除新添 记录无法删除。
=====================================================

我是通过、单击dataGrid的行的按del键删除纪录,不是通过按钮删除
maskX 2002-09-02
  • 打赏
  • 举报
回复
谢谢楼上二位,
现在,我没有vb环境实验,
今天晚上,验证好使后,马上揭帖给分。

killcat 2002-09-02
  • 打赏
  • 举报
回复
分是无所谓的,要是为了分,我早就是*级用户了
我被封了三个帐号,现在的信誉分也很低,只是由于半年前论坛的一场论战中
得罪了总斑竹
maskX 2002-09-02
  • 打赏
  • 举报
回复
谢谢关注,
好用的话,马上揭帖给分,
请等我验证。。。。
killcat 2002-09-02
  • 打赏
  • 举报
回复
DataGrid1的属性中把AllowAddNew,AllowDelete,AllowUpdate,AllowArrows
属性设位true
对数据的操作直接在datagrid1上进行
maskX 2002-09-01
  • 打赏
  • 举报
回复
to warlord(战神) :
这个想法,好象挺好,
但在何时adodc关闭后在打开?
我找不到地方:(
maskX 2002-09-01
  • 打赏
  • 举报
回复
各位,能不能给个详细点的建议。
我是新手,很多都不懂。

分不是问题,问题解决要多少都行
warlord 2002-09-01
  • 打赏
  • 举报
回复
adodc关闭后在打开。
maskX 2002-09-01
  • 打赏
  • 举报
回复
我是直接在dataGrid中添加的纪录,数据源是adodc,

我现在的问题就是不知道何时、在何事件中update。
muniu 2002-09-01
  • 打赏
  • 举报
回复
recordset.update之后
recordset.refresh
killcat 2002-09-01
  • 打赏
  • 举报
回复
通过dataGrid直接添加删除纪录
Dim a As Boolean
Dim b As Boolean

Private Sub Command3_Click()
Unload Me
End Sub

Private Sub Form_Load()
Adodc1.ConnectionString = strCon
Adodc1.CommandType = adCmdText
Adodc1.RecordSource = strSql
Adodc1.Refresh
Set DataGrid1.DataSource = Adodc1
End Sub


Private Sub Command1_Click()

On Error Resume Next
Adodc1.Recordset.Update
DataGrid1.Row = DataGrid1.Row + 1
End Sub

Private Sub Command2_Click()

On Error Resume Next
Adodc1.Recordset.delete
End Sub

Private Sub DataGrid1_Error(ByVal DataError As Integer, Response As Integer)
MsgBox "字符长度不能大于定义长度!"
Response = 0
If b = True Then
b = False
a = True
End If
End Sub

Private Sub DataGrid1_KeyPress(KeyAscii As Integer)
If KeyAscii = 13 Then
Command1_Click
DataGrid1.SetFocus
End If
End Sub

Private Sub Form_Unload(Cancel As Integer)
b = True
DataGrid1.SetFocus
If a = True Then
Cancel = True
b = False
a = False
End If
End Sub

绝对好用,我自己写的
bluecc 2002-09-01
  • 打赏
  • 举报
回复
你是用控件打开数据库还是对控件进行程序设置打开的,如果是后者,在REFRESH的时候要进行正确的设置才行。
你的问题应该是REFRESH一下就可以了,具体应该在AFTERUPDATE之后好象就可以了
maskX 2002-09-01
  • 打赏
  • 举报
回复
to stwx(stwx) :
在datagrid的什么事件中写?
stwx 2002-09-01
  • 打赏
  • 举报
回复
添加一条后就调用recordset.update,可以datagrid的事件中写编写
maskX 2002-09-01
  • 打赏
  • 举报
回复
我是通过dataGrid直接添加的纪录,在AfterInsert事件中用rs.update不好用

另,我用的是adodc,
Adodc1.Recordset没有refresh方法,
而Adodc的refresh方法,报错,说密码不对。

我愁阿!!!!!
albertchen 2002-09-01
  • 打赏
  • 举报
回复
再你添加完记录后要更新比如
dim rs as new adodb.recordset
rs.open "sql"
if not rs.eof
rs.addnew
rs.fields.values=a
....
rs.update
rs.refresh
rs.close
过程是这样的,自己是情况而定
maskX 2002-09-01
  • 打赏
  • 举报
回复
不行啊,谁能帮帮我啊!
救命啊!
加载更多回复(1)

7,763

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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