線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1240
推到 Plurk!
推到 Facebook!

如何將資料加傯後並排名秀在統計圖表上蔫...

尚未結案
lavender28
一般會員


發表:31
回覆:5
積分:7
註冊:2005-08-23

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-10-30 20:23:26 IP:218.168.xxx.xxx 未訂閱
想請問一下我有用統計圖表寫出我資料庫中每一筆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  #pragma hdrstop #include "Unit6.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm6 *Form6; //--------------------------------------------------------------------------- __fastcall TForm6::TForm6(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- void __fastcall TForm6::Button2Click(TObject *Sender) { int i; Table1->Open(); for(i=0;i<50;i++) { Series1->Add(Table1SUM->AsInteger, Table1MAC->AsString, clBlue); Table1->Next(); } Table1->Close(); } //--------------------------------------------------------------------------- void __fastcall TForm6::Button1Click(TObject *Sender) { // 將統計圖表列印出來 Chart1->Print(); ShowMessage("列印完畢 !!"); } //--------------------------------------------------------------------------- void __fastcall TForm6::FormCreate(TObject *Sender) { // 設定圖表的Title字串 Chart1->Title->Text->Strings[0]="流量統計圖表"; Chart1->LeftAxis->Title->Caption="SUM"; Chart1->BottomAxis->Title->Caption="MAC"; } //--------------------------------------------------------------------------- 這是我抓到每筆MAC的流量資料..我希望能加總並排名
taishyang
站務副站長


發表:377
回覆:5490
積分:4563
註冊:2002-10-08

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-10-31 00:13:51 IP:218.168.xxx.xxx 未訂閱
您好:    PO程式碼的方式與版規說明請參考下面連結,煩請修改謝謝您的配合 >
haman
中階會員


發表:46
回覆:137
積分:56
註冊:2005-03-10

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-10-31 05:01:05 IP:211.76.xxx.xxx 未訂閱
我的建議是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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-10-31 21:50:53 IP:218.168.xxx.xxx 未訂閱
引言: 我的建議是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

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-11-01 01:09:07 IP:211.76.xxx.xxx 未訂閱
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();
}
==================================== 懂的不多,卻想學的更多,搞得不自覺的將問題複雜化@@
系統時間:2024-04-28 7:10:22
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!