我想做一个道路路口车流量统计的曲线图表。
使用SQL SEVER数据库
表名:qianduanxinxi
字段:riqi(通过该路口的时间),lukou(该路口的名称),sudu(通过的速度)。
我在界面上放置一个DateTimePicker控件选择日期,放置一个ComboBox控件选择路口名称,放置两个
chart控件,一个显示被选择的那一天、那个路口的平均车流量曲线图表,另一个显示的是车辆平均速
度的曲线图表,两个曲线图表的X轴都表示的是时间,分成24段,每段代表一小时,从0点到23点,Y轴
表示的是车流量和速度的平均值。我该如何实现这个功能,请帮助。

解决方案 »

  1.   

    双击Chart,Add2个Series,程序里分别对每个Series增加数据就可以了。
    Series1.AddXY(i,values[i]);
      

  2.   

    你的要求用Chart可以完全实现,请你说说你做到什么地方了,遇到什么问题了
    这样才可以解决
      

  3.   

    procedure TForm1.Button1Click(Sender: TObject);
    var
       i:integer;
    begin
      button2click(sender);
      Chart1.Series[0].Clear;
      Chart2.Series[0].Clear;
      Label7.Caption:='';
      Label8.Caption:='';  for i:=0 to 23 do
          begin
            yuell[i]:=0;
            yuesd[i]:=0;
          end;  for i:=0 to 23 do
        begin
       adoquery1.First;
       while not adoquery1.Eof do
        begin
          if (form1.ADOQuery1.FieldByName('shijian').AsString = Trim(datetostr(form1.DateTimePicker1.DateTime)))
         and (form1.ADOQuery1.FieldByName('lukou').AsString = trim(form1.ComboBox1.Text)) then
         begin
       //  if((Table1->FieldByName("a")->AsString.SubString(1,10)==Trim(ComboBox4->Text)
       //   +Trim(ComboBox5->Text)+Trim(ComboBox6->Text)+FormatFloat("00",i))
       //   and (Table1->FieldByName("a")->AsString.SubString(11,4)==lk))
             yuell[i]:=yuell[i]+strtofloat(label1.Caption);
             yuesd[i]:=yuesd[i]+strtofloat(form1.ADOQuery1.FieldByName('sudu').AsString) * strtoint(label1.Caption);
            end;   
          adoquery1.Next;
         end;
      end;   for i:=0 to 23 do
         begin
           if yuell[i]>max1 then
              max1:=yuell[i];//最大流量
           if yuell[i]<>0 then
           if yuesd[i]/yuell[i]>max2 then
              max2:=yuesd[i]/yuell[i];//最大速度
           sum1:=sum1+yuell[i]; //总流量
        end;  for i:=0 to 23 do
       sum2:=sum2+yuesd[i];   if sum1=0 then
         sum2:=0
       else
        sum2:=sum2/sum1; //平均速度   for i:=0 to 23 do
         begin
           if yuell[i]<min1 then
             min1:=yuell[i];//最小流量
           if yuell[i]<>0 then
             if yuesd[i]/yuell[i]<min2 then
               min2:=yuesd[i]/yuell[i];//最小速度
         end;   Label7.Caption:='车流总量:'+floatToStr(sum1)+'台    单小时最大流量:'
             +floatToStr(max1)+'台    单小时最小流量:'+floatToStr(min1)
             +'台    小时平均流量:'+floatToStr(sum1/24)+'台';   if min2<>10000 then
         Label8.Caption:='单小时最大车速:'+floatToStr(max2)+'km / h    单小时最小车速:'
               +floatToStr(min2)+'km / h    小时平均车速:'+floatToStr(sum2)+'km / h'
       else
        Label8.Caption:='单小时最大车速:'+floatToStr(max2)+'km / h    单小时最小车速:0'
               +'km / h    小时平均车速:'+floatToStr(sum2)+'km / h';    for i:=0 to 23 do
          begin
            Chart1.Series[0].Add(yuell[i],FormatFloat('00',i),clRed);
          if yuell[i]<>0  then
            Chart2.Series[0].Add(yuesd[i]/yuell[i],FormatFloat('00',i),clBlue)
          else
            Chart2.Series[0].Add(0,FormatFloat('00',i),clBlue);
          end;end;就是在数据库的查询上实现不了的,斜杠处是cbc的源程序,我别处都改过来了,就是精华部分没有弄明白
      

  4.   

    给你翻译一下:    if (Copy(Table1.FieldByName('a').AsString,1,10)=
            Trim(ComboBox4.Text)+Trim(ComboBox5.Text)+Trim(ComboBox6.Text)) and
            (Copy(Table1.FieldByName('a').AsString,11,4)=lk)
        then
      

  5.   

    判断,字段a的值,前10个字符是不是和ComboBox4,ComboBox5,ComboBox6的组合相同,并且第11个开始的4个字符是不是和变量lk相同。
      

  6.   

    数据库处理的地方没什么奥妙的,很简单的。就是统计需要的数据,赋值到数组yuell[i],yuesd[i]中,这里你完全可以自己处理,不需照搬他的代码。