如何將資料加傯後並排名秀在統計圖表上蔫... |
尚未結案
|
lavender28
一般會員 發表:31 回覆:5 積分:7 註冊:2005-08-23 發送簡訊給我 |
想請問一下我有用統計圖表寫出我資料庫中每一筆MAC的流量.....
目前我有多筆相同的MAC流量..我希望能加傯後在圖表中秀出結果並能排出前10名..
那我該如何去寫出程式呢.... 下邊是我資料庫的資料 ID MAC SRC_IP DST_IP SUM TIME
1 00;11;D8:57:0e:DB 169.254.0.1 169.254.0.2 48 2005/8/17 下午 04:30:58
2 00:11:D8:57:0E:DB 169.254.0.1 169.254.0.2 48 2005/8/17 下午 04:30:58
3 00:E0:18:77:88:2C 169.254.0.2 169.254.0.1 48 2005/8/17 下午 04:30:58
4 00:11:D8:57:0E:DB 169.254.0.1 169.254.0.2 40 2005/8/17 下午 04:30:59
5 00:E0:18:77:88:2C 169.254.0.2 169.254.0.1 85 2005/8/17 下午 04:31:00 下面是我的程式部份 //--------------------------------------------------------------------------- #include
|
taishyang
站務副站長 發表:377 回覆:5490 積分:4563 註冊:2002-10-08 發送簡訊給我 |
|
haman
中階會員 發表:46 回覆:137 積分:56 註冊:2005-03-10 發送簡訊給我 |
我的建議是Button6時用ADOQuery來做會比較好做
你要的動作在SQL中下"SELECT MAC FROM NET_TRAFFIC GROUP BY MAC"
利用Query->FieldCount找出資料筆數
const int MCount = Query1->FieldCount; int Sum[Mcount]; ZeroMemory( Sum,sizeof(int)*MCount);再下"SELECT * FROM NET_TRAFFIC ORDER BY MAC" String MACTmp = Query->FieldbyName("MAC"); int i = 0; while(!Query->Eof) { if(MACTmp == Query->FieldbyName("MAC")) Sum[i] ; else i ; Query->Next(); }再來就直接對Sum做排序就行了 用Table的話大致上也差不多,只是你要自已計算MAC的筆數 然後在加總的部份你要知道每個sum對應的MAC(可以用結構去做),才不會加錯 ==================================== 懂的不多,卻想學的更多,搞得不自覺的將問題複雜化@@ |
lavender28
一般會員 發表:31 回覆:5 積分:7 註冊:2005-08-23 發送簡訊給我 |
引言: 我的建議是Button6時用ADOQuery來做會比較好做 你要的動作在SQL中下"SELECT MAC FROM NET_TRAFFIC GROUP BY MAC" 利用Query->FieldCount找出資料筆數可以請你解釋依下城市的意思ㄇ... 謝謝!const int MCount = Query1->FieldCount; int Sum[Mcount]; ZeroMemory( Sum,sizeof(int)*MCount);再下"SELECT * FROM NET_TRAFFIC ORDER BY MAC"String MACTmp = Query->FieldbyName("MAC"); int i = 0; while(!Query->Eof) { if(MACTmp == Query->FieldbyName("MAC")) Sum[i] ; else i ; Query->Next(); }再來就直接對Sum做排序就行了 用Table的話大致上也差不多,只是你要自已計算MAC的筆數 然後在加總的部份你要知道每個sum對應的MAC(可以用結構去做),才不會加錯 ==================================== 懂的不多,卻想學的更多,搞得不自覺的將問題複雜化@@ |
haman
中階會員 發表:46 回覆:137 積分:56 註冊:2005-03-10 發送簡訊給我 |
Sorry!!沒看清槸你資料庫的內容,導致我又把問題複雜化了@@" code的部份改好了,請參考
//這裡是以ADOQuery為例子的 void __fastcall TForm1::Button11Click(TObject *Sender) { Query1->Close(); Query1->SQL->Clear(); Query1->SQL->Add("SELECT MAC, SUM(prise) AS Sums"); Query1->SQL->Add("FROM Net_Traffic GROUP BY MAC"); Query1->SQL->Add("ORDER BY SUM(prise) DESC"); //以"SELECT MAC, SUM(prise) AS Sums FROM Net_Traffic GROUP BY MAC ORDER BY SUM(prise) DESC" //的SQL字串過慮出你要的資料 //建議把sum的欄位名稱改成別的,因為sum在sql中是用來做加總的函數 //SELECT MAC, SUM(prise) AS Sums這句的意思是找出mac與prise欄位資料的加總 //FROM Net_Traffic 是指資料來自Net_Traffic的資料表, //GROUP BY MAC是指依MAC的內容為群組分類 //ORDER BY SUM(prise) DESC是指依總合後的數字由大到小排序 Query1->Prepared=true; Query1->Open(); while(!Query1->Eof)//判斷資料是否已經讀完 { Series1->Add(Query1->FieldByName("Sums")->AsInteger,Query1->FieldByName("MAC")->AsString,clBlue); Query1->Next(); } Query1->Close(); }==================================== 懂的不多,卻想學的更多,搞得不自覺的將問題複雜化@@ |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |