读书人

锁定几条数据让别人不能操作解决方案

发布时间: 2012-01-31 21:28:41 作者: rapoo

锁定几条数据,让别人不能操作
有几个同时运行的程序可能会同时从数据库表中读取数据,并做适当处理,但不希望他们读取相同的数据而做重复无用的处理。
为实现上述要求,我做了以下操作,但有问题,请大家帮忙看一下:
表lines(
line char(6),
days int,
locked bit,
lastupdatetime datetime
)
设每次读取10条数据:
begin tran
declare @t table(line char(6),days int)
insert @t select top 10 line,days from lines with (tablockx) where locked=0 order by lastupdatetime
update lines set locked=1 where line in (select line from @t)
commit tran
select * from @t

在查询分析器里执行没有问题,但在VB中用recordset.Open sql, Connection, 1后,判断recordset.eof 报错:对象关闭时不允许操作。
将上述sql语句换为select * from lines 就没有问题。
请大家帮忙看看,这里的sql语句该怎样写,才能满足要求。

[解决办法]
用临时表试一下呢
begin tran
--declare @t table(line char(6),days int)
create table #t(line char(6),days int)
--insert @t
insert into #t(line,days)
select top 10 line,days from lines with (tablockx) where locked=0 order by lastupdatetime
update lines set locked=1 where line in (select line from #t)
commit tran
select * from #t
drop table #t
[解决办法]
也来狂顶
[解决办法]
把它写成存储过程试一下
[解决办法]
定SQL值如下:
procedure TRepairCode_Frm.FlatSpeedButton3Click(Sender: TObject);
begin
if MessageDlg( 'Are you Delete datas? ',mtWarning,[mbYes,mbNo],0)=mrno then
begin
Abort
end
else
begin
if DM.ds_Repair.DataSet.FieldByName( 'RepairID ').AsString <> '1 ' then
begin
DM.ds_Repair.DataSet.FieldByName( 'RepairID ').AsString;
DM.ds_Repair.DataSet.Delete;
MessageDlg( 'This datas Delete for Success! ',mtInformation,[mbOK],0);
end else
begin
MessageDlg( 'You can not delete this data! ',mtInformation,[mbOK],0);
Exit;
end;
end;
end;
你一下,我里通!!
注意:RepairID自增加,且不能重!!!
如果多了就不行了,次我的ShopFloor管理系有的也不人不能操作的!!!
http://community.csdn.net/Expert/TopicView3.asp?id=5406790

读书人网 >SQL Server

热点推荐