ADO的ADODataSet存取Access97库为什么常出点毛病?

BCB 2001-10-10 09:11:10
用DBGrid编辑ACCESS97表时,为什么修改末记录再post()后会出现:
“无法为更新行集定位,一此事值可能已在最后读最后改变”(win2000下的提示)
在win98下是一段英文提示,跟上面的提示意思一样.
出了什么问题?为什么有时会出现这种提示?

...全文
72 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
BCB 2001-10-12
  • 打赏
  • 举报
回复
!
sundayboys 2001-10-11
  • 打赏
  • 举报
回复
我碰到的还有DBNavigator控件,用这个控件增加一个记录,保存记录后,紧接着删除新加记录,就会报告同样的错误,那个时候什么代码还没有写呢。
BCB 2001-10-11
  • 打赏
  • 举报
回复
我的记录集不可能在两个地方处于编辑状态.一是单机方式,二只被打开一次,
三,问题出在刚被添加的新记录post()后,若再编辑修改post()
BCB 2001-10-11
  • 打赏
  • 举报
回复
是没有主键
在win98下,出错提示是:
The specified row could not be locate for updating:
some value may have been changed since it ws last read.
主要发生在:刚添加的记录post()后,若再修改其内容post()就
出现此错误.
估计是:记录不好定位了
BCB 2001-10-11
  • 打赏
  • 举报
回复
总算有办法了:
将ADODataSet1->LockType设成ltBatchOptimistic,就不会出现错误了
ADODataSet1->Close()前,还要ADODataSet1->UpdateBatch(arAll);
否则,修改不能有效;
ADO有许多奇怪的参数,不知干什么用的.

bitfan 2001-10-10
  • 打赏
  • 举报
回复
这种情况经常发生,主要原因是你其它部分的代码访问了同一个记录集对象中的同一条记录,记录集同时在两个以上地方处于编辑状态,所以ADO不知如何更新。
没有好办法,最笨的就是在对记录集进行修改之前检查其状态是否为dsEdit,如果是则先Post它,再进入Edit。
另一个办法是用批处理更新方式打开记录,这样Post时就没有出错信息了,然后,集中在UpdateBatch()中处理更新失败的错误(比如提示用户或者取消更新或者更改DeltaDataSet),可以看看李维的书。
Spring414 2001-10-10
  • 打赏
  • 举报
回复
你的表是不是没有主键?

13,825

社区成员

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

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