如何將SQL的查詢結果顯示在DBChart? |
答題得分者是:cashxin2002
|
mathewzhao
中階會員 發表:121 回覆:164 積分:67 註冊:2003-04-04 發送簡訊給我 |
|
sos_admin
版主 發表:121 回覆:697 積分:768 註冊:2003-07-23 發送簡訊給我 |
|
mathewzhao
中階會員 發表:121 回覆:164 積分:67 註冊:2003-04-04 發送簡訊給我 |
|
cashxin2002
版主 發表:231 回覆:2555 積分:1937 註冊:2003-03-28 發送簡訊給我 |
引言: Hi! SOS_admin 感謝前輩的回應. SQL 如下: ADoquery1.SQL.text:='Select field1 as 姓名,count(Field2) AS 曠課次數 From table1 Group By Field2'; 準備將count(Field2)拼成Pie 顯示. 在設計期,好像沒法將DBChart1.series.pie 設為count(Field2). 希望前輩多說幾句 >>< face="Verdana, Arial, Helvetica"> 您好﹗ 可能您的理解有些錯誤了﹐小弟將此步驟寫一下﹐請參考如下﹕ 1﹒請先完成ADOQuery元件的SQL﹐并開啟(Open) 2﹒雙擊DBChart﹐開啟其編輯器對話方塊 3﹒在Chart頁次中的Series附頁次中﹐點擊右邊的Add按鈕﹐新增一個Chart圖﹐如您所述選擇pie圖形 4﹒在Series頁次中的Data Souce附頁次中﹐選擇DataSet類型﹐而后在下方的DataSet中就會出現您所使用的ADOQuery﹐點選此ADOQuery1(如上面的圖示) 5﹒下方的Label和Pie中就會出現您在ADOQuery的SQL中查詢出的曠課次數欄位名﹐點選此欄位名﹒ ===================== 努力,相信會獲得美麗! 忻晟
------
忻晟 |
mathewzhao
中階會員 發表:121 回覆:164 積分:67 註冊:2003-04-04 發送簡訊給我 |
感謝前輩cashxin2002 的回應!
晚輩剛才發問時沒把問題說明白,使得兩位前輩誤解了.
我想是 :
1)如果選RadioGroup1的itemindex 0
則用SQL:'Select field1 as 姓名,count(Field2) AS 曠課次數 From table1 Group By Field2';
然後在DBchart1 顯示 2)如果選選RadioGroup1的itemindex 1
則用SQL: 'Select field1 as 姓名,count(Field3) AS 休假次數 From table1 Group By Field3';
然後在DBchart1 顯示 即如何在Runtime 改變 DBChart1.series.pie 和 Label ,讓查詢結果在DBChart顯示.
CODE:
case RadioGroup1.itemindex of
0: begin
ADoquery1.Close;
ADoquery1.SQL.Clear;
ADoquery1.SQL.add('Select field1 as 姓名,count(Field2) AS 曠課次數 From table1 Group By Field2');
ADoquery1.Open;
DBGrid1.DataSource:=Datasource1;
series1.DataSource:=Datasource1;
end;
1:...
|
cashxin2002
版主 發表:231 回覆:2555 積分:1937 註冊:2003-03-28 發送簡訊給我 |
您好﹗ 原來您是要在執行時期來控制DBChart的變化﹐只是要在程式碼中來控制DBChart所得取的資料會比較麻煩一些﹐需要新增Series﹑指定資料來源﹑顯示的格式﹑色彩的控制等等﹒﹒﹒﹒ 所以小弟有個建議﹐做一種變通的處理方法﹐就是在Form中利用兩個重疊的DBChart來分別對應ADOQuery1和ADOQuery2﹐這樣的好處是﹐可以直接在設計時期利用DBChart元件的編輯器功能來設定資料來源(SQL查詢也可先行完成于對應的ADOQuery元件中)﹐并做以其他顯示屬性的設計﹐減少程式碼的編譯﹐會比較簡單一些﹒在執行時期的時候﹐就利用RadioGroup元件之ItemIndex屬性來判斷需要使用哪一個DBChart﹐配合DBChart的Show(顯示)和Hide(隱藏)方法來控制其出現的時機﹒程式碼就可改為如下﹕
case RadioGroup1.itemindex of 0:begin DataSource1.DataSet := ADOQuery1; DBChart2.Hide; DBChart1.Show; end; 1:begin DataSource1.DataSet := ADOQuery2; DBChart1.Hide; DBChart2.Show; end;參考看看﹗ ===================== 努力,相信會獲得美麗! 忻晟
------
忻晟 |
mathewzhao
中階會員 發表:121 回覆:164 積分:67 註冊:2003-04-04 發送簡訊給我 |
感謝前輩cashxin2002的回應!
真可惜昨天晚上沒看到前輩得回應(00:29:34的回應)!
從昨天晚上折騰到今早,晚輩已找到一個方法可以在Runtime改變 DBChart1.series.pie 和 Label. 不足是沒能設Legend的顏色及所代表的內容,如果那位先進知道,請告知,謝謝! Code如下:
case RadioGroup1.itemindex of
0:begin
ADoquery1.Close;
ADoquery1.SQL.Clear;
ADoquery1.SQL.add('Select field1 as 姓名,count(Field2) AS 曠課次數 From table1 Group By Field2');
ADoquery1.Open; DBGrid1.DataSource:=Datasource1;
series1.DataSource:=ADOquery1;
series1.XValues.ValueSource:='曠課次數'; DBChart1.Title.Text.Clear;
DBChart1.Title.Text.Add('曠課次數統計');
end;
1:...
|
deity
尊榮會員 發表:90 回覆:876 積分:678 註冊:2003-05-09 發送簡訊給我 |
引言: 感謝前輩cashxin2002的回應! 真可惜昨天晚上沒看到前輩得回應(00:29:34的回應)! 從昨天晚上折騰到今早,晚輩已找到一個方法可以在Runtime改變 DBChart1.series.pie 和 Label. 不足是沒能設Legend的顏色及所代表的內容,如果那位先進知道,請告知,謝謝! Code如下: case RadioGroup1.itemindex of 0:begin ADoquery1.Close; ADoquery1.SQL.Clear; ADoquery1.SQL.add('Select field1 as 姓名,count(Field2) AS 曠課次數 From table1 Group By Field2'); ADoquery1.Open; DBGrid1.DataSource:=Datasource1; series1.DataSource:=ADOquery1; series1.XValues.ValueSource:='曠課次數'; Series1.ColorEachPoint :=true; DBChart1.Title.Text.Clear; DBChart1.Title.Text.Add('曠課次數統計'); end; 1:... |
sos_admin
版主 發表:121 回覆:697 積分:768 註冊:2003-07-23 發送簡訊給我 |
对于DBChart来说,如果操作其中第几个用Series[n]来指定
....
adoquery1.Open ;
...
DBChart1.SeriesList.Series[0].DataSource:=adoquery1;
DBChart1.SeriesList.Series[0].XValues.ValueSource:='aa';
DBChart1.SeriesList.Series[0].yValues.ValueSource:='bb'; 动态指定XValues.ValueSource、yValues.ValueSource来设定就可以实现您的要求了
|
mathewzhao
中階會員 發表:121 回覆:164 積分:67 註冊:2003-04-04 發送簡訊給我 |
|
deity
尊榮會員 發表:90 回覆:876 積分:678 註冊:2003-05-09 發送簡訊給我 |
引言:引言: 感謝前輩cashxin2002的回應! 真可惜昨天晚上沒看到前輩得回應(00:29:34的回應)! 從昨天晚上折騰到今早,晚輩已找到一個方法可以在Runtime改變 DBChart1.series.pie 和 Label. 不足是沒能設Legend的顏色及所代表的內容,如果那位先進知道,請告知,謝謝! Code如下: case RadioGroup1.itemindex of 0:begin ADoquery1.Close; ADoquery1.SQL.Clear; ADoquery1.SQL.add('Select field1 as 姓名,count(Field2) AS 曠課次數 From table1 Group By Field2'); ADoquery1.Open; DBGrid1.DataSource:=Datasource1; series1.DataSource:=ADOquery1; series1.XValues.ValueSource:='曠課次數'; Series1.ColorEachPoint :=true; DBChart1.Title.Text.Clear; DBChart1.Title.Text.Add('曠課次數統計'); end; 1:...相应改改 DBGrid1.DataSource:=Datasource1; series1.DataSource:=ADOquery1; Series1.XLabelsSource :='姓名'; series1.YValues.ValueSource:='曠課次數'; Series1.ColorEachPoint :=true; 则利用Series自动的Color库,可以得到不同的Color对应不同的姓名,旷课次数。 试试看,是不是您所要的效果! |
cashxin2002
版主 發表:231 回覆:2555 積分:1937 註冊:2003-03-28 發送簡訊給我 |
引言: 感謝deity兄的回應! 'Series1.ColorEachPoint :=true;'能夠設定Legend的顏色,並且很簡潔, 謝謝! 現在還不能顯示Legend各顏色所代表的內容,如果那位先進知道,請告知,! 感謝sos_admin前輩提供了另一種動態設定的方法,謝謝!您好! deity的做法可行, 小弟再補充一些: 請先雙擊DBChart, 開啟其編輯器, 將Chart頁次之Legend的Text Style屬性值設為Left Value或Right Value, 若需要以Percent(百分比)形式顯示, 可選擇屬性值為Left Percent或Right Value, 選擇Plane形態將不會顯示分類合計的值, 只會顯示姓名. Chart頁次之Legend的Legend Style屬性值使用Automatic即可. 倘若在Run時期還不能正常顯示Legend的圖示, 請將Chart頁次之Legend的Visible屬性打勾, 或者在程式碼中加如下一句: DBChart1.Legend.Visible := True; 參考看看! ===================== 努力,相信會獲得美麗! 忻晟 發表人 - cashxin2002 於 2003/08/21 02:33:48
------
忻晟 |
cashxin2002
版主 發表:231 回覆:2555 積分:1937 註冊:2003-03-28 發送簡訊給我 |
您好﹗ 小弟今早利用手頭的範例資料庫﹐做了一段類似于您需要的程式碼﹐如下﹕
procedure TForm1.Button1Click(Sender: TObject); begin case RadioGroup1.ItemIndex of 0:begin ADOQuery1.Close; ADOQuery1.SQL.Clear; ADOQuery1.SQL.Add('Select 客戶編號, Count(客戶編號) As '); ADOQuery1.SQL.Add('總筆數 From 訂單 Group By 客戶編號'); ADOQuery1.Open; Series1.DataSource := ADOQuery1; Series1.XLabelsSource :='客戶編號'; series1.YValues.ValueSource:='總筆數'; Series1.ColorEachPoint :=true; DBChart1.Title.Text.Clear; DBChart1.Title.Text.Add('總筆數統計'); DBChart1.Legend.Visible := True; end; 1:begin ADOQuery1.Close; ADOQuery1.SQL.Clear; ADOQuery1.SQL.Add('Select 客戶編號, Sum(數量) As '); ADOQuery1.SQL.Add('總數量 From 訂單 Group By 客戶編號'); ADOQuery1.Open; Series1.Clear; Series1.DataSource := ADOQuery1; Series1.XLabelsSource :='客戶編號'; series1.YValues.ValueSource:='總數量'; Series1.ColorEachPoint :=true; DBChart1.Title.Text.Clear; DBChart1.Title.Text.Add('銷售總數量統計'); DBChart1.Legend.Visible := True; end; end; end;雖然說可以正常顯示出需要的Chart圖形﹐但發現另外的一個問題﹐就是RadioGroup中的兩個Item﹐只有被先選擇并連接ADOQuery1中資料執行顯示Chart的ItemIndex才可以反复正常顯示﹐但其后再點選到的ItemIndex就會出錯: ADOQuery1:Field'總筆數'not found 總覺得以上的程式碼中好像漏寫了什么才會造成這樣的錯誤﹗ ===================== 努力,相信會獲得美麗! 忻晟 發表人 - cashxin2002 於 2003/08/21 15:20:51
------
忻晟 |
deity
尊榮會員 發表:90 回覆:876 積分:678 註冊:2003-05-09 發送簡訊給我 |
引言: 您好﹗ 小弟今早利用手頭的範例資料庫﹐做了一段類似于您需要的程式碼﹐如下﹕HI,前辈您好: 出现字段找不到是因为 Series1.XLabelsSource ; series1.YValues.ValueSource 的值没有刷新过来, 在case RadioGroup1.ItemIndex of之前加入 Series1.XLabelsSource :=''; Series1.YValues.ValueSource :=''; 应该可以解决问题; 即改为: begin Series1.XLabelsSource :=''; Series1.YValues.ValueSource :=''; case RadioGroup1.ItemIndex of 0:begin …… …… 试试看procedure TForm1.Button1Click(Sender: TObject); begin case RadioGroup1.ItemIndex of 0:begin ADOQuery1.Close; ADOQuery1.SQL.Clear; ADOQuery1.SQL.Add('Select 客戶編號, Count(客戶編號) As '); ADOQuery1.SQL.Add('總筆數 From 訂單 Group By 客戶編號'); ADOQuery1.Open; Series1.DataSource := ADOQuery1; Series1.XLabelsSource :='客戶編號'; series1.YValues.ValueSource:='總筆數'; Series1.ColorEachPoint :=true; DBChart1.Title.Text.Clear; DBChart1.Title.Text.Add('總筆數統計'); DBChart1.Legend.Visible := True; end; 1:begin ADOQuery1.Close; ADOQuery1.SQL.Clear; ADOQuery1.SQL.Add('Select 客戶編號, Sum(數量) As '); ADOQuery1.SQL.Add('總數量 From 訂單 Group By 客戶編號'); ADOQuery1.Open; Series1.Clear; Series1.DataSource := ADOQuery1; Series1.XLabelsSource :='客戶編號'; series1.YValues.ValueSource:='總數量'; Series1.ColorEachPoint :=true; DBChart1.Title.Text.Clear; DBChart1.Title.Text.Add('銷售總數量統計'); DBChart1.Legend.Visible := True; end; end; end;雖然說可以正常顯示出需要的Chart圖形﹐但發現另外的一個問題﹐就是RadioGroup中的兩個Item﹐只有被先選擇并連接ADOQuery1中資料執行顯示Chart的ItemIndex才可以反复正常顯示﹐但其后再點選到的ItemIndex就會出錯: ADOQuery1:Field'總筆數'not found 總覺得以上的程式碼中好像漏寫了什么才會造成這樣的錯誤﹗ ===================== 努力,相信會獲得美麗! 忻晟 發表人 - cashxin2002 於 2003/08/21 15:20:51 |
cashxin2002
版主 發表:231 回覆:2555 積分:1937 註冊:2003-03-28 發送簡訊給我 |
您好﹗ 經deity前輩的指點﹐以下應該就是您需要的完整程式碼了﹕
procedure TForm1.Button1Click(Sender: TObject); begin Series1.XLabelsSource :=''; Series1.YValues.ValueSource :=''; case RadioGroup1.ItemIndex of 0:begin ADOQuery1.Close; ADOQuery1.SQL.Clear; ADOQuery1.SQL.Add('Select 客戶編號, Count(客戶編號) As '); ADOQuery1.SQL.Add('總筆數 From 訂單 Group By 客戶編號'); ADOQuery1.Open; Series1.DataSource := ADOQuery1; Series1.XLabelsSource :='客戶編號'; series1.YValues.ValueSource:='總筆數'; Series1.ColorEachPoint :=true; DBChart1.Title.Text.Clear; DBChart1.Title.Text.Add('總筆數統計'); DBChart1.Legend.Visible := True; end; 1:begin ADOQuery1.Close; ADOQuery1.SQL.Clear; ADOQuery1.SQL.Add('Select 客戶編號, Sum(數量) As '); ADOQuery1.SQL.Add('總數量 From 訂單 Group By 客戶編號'); ADOQuery1.Open; Series1.Clear; Series1.DataSource := ADOQuery1; Series1.XLabelsSource :='客戶編號'; series1.YValues.ValueSource:='總數量'; Series1.ColorEachPoint :=true; DBChart1.Title.Text.Clear; DBChart1.Title.Text.Add('銷售總數量統計'); DBChart1.Legend.Visible := True; end; end; end;Try it please! ===================== 努力,相信會獲得美麗! 忻晟
------
忻晟 |
mathewzhao
中階會員 發表:121 回覆:164 積分:67 註冊:2003-04-04 發送簡訊給我 |
再次感謝各位前輩的熱心指點!
特別前輩cashxin2002再三熱心指點!
晚輩還找到一些運行期可以變化的顯示效果,個人感覺比較好玩,如下:
對Pie的顯示效果改變:
1: Chart3DPercent DBChart1.Chart3DPercent:=ScrollBar1.Position; 2: RotationAngle Series1.RotationAngle:=ScrollBar2.Position; 3: Zoom dbchart1.View3DOptions.Zoom:=ScrollBar3.Position; 4: 將Pie變為Bar ChangeSeriesType(TChartSeries(Series1), TBarSeries); (不過這個Bar顯示為2D效果,不知怎樣可以顯示為3D效果)發表人 - mathewzhao 於 2003/08/28 17:00:42 |
JLATSTAR
一般會員 發表:8 回覆:16 積分:4 註冊:2007-05-08 發送簡訊給我 |
|
pedro
尊榮會員 發表:152 回覆:1187 積分:892 註冊:2002-06-12 發送簡訊給我 |
|
P.D.
版主 發表:603 回覆:4038 積分:3874 註冊:2006-10-31 發送簡訊給我 |
我的經驗提供參考
不管要那種圖形(pie, bar, line...) 一個重點 每一個圖形數據都設定一組 series, 因為在Series 中幾乎可以完成各種所要的設定,與其在RunTime指定容易出錯,不如都先指定好, 例如 pie serial 指定好圖形,x value... bar serial 指定好 x, y value , label .... line serial 指定好 x, y value ... 如果要輸出 bar , 只要把 pie serial.Visible:= False, line serial.Visible:= False ,只保留 bar serial 出現就解決了 甚至同樣是 bar chart , 也可以有好多組 serial 做不同顯示方式, 試試看吧! |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |