I have used following code to create Dynamically series of TDBChart. I used MS-Access and TADOQuery component. CODE on BUTTON Click Event.
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;
PROBLEM: When i change data in DATABASE and Re-run the application chart remain same. No reflection done in chart series. Had any mistake in Above Code?

Another Problem is that in the picture, series are at 2000 value, but i have add all value above 20,000 in the DATABASE.
The SELECT statement is passing integers, not field names, which is why they are all around 2,000 – because that is the value of the year as an integer.
Are your fields actually called
2005etc? If so, you need to bracket the field names so they are treated like field names and not like integers:Note also that you are aliasing
2011incorrectly as2211(fixed in mine above).