網絡用戶對大表的操作。尋求好的解決方案。
假如有這樣一個環境﹕
我有一個表work﹐有几萬條記錄﹐
有一個視圖(select * from work where a=b ) deptofwork
在A部門把這個的表work打開的同時﹐B部門也打開了deptofwork.
當B這個時候要對deptofwork里面的記錄修改的時候﹐始終有
一個連接的操作﹐但是一直不能夠執行﹐而且數據也沒有修改,一直等待。
這是怎么回事﹐當我關閉A這個用戶的時候﹐B這個部門就可以修改
了﹐沒有讓我一直等待。我該如何解決這類問題﹖
這是B部門修改work數據的代碼: 
procedure TForm1.DBGrid2DblClick(Sender: TObject);
var workcode,workname,groupid,workdept:string;
    ind :integer ;
    normalh ,addh ,bsh :real ;
    groupd :ttreenode ;
begin
  with utdata.DataModule2 do
  begin
    workcode :=trim(wknow.fieldbyname('wk_code').AsString) ;
    workname :=trim(wknow.fieldbyname('wk_name').AsString) ;
    workdept :=trim(wknow.fieldbyname('wk_dept').AsString) ;
    if wkhrs.Locate('wkcode',workcode,[]) then
    begin
      showmessage('這個工號已經分配!');
      exit ;
    end
    else
    begin
      ind :=strtoint(label9.Caption );
      groupd :=treeview1.Items[0].Item[ind] ;
      treeview1.Items.AddChild(groupd,workcode) ;
      groupid :=treeview1.Items[0].Item[ind].text ;
      tpqy.Close ;
      tpqy.SQL.Clear ;
      tpqy.SQL.Add('select * from grouph where groupid='+groupid+' and dept='+#39+form2.dept+#39);
      tpqy.Open ;
      if tpqy.RecordCount>0 then
      begin
        normalh :=tpqy.fieldbyname('normalh').AsFloat ;
        addh    :=tpqy.fieldbyname('addh').AsFloat ;
        bsh     :=tpqy.fieldbyname('bsh').AsFloat ;
        wkhrs.Append ;
        wkhrs.FieldByName('wkcode').AsString :=workcode ;
        wkhrs.FieldByName('wkname').AsString :=workname ;
        wkhrs.FieldByName('groupid').AsInteger :=strtoint(groupid) ;
        wkhrs.FieldByName('dept').AsString :=workdept ;
        wkhrs.FieldByName('normalh').AsFloat :=normalh ;
        wkhrs.FieldByName('addh').AsFloat :=addh ;
        wkhrs.FieldByName('bs').AsFloat :=bsh ;
        wkhrs.FieldByName('daydate').Value :=datetostr(incday(datetimepicker1.Date,-1));
        wkhrs.FieldByName('etag').AsString :='N';
        wkhrs.Post ;
        tpqy.Close ;
        tpqy.SQL.Clear ;
        tpqy.SQL.Add(' update '+form2.dept+ ' set groupid='+groupid+' where wk_code='+#39+workcode+#39) ;
        tpqy.ExecSQL ;
        wknow.Close ;
        wknow.Open ;
      end
      else
      begin
        showmessage('錯誤!') ;
      end;
    end;
  end;
end;