procedure TFrmMain.cxButton7Click(Sender: TObject);
begin
  if IsChenked=False then
  begin
    with FrmLogin.OraQuery1 do
    begin
      Close;
      SQL.Clear;
      SQL.Add('select SCSJKS,SCSJTZ,SJHJ,SCQK,FL,XH from ZMTSJB ' +
              'where bc=:bc and mth=:mth and yf=:yf and day=:day order by xh');
      Params.ParamByName('mth').Value:=botStr;
      Params.ParamByName('bc').Value:=cxComboBox1.Text;
      Params.ParamByName('yf').Value:=cxlbmonth.Caption;
      Params.ParamByName('day').Value:=cxlbday.Caption;
      Open;
    end;
    IsChenked:=True;
  end;
  {显示下一条数据}
  ShowMessage(IntToStr(FrmLogin.OraQuery1.RecordCount));
  try
    FrmLogin.OraQuery1.Next;
    cxTextEdit1.Text:=FrmLogin.OraQuery1.Fields[5].DisplayText;  //显示序号
    cxMaskEdit1.Text:=FrmLogin.OraQuery1.Fields[0].DisplayText;  //开始时间
    cxMaskEdit2.Text:=FrmLogin.OraQuery1.Fields[1].DisplayText;  //停止时间
    cxTextEdit4.Text:=FrmLogin.OraQuery1.Fields[2].DisplayText;  //时间合计
    cxTextEdit5.Text:=FrmLogin.OraQuery1.Fields[3].DisplayText;  //生产情况
    cxComboBox2.Text:=FrmLogin.OraQuery1.Fields[4].DisplayText;  //情况分类
  except
    on E: Exception do
    begin
      ShowMessage(E.Message);
      Exit;
    end;
  end; 
end;这个按钮事件是需要多次点击的.
现有两种情况
情况一
第一次执行到ShowMessage(IntToStr(FrmLogin.OraQuery1.RecordCount));,显示6,是正确的.但接下来执行到cxTextEdit1.Text:=FrmLogin.OraQuery1.Fields[5].DisplayText;
提示list index out of bounds (5),然后第一次点击的时候.ShowMessage(IntToStr(FrmLogin.OraQuery1.RecordCount));直接显示1情况二.去掉ShowMessage(IntToStr(FrmLogin.OraQuery1.RecordCount));,则第一次点击按钮不报错.但在第二次点击时.出现list index out of bounds (5),代码指定在cxTextEdit1.Text:=FrmLogin.OraQuery1.Fields[5].DisplayText;这是为什么...

解决方案 »

  1.   

      兄弟要分清返回记录行数和记录的列数呢! FrmLogin.OraQuery1.RecordCount 这个是返回数据的行数FrmLogin.OraQuery1.FieldCount 这个是返回字段的列数
      

  2.   

    FrmLogin.OraQuery1.Next;  你这行代码每次都往下移动一次指针,也很可能一到最后了!
      

  3.   

    if not FrmLogin.OraQuery1.Active then exit;
    if FrmLogin.OraQuery1.IsEmpty then exit;
    if FrmLogin.OraQuery1.Eof then FrmLogin.OraQuery1.First
    else FrmLogin.OraQuery1.Next; 
    //以上是我帮你加入的代码,不过你要保证下面的字段列数才行    
    cxTextEdit1.Text:=FrmLogin.OraQuery1.Fields[5].DisplayText;  //显示序号     cxMaskEdit1.Text:=FrmLogin.OraQuery1.Fields[0].DisplayText;  //开始时间     cxMaskEdit2.Text:=FrmLogin.OraQuery1.Fields[1].DisplayText;  //停止时间     cxTextEdit4.Text:=FrmLogin.OraQuery1.Fields[2].DisplayText;  //时间合计     cxTextEdit5.Text:=FrmLogin.OraQuery1.Fields[3].DisplayText;  //生产情况     cxComboBox2.Text:=FrmLogin.OraQuery1.Fields[4].DisplayText;  //情况分类 
      

  4.   

    TO xhz8000:我的查询返回的记录是6条.字段也是6条..还有.你说的方法我试用了..问题依旧
      

  5.   

    if FrmLogin.OraQuery1.Eof then FrmLogin.OraQuery1.First
    else FrmLogin.OraQuery1.Next; 
    //把上面的几行修改为下面的代码吧
    FrmLogin.OraQuery1.Next; 
    if FrmLogin.OraQuery1.Eof then FrmLogin.OraQuery1.First;