1
我已經使用下面的代碼來創建動態TDBChart系列。我使用MS-Access和TADOQuery組件。在BUTTON點擊事件代碼。在delphi中創建動態TDBChart系列:數據不變
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;
問題:當我在數據庫中更改數據並重新運行時,應用程序圖保持不變。圖表系列中沒有反映。以上代碼有錯誤嗎?
另一個問題是,在圖片中,系列是在2000的價值,但我已經在數據庫中添加20,000以上的所有值。
是的,但您遇到的問題是「2005 as [A]」將字面整數值2005作爲名爲「A」的列傳遞,而不是稱爲「2005」的字段的值。爲了讓SQL把它當作字段名稱,你需要用方括號括住字段名稱(不像你在做的別名):「[2005] as A」。你只是在錯誤的部分有括號。 –
我用alias 2011作爲2211 **來檢查圖表中的反射。我將字段名稱更改爲Filed名稱。因此存在問題。 'qryData.SQL.Add('SELECT dept_name,2005 as [a],2006 as [b],2007 as [c],'+'2008 as [d],2009 as [e],2010 as [f], 2011 [g] FROM SALES');' – Ganesh
好的,謝謝。我的問題現在解決了。 – Ganesh