2012-11-06 18 views
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; 

問題:當我在數據庫中更改數據並重新運行時,應用程序圖保持不變。圖表系列中沒有反映。以上代碼有錯誤嗎? enter image description here

另一個問題是,在圖片中,系列是在2000的價值,但我已經在數據庫中添加20,000以上的所有值。

回答

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'); 

還要注意的是,你被錯誤地混淆20112211(以上固定在礦)。

+1

是的,但您遇到的問題是「2005 as [A]」將字面整數值2005作爲名爲「A」的列傳遞,而不是稱爲「2005」的字段的值。爲了讓SQL把它當作字段名稱,你需要用方括號括住字段名稱(不像你在做的別名):「[2005] as A」。你只是在錯誤的部分有括號。 –

+0

我用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

+0

好的,謝謝。我的問題現在解決了。 – Ganesh