【高分】IBQuery.Locate无法定位问题。

andy77 2004-12-21 11:24:06
我在进行数据验证的时候对IBQYBuild进行逐个检查,如果没有问题,最后定位到原来的记录上,iOldBuildNum,但最后在Locate定位的时候出现了无法定位的情况,我的代码比较多,无法全部贴出。

我的程序大概的意思是:
try
iOldBuildNum:IBQYBuild.FieldByName('BuildNum').asInteger;//原来的记录关键字。
IBQYBuild.DisableControls;
IBQYBuild.First;
while not IBQYBuild.eof do
begin
iBuild:=IBQYBuild.FieldByName('BuildNum').asInteger;
if (数据校验不合格) then
begin
IBQYBuild.EnableControls;
b1:=IBQYBuild.Locate('BuildNum',iBuildNum,[]);
if (询问是否继续保存)=否 then
Result:=False;
end;
IBQYBuild.Next;
end;
finally
IBQYBuild.EnableControls;
if Result then
b2:=IBQYBuild.Locate('BuildNum',iOldBuildNum,[]);
end;

问题是:b1,和b2经常返回False,可是我实时观察IBQYBuild的确能看见我要查找的记录。

我试过几次,有时候是其中一个失效,有时候两个都失效,但基本不会两个都成功。

我听同事说IBQuery的Locate方法的确有时候有问题,不知道有没有办法解决。
...全文
57 点赞 收藏 3
写回复
3 条回复
merkey2002 2004年12月22日
学习了~
回复 点赞
耙子 2004年12月22日
var
SavePlace: TBookmark;
.....

try
SavePlace:= IBQYBuild.GetBookMark;//原来的记录关键字。
IBQYBuild.DisableControls;
IBQYBuild.First;
while not IBQYBuild.eof do
begin
iBuild:=IBQYBuild.FieldByName('BuildNum').asInteger;
if (数据校验不合格) then
begin
// IBQYBuild.EnableControls; //这句多余,你的finally里面有了
b1:=IBQYBuild.Locate('BuildNum',iBuildNum,[]); //当前的记录不是吗?为什么还要找
if (询问是否继续保存)=否 then
Result:=False;
end;
IBQYBuild.Next;
end;
finally
if Result then
IBQYBuild.GotoBookmark(SavePlace);
// b2:=IBQYBuild.Locate('BuildNum',iOldBuildNum,[]);
IBQYBuild.FreeBookmark(SavePlace);
IBQYBuild.EnableControls; // 应该放最后效果更好
end;


代码我没调试过胡乱写的。具体你参看TBookmark的帮助。
回复 点赞
耙子 2004年12月22日
你的方法不太好。
你这个问题比较好的办法就是用书签 叫做 Bookmark

回复 点赞
发动态
发帖子
数据库相关
创建于2007-08-02

1211

社区成员

8.8w+

社区内容

Delphi 数据库相关
社区公告
暂无公告