请教高手,怎样锁定一条记录?(50分)

  • 主题发起人 主题发起人 tsaietsai
  • 开始时间 开始时间
T

tsaietsai

Unregistered / Unconfirmed
GUEST, unregistred user!
我正在用delphi+ado+sql做一个多用户程序,但在两个用户编辑同一条记录时发生错误。
不知道如何锁定一条记录及如何判断该记录的状况。请高手帮忙!
 
select......for update
 
我也有这样的问题
 
能不能说详细点儿,另有加分
 
在修改的表中增加一个标志位用于控制该记录是否被销,控制方法:
修改前
~~~~~~~~~~~~~~~~
1 查找所有可以修改的记录
2 将要修改的记录行的标志位置为“锁住”状态

修改后:将修改记录的标志位还原为“未锁住”状态
 
我觉得这个问题好象不是太难,就是我是初学,许多命令都 不会。恳切希望高手给我帮助!
 
to sallypo:
SQL中怎么锁定一条记录阿?
 
同意sallypo的说法!
给该表添加一个字段,第一个要修改该记录的用户访问的时候,把标志设为 read;
其他人用户在该标志为read 的时候,只能对该记录进行读操作;
第一个用户修改完毕,提交的时候,在把标志设为 write;

具体实现,可以在触发器里面写,
IF 标志为 read
。。。。cancle 这个操作,并提示。。。。
 
在onPostError事件里写:
s:=UpperCase(E.Message);
if Pos('KEY VIOLATION',s) <> 0 then //代号重复
if (Pos('ANOTHER USER CHANGED THE RECORD',s) <> 0) or
(Pos('RECORD CHANGED BY ANOTHER USER',s) <> 0) then//别人已先修改此记录
if Pos('KEY DELETED',s) <> 0 then//别人已先删除此记录
 
一般没有必要用字段来控制
加了for update,查询到的记录就会加更新锁
其它用户只能读
 
但我根本没有query部件,而且思路是即时的
 
另外加一子段的缺点:

当客户机突然死机或掉电,或非正常退出时,或造成此记录的永久锁死。
 
还有没有另外的解决办法,请教各位大大
 
我也觉得加字段锁定的办法是在是费力不讨好
 
to 沉香屑:
用select .... for update 后,应该是一批数据不能被别的用户更改,我只想更改一条记录,锁定一条记录。
 
SQL TABLE设置一个唯一的ID号,修改的时候最好不要直接修改,用UPDATE+WHERE ID.
 
用三层!

关注!
 
求助,求助,有没有更好的办法?
 

Similar threads

D
回复
0
查看
1K
DelphiTeacher的专栏
D
D
回复
0
查看
887
DelphiTeacher的专栏
D
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
后退
顶部