帮忙!如何用程序控制并发读取表的记录???

jzinfo 2009-03-18 05:15:37
数据库中有表 A:(code,amount,Status)
A表中有一系列记录

客户端中需要从该表依次取A表的一条记录来使用,取Code和Amount值,然后在客户端进行其他的操作,提交成功后则将A的状态更新为"DONE".
但若其它的客户端读取了A的一条记录后,其他的客户端则只能读取下一个状态不为“DONE"的记录来获取Code和amount值..

A表中初始所有的记录状态都为“NEW”,客户端使用一个记录后就将该记录的状态置为“DONE”.

我目前的一个方法是 :客户端窗体启动后,读取一个记录后,就将该记录的状态同时置为'LOCKED',客户端窗体中的操作完成后,将该记录的状态置为“DONE”。
这样,其他客户端读取的时候,只读取状态为“NEW”的未使用的记录来使用即可.

这样出现的一个问题是,当客户端获取了记录并将状态置为‘LOCKED’后,操作没有成功,或者客户端死机,断电,则该记录在数据库中一直是LOCKED的,其他的客户端读的时候也读不到该记录。

但该记录确实还没有被使用。

想问一下大家这样的情况如何处理???

...全文
66 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
blue_morning 2009-06-01
  • 打赏
  • 举报
回复
行锁是一个方案,但是估计对你来说不太合适。

重新考虑客户的需求,把这两个用户需要获取的数据分开,避免出现同一数据同时出现在两个用户的界面中是更好的办法。

还有一个办法是在BeforePost中读取并保存现在数据的内容,在AfterPost后重新SELECT被更新的数据与本地数据对比是否一致。如果不一致,那么说明被其它用户修改。
hiboys 2009-04-27
  • 打赏
  • 举报
回复
多了解下数据库吧,大型数据库可以加行锁
jzinfo 2009-03-18
  • 打赏
  • 举报
回复
顶一下...

2,497

社区成员

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

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