我的窗体设计如上图,问题是,我通过combobox中的不同表名来控制listbox中显示当前表的字段名,点击字段名后,按字段统计来生成图表,如果不点生成dbchart图表按钮,显示没有问题,运行后第一次点击可生成图表,第二次点击字段就会出现‘找不到其中某个字段’,点击combobox,在listbox中也无法正常显示字段名了。
本人第一次用DBChart。非常困扰!!望大家帮忙解决!
解决方案 »
- Delphi里refresh和adoquery.active:=false;adoquery.active:=true;的区别
- delphi中数据插入问题(初学编程)
- 调用webservice
- 4月4日我儿子和我过生日,共享快乐。顺便贡献多年写的delphi数据库封装原代码。
- 如何在Delphi环境下连接远程机器上的ACCESS数据库?
- 活动目录(AD)里,通过对象的get方法获得属性的困惑。。
- 请问如何接收80端口数据
- 请教:关于dephi中的F1BOOK控件的用法
- 哪位大大帮忙脱一下ASPack 2.12 -> Alexey Solodovnikov壳
- Re:用Table连接时总要密码,那位大哥能帮帮我!!!
- 做了VPN,可以PING内网可访问本地共享,就是UDP协议无法通讯,如何解决
- delphi + mysql 插入中文字符串出现空白
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;
確認事項:
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;