欢迎来到Doc100.Net免费学习资源知识分享平台!
您的位置:首页 > 程序异常 >

关于数据指针的有关问题

更新时间: 2014-05-14 20:12:17 责任编辑: Author_N3

 

关于数据指针的问题
本帖最后由 csshow 于 2013-11-05 17:34:04 编辑

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;

这是为什么... 分享到:
--参考方法--
ShowMessage(IntToStr(FrmLogin.OraQuery1.RecordCount));
try 
  FrmLogin.OraQuery1.Next;
  cxTextEdit1.Text:=FrmLogin.OraQuery1.Fields[5].DisplayText;  //显示序号
FrmLogin.OraQuery1.Fields.Count;字段数
RecordCount记录数,而不是字段数
--参考方法--
直接看代码看不出来,那就猜猜看吧:

代码里,你用 if isChenked来判断是否用目前的sql来open;
但取值时却在if之外。
这样子很危险,
就是你取值时,query的SQL是不是你贴的那个SQL?不一定!
既然不一定,那是不是Fields.Count=6?也不一定。

简单的说,这段代码写得不好,不容易控制。
错误会发生在意想之外。
这是我猜的。
你估且参考看看。
--参考方法--
在末尾加个OraQuery1.close;试试;
每次open后回定位在第一条记录的位置,你又调用了一次next把当前记录移到了下一条记录,觉着这样不大合适,不知道你为什么这么用
上一篇:上一篇
下一篇:下一篇

 

随机推荐程序问答结果

 

 

如对文章有任何疑问请提交到问题反馈,或者您对内容不满意,请您反馈给我们DOC100.NET论坛发贴求解。
DOC100.NET资源网,机器学习分类整理更新日期::2014-05-14 20:12:17
如需转载,请注明文章出处和来源网址:http://www.doc100.net/bugs/t/300936/
本文WWW.DOC100.NET DOC100.NET版权所有。