for k:=0 to ADOQ_gsmc.RecordCount-1 do
    begin
      if ADOQ_gsmc.Eof=true then
      begin
        inq:=inq+'CKGL_RKB.khid='+''''+ADOQ_gsmc.FieldByName('khid').AsString+''''+')';
      end
      else
      begin
        inq:=inq+'CKGL_RKB.khid='+''''+ADOQ_gsmc.FieldByName('khid').AsString+''''+'or ';
        ADOQ_gsmc.Next;
      end;
    end;
  就是上面这行代码,每次都不执行if中的语句,我跟踪了一下,就算是到了ADOQUERY的最后一条记录,也是直接跳过执行else后面的代码,不知道怎么回事

解决方案 »

  1.   

    把ADOQ_gsmc.Eof判断去掉
    ADOQ_gsmc.Eof是判断当前数据集是否指向最后,你代码中也没有移动数据集的语句(如ADOQ_gsmc.Next等)。
    最好这么遍历数据集
    ADOQ_gsmc.Open; //默认First
    while not ADOQ_gsmc.Eof do
    begin
      ADOQ_gsmc.Next;
    end;
    ADOQ_gsmc.Close;
      

  2.   

    if ADOQ_gsmc.Eof=true then
    改成
    if k = ADOQ_gsmc.RecordCount-1 then当数据集第一次指向最后一条记录时Eof并不为true,需要next后,才为true
      

  3.   

    首先利用论坛自带的功能,看一下你的源代码,这样排版更好看。for k:=0 to ADOQ_gsmc.RecordCount-1 do
      begin
      if ADOQ_gsmc.Eof=true then
      begin
      inq:=inq+'CKGL_RKB.khid='+''''+ADOQ_gsmc.FieldByName('khid').AsString+''''+')';
      end
      else
      begin
      inq:=inq+'CKGL_RKB.khid='+''''+ADOQ_gsmc.FieldByName('khid').AsString+''''+'or ';
      ADOQ_gsmc.Next;
      end;
      end;
      

  4.   

    if ADOQ_gsmc.Eof=true then
    改成
    if ADOQ_gsmc.Eof then
      

  5.   


    for k:=0 to ADOQ_gsmc.RecordCount-1 do
      begin
      if k=AdoQ_gsmc.RecordCount-1 then
      begin
      inq:=inq+'CKGL_RKB.khid='+''''+ADOQ_gsmc.FieldByName('khid').AsString+''''+')';
      end
      else
      begin
      inq:=inq+'CKGL_RKB.khid='+''''+ADOQ_gsmc.FieldByName('khid').AsString+''''+'or ';
      ADOQ_gsmc.Next;
      end;
      end;
    eof应该是循环到最后一条记录后再next一次才会变成true.