我就是利用DBChart来生成一个柱状图,数据是调用数据集Query中的数据,具体该如何实现,我自己不太熟悉哪个控件,程序如下:
procedure TFrm_tzztj.Button1Click(Sender: TObject);
var i:integer;
begin
if ComboBox2.Text='水平位移X' then
begin
     with DBChart1.Title.Text do
     begin
          clear;
          add('水平位移X特征值分布');
     end;
    DBChart1.Repaint;
    DataModule1.Query2.SQL.Clear;
    DataModule1.Query2.SQL.Add('select DT,DISPX,PN from data_spwycz     where  PN=(:PN) and DT between (:DT1) and (:DT2)');
    DataModule1.Query2.Params[0].AsString:=combobox1.Text;
    DataModule1.Query2.Params[1].AsDateTime:=DateTimePicker1.DateTime;
    DataModule1.query2.Params[2].AsDateTime:=DateTimePicker2.DateTime;
    DataModule1.Query2.Open;
    DataModule1.DataSource2.DataSet:=DataModule1.Query2;
    DataModule1.DataSource1.DataSet:=DataModule1.Query2;
    for i:=DataModule1.query2.RecordCount-1 downto 1 do
    begin
        DBChart1.Series[1].DataSource:=DataModule1.DataSource3;
        DBChart1.Series[1].XValue[i]:=DataModule1.Query2.Fieldbyname('DT').AsDateTime;
        DBChart1.Series[1].YValue[i]:=DataModule1.Query2.Fieldbyname('DISPX').AsFloat;
        DataModule1.Query2.Next;
        DBChart1.AutoRefresh:=true;
        DBChart1.Repaint;
    end;end;
end;

解决方案 »

  1.   

    一个线状图的例子
    var
    Series1:TLineSeries;
    Str,str1:string;
    i:integer; with DM.DataModule1 do
      begin
      Series1:=TlineSeries.Create(self);//动态创建的series如果已有设计好就不用了
      Series1.ParentChart:=Chart1;
      series1.Title:='ffffff';
      Chart1.Title.Text.Clear;
      Chart1.Title.Text.Add('nameaaaa');
      Series1.DataSource:=Query2;//这里是指数据集,不是datasource控件而是数据源不要被名字迷惑
      Series1.XLabelsSource:='DT';//主要这里设置为字段名
      Series1.YValues.ValueSource:='DISPX';//Y轴字段名
      chart1.LeftAxis.AutomaticMinimum:=False;
      Chart1.LeftAxis.Minimum:=0;
      end;
      

  2.   

    高手,我照你的例子改了一下,但是抛出异常:list index out of bound(1),(而且我把循环去掉也是一样);
    修改后的代码是:
    procedure TFrm_tzztj.Button1Click(Sender: TObject);
    var i:integer;
    begin
        if ComboBox2.Text='水平位移X' then
        begin
              DBChart1.Title.Text.Clear;
              DBChart1.Title.Text.add('水平位移X特征值分布');          DBChart1.Repaint;
              DataModule1.Query2.SQL.Clear;
              DataModule1.Query2.SQL.Add('select DT,DISPX,PN from data_spwycz where PN=(:PN) and DT between (:DT1) and (:DT2)');
              DataModule1.Query2.Params[0].AsString:=combobox1.Text;
              DataModule1.Query2.Params[1].AsDateTime:=DateTimePicker1.DateTime;
              DataModule1.query2.Params[2].AsDateTime:=DateTimePicker2.DateTime;
              DataModule1.Query2.Open;
              for i:= 0 to DataModule1.query2.RecordCount-1  do
              begin
                   DBChart1.Series[1].DataSource:=DataModule1.Query2;
                   DBChart1.Series[1].XLabelsSource:='DT';
                   DBChart1.Series[1].YValues.valuesource:='DISPX';
                   DBChart1.LeftAxis.AutomaticMinimum:=false;
                   DBChart1.LeftAxis.Minimum:=0;
                   DataModule1.Query2.Next;
              end;    end;
    end;
      

  3.   

    我把哪个柱状图已经静态的做好了,就差连接数据了。对了,我想问一下,Series1.XLabelsSource:='DT'是不是还要循环一下啊?还是直接就是调用这个字段的所有数据记录了呢?