【高分】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方法的确有时候有问题,不知道有没有办法解决。
...全文
89 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
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

2,497

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧