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显示,鼠标放在曲线上是能显示出横纵坐标。横坐标是时间,纵坐标是产量。数据库两个字段分别为时间,产量。

解决方案 »

  1.   

    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;
      

  2.   

    首先谢谢你,那个list index out of bounds问题解决了,但是还有个问题没有解决掉,就是显示出来的没有产量,只有时间,请问能再帮忙下吗?
      

  3.   

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