我的窗体设计如上图,问题是,我通过combobox中的不同表名来控制listbox中显示当前表的字段名,点击字段名后,按字段统计来生成图表,如果不点生成dbchart图表按钮,显示没有问题,运行后第一次点击可生成图表,第二次点击字段就会出现‘找不到其中某个字段’,点击combobox,在listbox中也无法正常显示字段名了。
本人第一次用DBChart。非常困扰!!望大家帮忙解决!

解决方案 »

  1.   

    代码如下:
    procedure TForm12.Button1Click(Sender: TObject);
    begin
       cxzd:=listbox1.Items[listbox1.Itemindex];
          //生成图表
              DBChart3.Refresh;
       DBChart3.Series[0].Active:=false;
       DBChart3.Series[0].DataSource := ADODataSet1;
      // ShowMessage(IntToStr(ADODataSet1.RecordCount));
       DBChart3.Series[0].XLabelsSource := cxzd;
       DBChart3.Series[0].YValues.ValueSource := '数量';   DBChart3.Series[0].Active:=true;   DBChart2.Refresh;
       DBChart2.Series[0].Active:=false;
          DBChart2.Series[0].DataSource := ADODataSet1;
      // ShowMessage(IntToStr(ADODataSet1.RecordCount));
       DBChart2.Series[0].XLabelsSource := cxzd;
       DBChart2.Series[0].YValues.ValueSource := '数量';
       DBChart2.Series[0].Active:=true;   //DBChart3.Series[0].Free;
       //DBChart2.Series[0].Free;
    end;procedure TForm12.ComboBox2Change(Sender: TObject);
    var i:integer;begin   //try
       //nstr:=trim(combobox2.Text);
        //cxnr:=trim(edit1.Text);    //查询信息
        case combobox2.ItemIndex  of
           0:cxsj:='基本情况';
           1:cxsj:='个人重大事';
           2:cxsj:='收入';
           else cxsj:='基本情况';
        end;
       //listbox1.Clear;
        adodataset2.Active:=false;
        adodataset2.CommandText:='Select * from '+cxsj;
        adodataset2.Active:=true;         for i:=0 to  adodataset1.Fields.Count -1 do  //添加字段名到listbox
                 listbox1.Items.Add (adodataset2.Fields[i].fieldname);
       //except
       //end;
    end;procedure TForm12.FormShow(Sender: TObject);
    var i:integer;
    begin   //默认情况
            cxsj:='基本情况';
            adodataset1.Active:=false;
            adodataset1.CommandText:='Select * from '+cxsj;
            adodataset1.Active:=true;
             for i:=0 to  adodataset1.Fields.Count -1 do
                 listbox1.Items.Add (adodataset1.Fields[i].fieldname);end;procedure TForm12.ListBox1Click(Sender: TObject);
    begin
       try
        cxzd:=listbox1.Items[listbox1.Itemindex];
        adodataset1.Active:=false;
        adodataset1.CommandText:='select '+cxzd+',count('+cxzd+') as 数量 from '+cxsj+' group by '+cxzd;
       //showmessage(adodataset1.CommandText);
        adodataset1.Active:=true;   except
       end;
    end;
      

  2.   

    adodataset1的sql变化了,Button1Click时,应该先清空Series的所有数据连接
      

  3.   

    ...'找不到其中某个字段’...
    確認事項:
    1.檢查連接的adoquery的dataset之SQL是否有changed;
    2.當再次生成圖表時,請將Series.clear下;
    3.類似以下代碼:procedure TRES_HR_AUDIT_F.cxButton3Click(Sender: TObject);
    var
      iLoop:Integer;
    begin
      inherited;
      if (Trim(cxDateEdit3.Text)='') then
      begin
        MessageDlg('操作提示:查詢的出勤日期不能為空!',mtWarning,[mbOK],0);
        Exit;
      end;
      if (Trim(cxDateEdit3.Text)<>'') then
      begin
        Series1.Clear;
        Chart1.Title.Text.Text:='出勤曲線圖';
        qry_chart.Close;
        qry_chart.SQL.Clear;
        qry_chart.SQL.Add('  select rq,bmmc,count(1)as cqrs,sum(datediff(mi,''00:00:00'',convert(varchar(20),gzsj))/60.0)as sshr from RES_KQRB  where rq='''+ FormatDateTime('yyyy/mm/dd',cxDateEdit3.Date)+''' and gzsj is not null group by rq,bmmc');
        qry_chart.Open;
        qry_chart.First;
        for iLoop:=0 to qry_chart.RecordCount -1 do
        begin
          Series1.Add(qry_chart.FieldValues['cqrs'],VarToStr(qry_chart.FieldValues['bmmc']));
          qry_chart.Next;
        end;
      end;
    end;