并发处理

来源:互联网 发布:内网win7端口怎么开启 编辑:程序博客网 时间:2024/05/21 17:21

前些日子,一直在做并发访问的事.可是,不管是对表还中数据进行锁定,都不能得到想要达到的结果.后来想了想,用了对数据进行标识进行处理:

 

步骤:

一:刚开始去更改的时候,去查一个未处理的ID,获取此ID

二:把文件ID记录下来。然后去把这个未处理的记录设置为正在处理、并记录下当前正在处理的者的ID

三:根据这个状态为正在处理的、文件ID进行查询

四:对这个文件的修改者进行身份判断。看是否为当前用户。要是的话,就进行正常操作。不是的话,就放弃处理(在客户端进行提示、服务器就放弃处理,进行下一次处理。)。

 

 

   //将未处理处理完的申请置为正在处理
   WITH query3 DO
   begin
     close;
     sql.Clear;
     sql.Add('UPDATE FileInfo  SET file_state=:file_state, processID=:processID,ProcessName=:processName ');
     sql.Add(' where file_state="未处理" and file_id='+query1.fieldbyname('file_id').AsString);
     paramByName('processID').AsInteger:=mainform.user_id;//将操作员置未当前用户
     paramByName('processName ').asstring:=mainform.user_Name;
     paramByName('file_state').AsString:='正在处理';
     prepare;

     execSql;
   end;


 //查询选择的文件信息
   WITH query3 DO
   begin
     close;
     sql.Clear;
     sql.Add('select * from FileInfo ');
     sql.Add(' where file_state="正在处理" and file_id='+query1.fieldbyname('file_id').AsString);
     prepare;
     open;
   end;


   ////查询选择的文件的修改者是否为当前用户---------------
   if (query3.FieldByName('porcessID').AsInteger=mainform.user_id) then
   begin
    ……正常操作
   end
   else
   begin
    ……忽略或者告警当前申请被其他用户操作。
   end;