首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

list index out of bounds。求指点

2013-01-08 
list index out of bounds。。求指导procedure TForm1.Button1Click(Sender: TObject)vari:integerbeginwi

list index out of bounds。。求指导
procedure TForm1.Button1Click(Sender: TObject);
var
  i:integer;
begin
with ADOQuery1 do
  begin
    close;
    SQL.Clear;
    SQL.Add('Select*from mxs where 时间 between :a and :b order by 时间 ');
    Parameters.ParamByName('a').Value:=formatdatetime('yyyy-MM-dd 00:00:00',datetimepicker1.Datetime);
    Parameters.ParamByName('b').Value:=formatdatetime('yyyy-MM-dd 23:59:59',datetimepicker1.Datetime);
    open;
    s:=ADOQuery1.Recordcount;
  end;
  DBChart1.Title.Text.Text:='『' +formatdatetime('yyyy年MM月dd日',datetimepicker1.datetime)+ '』时产量趋势图';
  DBChart1.Series[0].XLabelsSource:='时间';
  DBChart1.Series[0].YValues.valuesource:='产量';
  DBChart1.Series[0].DataSource:=ADOQuery1;
  TempI:=0;
  for i:=0 to s do
  begin
      DBChart1.Series[0].XLabelsSource:='时间';
      DBChart1.Series[0].YValues.valuesource:='产量';
      DBChart1.Series[0].DataSource:=ADOQuery1;
    TempI:=TempI+1;
  end;
end;
procedure TForm1.DBChart1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
var
  TempX:Double;
begin
  //TempX:=-1;
  TempX:=StrToFloat(CurrToStr(dbChart1.BottomAxis.CalcPosPoint(X-5)));            //X-5为3D图形的X轴偏移量
  if TempX<StrToFloat(inttostr(tempi))-1 then
  begin
  if TempX>=0 then
  begin
    if (TempX-Trunc(TempX))<0.5 then
      TempX:=Trunc(TempX)
    else
      TempX:=Trunc(TempX)+1;
    Label1.Caption:=dbChart1.Series[0].ValueMarkText[strtoint(FloatToStr(TempX))];
  end
  else
  Label1.Caption:='';
  end
  else
  Label1.Caption:='';
end;

Label1.Caption:=dbChart1.Series[0].ValueMarkText[strtoint(FloatToStr(TempX))]。这句出错。。。我想从数据库中调出数据,并DBChart显示,鼠标放在曲线上是能显示出横纵坐标。横坐标是时间,纵坐标是产量。数据库两个字段分别为时间,产量。

[解决办法]
for i:=0 to s-1 do //这里超出了记录的下标,改为s-1
  begin
      DBChart1.Series[0].XLabelsSource:='时间';
      DBChart1.Series[0].YValues.valuesource:='产量';
      DBChart1.Series[0].DataSource:=ADOQuery1;
    TempI:=TempI+1;
  end;

[解决办法]

引用:
或者说我根据这个时间去数据库中找到对应的产量,再输出来吗?虽然这个应该可以,但是我觉得有点麻烦

按说用DBChart很简单,只要设置好数据源及对应的坐标字段及图类型,打开数据源后自动就会显示图形。没那么复杂吧!

热点排行