我的目的将数据库中的数据显示在chart中,x轴为数据库中记录的时间,y轴为数据库中记录的数据,本来用series.addxy很简单,但问题是t1到t2之间可能几个月甚至一年(相隔时间不确定,是随机的)没有数据,那么T1到T2的曲线将是T1数据点到T2数据点的连线,而要求t1到t2之间的曲线由于是没有数据的,是0的,是挨着时间轴的,怎么解决?
打个比方吧,2007.8.20 00:00:00前是有数据的,2007.9.20 00:00:00后有数据,而2007.8.20到2007.9.20没有数据,这一段曲线应该是0的,是挨着X轴的,用series.addxy就不行,怎么办?
我的思路:从数据库中依次读记录,如果下个记录的时间不是与上个记录相邻1秒的,那么在上个记录的后一秒和下个记录的前一秒加个零点,这样,两个零点相连,两个不相邻记录在Chart中对应的点之间的曲线就是挨着时间轴X轴的,是0的
这是小弟的程序
  dateset.First();
  series.Clear;
  index:=0;
 points:=dateset.recordcount;  //数据库中记录的个数
 while index< points do
 begin
  series.addxy(dateset.fields.fields[0].asdatetime,dateset.fields.fields[1].asinteger);//画处记录对应的点
  T1:=dateset.fields.fields[0].asdatetime;  //上个记录的时间
  ds.Next();
  if(dateset.fields.fields[0].asdatetime<>IncSecond(T1,1))then  //如果下个记录与上个记录不是相邻1秒的
  begin
  series.addxy(Incsecond(dateset.fields.fields[0].asdatetime,-1),0); //在下个记录的前一秒加个零点
  series.addxy(IncSecond(T1,1),0);  //在上个记录的后一秒加个零点
  end;
  index:=index+1;
 end;                                                     ^ 
小弟觉得我的思路是可行的,程序是正确,为什么显示出来的数是锯齿型的呢?
求教,出了什么问题,到底该怎么实现两不相邻记录之间的曲线是挨着时间轴的,是0的?                                   

解决方案 »

  1.   

    选出所有有数据的记录,再series.addxy
      

  2.   

    思路应该没什么问题,只不过我觉得程序还可以精炼一点。
    while dateset.eof do 
     begin 
      series.addxy(dateset.fields.fields[0].asdatetime,dateset.fields.fields[1].asinteger);//画处记录对应的点 
      T1:=dateset.fields.fields[0].asdatetime;  //上个记录的时间 
      ds.Next(); 
      if(dateset.fields.fields[0].asdatetime>IncSecond(T1,1))then  //如果下个记录与上个记录不是相邻1秒的 
      series.addxy(Incsecond(dateset.fields.fields[0].asdatetime,-1),0); //在下个记录的前一秒加个零点 
      series.addxy(IncSecond(T1,1),0);  //在上个记录的后一秒加个零点 
    end;   
    你试试看看,兴许有效
    程序设计有时候就是这样的,明明代码和思路好像都是对的,就是结果不对头,多试验一下,将程序搞简练一点,改一点你细枝末节,兴许结果就出来了。。
    如果还不出来的话,你可以用时间取点,有数据的地方画数据点,没数据的地方画零点,不过可能要循环多次,程序会很慢哦