首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

gotobookmark有关问题

2012-05-30 
gotobookmark问题procedure TGDDSTRCATINFO.RefreshvarlBookmark:TBookmarkbeginlBookmark:DataSetCust

gotobookmark问题
procedure TGDDSTRCATINFO.Refresh;
var
  lBookmark:TBookmark;
begin
  lBookmark:=DataSetCustomCat.GetBookmark;
  with DataSetCustomCat do
  begin
  DisableControls;
  try
  Close;
  Open;
  finally
  EnableControls;
  DataSetCustomCat.GotoBookmark(lBookmark);
  DataSetCustomCat.FreeBookmark(lBookmark);
  end;
  end;
end;
报错“Record not found”在 DataSetCustomCat.GotoBookmark这句话上。为什么呢。

[解决办法]
记录没有找到,可能是你的记录已经被你删除了.
try 
Close; 
Open;
try
DataSetCustomCat.GotoBookmark(lBookmark);
except
end; 
finally 
EnableControls; 
DataSetCustomCat.FreeBookmark(lBookmark); 
end; 
这样就不会因记录不存在,而报错了.

[解决办法]
GetBookmark是在激活的数据集上定义的书签,当数据集关闭的时候当然就不存在了。
在消失的书签上,要获取书签当然就会报错了。
因此上面的语句如下更改,不会报错,但不一定是你要的结果:

Delphi(Pascal) code
procedure TGDDSTRCATINFO.Refresh;var  lBookmark:TBookmark;begin    with DataSetCustomCat do  begin    DisableControls;    try      Close;      Open;      lBookmark:=DataSetCustomCat.GetBookmark;    finally      EnableControls;      DataSetCustomCat.GotoBookmark(lBookmark);      DataSetCustomCat.FreeBookmark(lBookmark);    end;  end;end;
[解决办法]
看了后明白了许多.以前很少使用bookmark(尽量避开)
数据集刷新 我一般采用
var
RecordNo : Integer;
begin
if ADODataSet1.IsEmpty then
Exit;
ADODataSet1.DisableControls;
RecordNo := ADODataSet1.RecNo;
try
ADODataSet1.Close;
ADODataSet1.Open;
ADODataSet1.MoveBy(RecordNo - 1);
finally
ADODataSet1.EnableControls;
end;
效果是可以达到了 ,但是不知道好不好,

热点排行