求高人知道循环查询如何做,一下有什么错

求高人知道循环查询怎么做,一下有什么错
procedure Tzffm.Edit1Click(Sender: TObject);
var
i,p,q:integer;

begin
  ADOquery1.Close;
  adoquery1.sql.clear;
  ADOquery1.SQL.Add('select * from location_table where 品番='''+Edit1.text+'''');
  ADOquery1.Open;
  edit2.text:=adoquery1.FieldValues['位置'];
  ADOquery2.Close;
  adoquery2.sql.clear;
  ADOquery2.SQL.Add('select * from zf_data where 品番='''+Edit1.text+'''');
  ADOquery2.Open;
  edit4.text:=adoquery2.FieldValues['额定收容数'];
  edit5.text:=adoquery2.FieldValues['暂放器具'];
  if edit5.text='HU' then
  begin
  adoquery3.close;
  adoquery3.sql.clear;
  adoquery3.sql.add('select * from zf_table where loc_key='''+(leftstr(edit2.text,6)+'X1')+'''');
  adoquery3.Open;
  i:=strtoint(adoquery3.fieldvalues['ip']);
  p:=i;
  while adoquery3.FieldValues['part_no']<>''
  do
  begin
  p:=p+1;

  adoquery3.close;
  adoquery3.sql.clear;
  adoquery3.sql.add('select * from zf_table where ip= '''+inttostr(p)+'''');
  adoquery3.Open;
  end;
  edit3.text:=inttostr(p);//adoquery3.fieldvalues['loc_key'];
  end;
  q:=i;
  while q>=1 do Inc(q,-1);//向下查找空货位
  adoquery3.close;
  adoquery3.sql.clear;
  adoquery3.sql.add('select * from zf_table where ip= '''+inttostr(q)+'''');
  adoquery3.Open;
  end;


 // 检查那个距离i近就取谁的值edit3.text:=adoquery3.FieldValues['loc_key'];




end.




搞不清楚为什么运行之后是无响应啊 ,求大虾指导,在此多谢大家。

------解决方案--------------------
你while用的adoquery3,那么while内部就不能再使用adoquery3,换一个,然后每循环一次adoquery3.Next