我使用以下代码来创建动态系列的TDBChart。我使用了MS-Access和TADOQuery组件。 BUTTON上的CODE点击事件。
var
qryData: TADOQuery;
intCnt: integer;
strlstField: TStringList;
begin
strlstField := TStringList.Create();
qryData := TADOQuery.Create(nil);
qryData.ConnectionString := 'Provider=Microsoft.Jet.OLEDB.4.0; Data Source=' + ExtractFilePath(Application.ExeName) + 'data.mdb';
qryData.SQL.Add('SELECT dept_name,2005 as [2005],2006 as [2006],2007 as [2007],'+
'2008 as [2008],2009 as [2009],2010 as [2010], 2011 as [2211] FROM SALES');
qryData.Active := True;
DBChart1.Title.Text.Clear;
DBChart1.Title.Text.Add('Department Wise Sales Report');
DBChart1.Title.Font.Size := 14;
DBChart1.LeftAxis.Title.Font.Size := 12;
DBChart1.LeftAxis.Title.Caption := 'Sales in Rs.';
DBChart1.BottomAxis.Title.Font.Size := 12;
DBChart1.BottomAxis.Title.Caption := 'Department Name';
//Charting Series
//To Remove Old Series
for intCnt := DBChart1.SeriesCount -1 downto 0 do
DBChart1.Series[intCnt].Free;
//To Add New Series
for intCnt := 1 to qryData.FieldCount - 1 do begin
strlstField.Add(qryData.FieldList[intCnt].FieldName);
DBChart1.AddSeries(TBarSeries.Create(nil));
end;
//To set source for Series
for intCnt:= 0 to DBChart1.SeriesCount -1 do begin
with DBChart1 do begin
Series[intCnt].Clear;
Series[intCnt].Title := strlstField[intCnt];
Series[intCnt].ParentChart := DBChart1;
Series[intCnt].DataSource := qryData;
Series[intCnt].XLabelsSource := 'dept_name';
Series[intCnt].YValues.ValueSource := strlstField[intCnt];
end;
end;
问题:当我在DATABASE中更改数据并重新运行时,应用程序图表保持不变。图表系列没有反映。上面的代码中有任何错误吗?
另一个问题是,在图片中,系列是2000的值,但我在数据库中添加了超过20,000的所有值。
答案 0 :(得分:1)
SELECT语句传递的是整数,而不是字段名,这就是为什么它们都在2000左右 - 因为这是年份的整数值。
您的字段是否实际上被称为2005
等?如果是这样,您需要括起字段名称,以便将它们视为字段名称而不是整数:
qryData.SQL.Add('SELECT dept_name, [2005] as [2005], [2006] as [2006], [2007] as [2007], ' +
'[2008] as [2008], [2009] as [2009], [2010] as [2010], [2011] as [2011] FROM SALES');
另请注意,您将2011
错误地别名为2211
(我上面已修复)。