_RecordsetPtr 的问题

冰杰007 2009-12-23 09:58:28
大家好,我在用_RecordsetPtr m_pRecordset操作ACCESS数据库的时候,如果同时打开两个软件,其中一个软件增加或删除了一条记录,这样另一个软件操作数据库的时候就会出现错误,请问是怎么回事,我该怎么处理
...全文
108 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
BlueMap 2010-07-07
  • 打赏
  • 举报
回复
涉及的东西挺多。。。学习。。。基本点是你操作的数据一定要是最新的数据。我想一个比较傻的办法是先关闭你当前操作的记录集然后重新生成记录集,这样能得到最新的数据。理论上你说的情况是要将需要操作的数据加锁的,但是具体我还不会,友情帮顶。
czh604 2009-12-23
  • 打赏
  • 举报
回复
你的担心本来就是个问题。
有对数据库进行修改的时候,数据表都必须加锁。
也就是说一个用户要修改一个表的时候,另外一个用户就得等待。这是不可避免的,无法同时修改,会出错的。
我觉得Access自己在有人修改表时会自动上锁,所以你第二个软件修改的时候就出错了。
你应该在你的程序中去捕获这个异常(你出错就是因为你没有实现捕获异常),然后对异常进行处理。
比如:当捕获的异常表示当前有人在修改表的时候,你让程序休息一小段时间再去修改那表。
冰杰007 2009-12-23
  • 打赏
  • 举报
回复
你好,加锁以后会不会别的程序不能修改数据库?
m_pRecordset->Open("SELECT * FROM datefile",
m_pConnection.GetInterfacePtr(),adOpenStatic,adLockOptimistic,adCmdText);
我是这样打开的
yschenwei 2009-12-23
  • 打赏
  • 举报
回复
数据库数据同步问题。
一般如果多个程序同时访问相同数据的时候都要加锁。
或是干脆以独占方式打开数据库。
冰杰007 2009-12-23
  • 打赏
  • 举报
回复
上面说的有误,增加是不会出现错误的,只是在另一个软件中删除一条记录后在用这个软件操作数据库就出现问题,m_pRecordset被移动到被删除记录的时候出现错误,请问我该怎么避免?
尘雨 2009-12-23
  • 打赏
  • 举报
回复
你用的是动态游标,还是静态游标,或者是键集游标,其次锁定类型,是悲观锁定,还是乐观锁定,还是只读锁定

按照你的要求,你应该使用客户端游标类型,静态游标,悲观锁定

adOpenStatic, adLockPessimistic.
这样你的记录集打开之后,其他ADO会话不能编辑,防止冲突
冰杰007 2009-12-23
  • 打赏
  • 举报
回复
我用了CursorLocation=adUseClient,不起作用啊

我现在要的结果是用别的软件删除了数据库中的某些记录,在我的这个软件中就不能读取数据库了
到m_pRecordset->MoveNext()运动到已经删除的记录时就出错了
尘雨 2009-12-23
  • 打赏
  • 举报
回复
使用客户端游标CursorLocation=adUseClient

4,011

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 数据库
社区管理员
  • 数据库
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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