網絡用戶對大表的操作。尋求好的解決方案。
假如有這樣一個環境﹕
我有一個表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;
假如有這樣一個環境﹕
我有一個表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;
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货