三层结构写数据库,如何保证写库时的互斥性(100分)

  • 主题发起人 主题发起人 jameschin
  • 开始时间 开始时间
J

jameschin

Unregistered / Unconfirmed
GUEST, unregistred user!
有个memo字段。可能多人同时会改写该字段。怎么能保证a改写后 ,b再改写时
提示他内容已被改写,要他刷新后再写
interbase可以用
try
clientdataset.applyupdates(0);
except
showmess('.....');
end;
捕获到。但在sqlserver中不行
 
Select for update
 
billrobin:你是什么意思,还望多指教
 
你可以试一下事务。
 
zjjzcgao:
不是事务的问题。关键在于sqlserver里不认为有错误。
原来的memo字段是:111
a想加几个字改为111222,b也想加几个字在该为111333。a先post,applyupdates(0)通过
b后post,applyupdates(0)也通过了。没有转到except的异常处理。在interbase中会有异常
但sqlserver不会。
大家有什么办法能保证b在写数据库时,能被告之有人已经修改了该字段,要刷新后在改
 
可在应用服务程序端的AfterUpdate 事件中做上标记,客户端用Timer 控件进行查询,如果发现数据库表被更改,则提示要刷新后再改写
然后把私有标记取消
 
呵呵,服务器端,不是我开发的。我不能动呀!!!
 
在Oracle数据库中,如果在一个事务中执行了类似下面的话,那么在提交或回滚之前,
该记录就不会被事务外的其他应用所修改
update table_name
set col1=col1
where num='123';
 
Oracle 的触发器是否能用上??
 
jameschin,那你可以与开发服务应用程序的人员协商呀
 
让客户端获得 中间层的更新消息 进行控制
 
Update前检查数据库中的值是否与原先的值一致。
 
可以用
if clientdataset.applyupdates(0) > 0 then
showmess('.....')
else begin
...
end;
 
李维老师的
<<Delphi分布式多层应用篇>>
有很好的解决方法
 
lock table
锁表就可以了,然后解锁,,
 
多人接受答案了。
 
后退
顶部