IST0010MF.cpp 45 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249
  1. //---------------------------------------------------------------------------
  2. #include <vcl.h>
  3. #include "ITSSkinF.h"
  4. #include "ITSUtilF.h"
  5. #include "AppGlobalF.h"
  6. #include "ITSLangTransF.h"
  7. #pragma hdrstop
  8. #include "IST0010MF.h"
  9. //---------------------------------------------------------------------------
  10. #pragma package(smart_init)
  11. #pragma link "FRAME_ChartF"
  12. #pragma link "cxButtons"
  13. #pragma link "cxCalc"
  14. #pragma link "cxClasses"
  15. #pragma link "cxContainer"
  16. #pragma link "cxControls"
  17. #pragma link "cxCustomData"
  18. #pragma link "cxData"
  19. #pragma link "cxDataStorage"
  20. #pragma link "cxDBData"
  21. #pragma link "cxEdit"
  22. #pragma link "cxFilter"
  23. #pragma link "cxGraphics"
  24. #pragma link "cxGrid"
  25. #pragma link "cxGridBandedTableView"
  26. #pragma link "cxGridChartView"
  27. #pragma link "cxGridCustomTableView"
  28. #pragma link "cxGridCustomView"
  29. #pragma link "cxGridDBChartView"
  30. #pragma link "cxGridLevel"
  31. #pragma link "cxGridTableView"
  32. #pragma link "cxLabel"
  33. #pragma link "cxLookAndFeelPainters"
  34. #pragma link "cxLookAndFeels"
  35. #pragma link "cxPC"
  36. #pragma link "cxPCdxBarPopupMenu"
  37. #pragma link "cxSplitter"
  38. #pragma link "cxStyles"
  39. #pragma link "dxSkinBlack"
  40. #pragma link "dxSkinBlue"
  41. #pragma link "dxSkinsCore"
  42. #pragma link "dxSkinscxPCPainter"
  43. #pragma resource "*.dfm"
  44. TIST0010M *IST0010M = NULL;
  45. //---------------------------------------------------------------------------
  46. __fastcall TIST0010M::TIST0010M(TComponent* Owner)
  47. : TForm(Owner)
  48. {
  49. LangTrans->Translate(this, ITSDb_GetConnection());
  50. ITSSkin_Load(this);
  51. CMM_LoadForm(g_sFormsDir, this);
  52. FTitle = Caption;//"인터넷접속 통계";
  53. }
  54. //---------------------------------------------------------------------------
  55. /*
  56. * form이 메모리에서 생성될때 호출되는 생성자 이벤트 핸들러
  57. * arguments
  58. * Sender : event handler 객체
  59. * return
  60. * void
  61. */
  62. void __fastcall TIST0010M::FormCreate(TObject *Sender)
  63. {
  64. PgList->HideTabs = true;
  65. }
  66. //---------------------------------------------------------------------------
  67. /*
  68. * form을 보여줄때 호출되는 event 메서드이다.
  69. * arguments
  70. * Sender : event handler 객체
  71. * return
  72. * void
  73. */
  74. void __fastcall TIST0010M::FormShow(TObject *Sender)
  75. {
  76. PgList->ActivePageIndex = 0;
  77. PgQuery->ActivePageIndex= 0;
  78. FormInit();
  79. }
  80. //---------------------------------------------------------------------------
  81. /*
  82. * form 초기화
  83. * arguments
  84. *
  85. * return
  86. * void
  87. */
  88. void __fastcall TIST0010M::FormInit()
  89. {
  90. DtDay->Date = IncHour(Now(), -24);
  91. DtMon->Date = StartOfTheMonth(IncHour(Now(), -24));
  92. DtYear->Date = IncHour(Now(), -24);
  93. DtStYear->Date = IncHour(Now(), -24);
  94. DtEdYear->Date = IncHour(Now(), -24);
  95. ADOD->Connection = ITSDb_GetConnection();
  96. ADOM->Connection = ITSDb_GetConnection();
  97. ADOY->Connection = ITSDb_GetConnection();
  98. ADOT->Connection = ITSDb_GetConnection();
  99. FRAMEChart1->SetChartLegend(FrmLang->lblChartHour->Caption, FrmLang->lblChartCnt->Caption);//"시간대", "건수");
  100. FRAMEChart1->ChartValueDisplay(FRAMEChart1->ChkDisplayVal->Checked);
  101. FRAMEChart1->TvChart->ToolBox->CustomizeButton = true;
  102. FRAMEChart1->TvChart->Legend->Position = cppDefault;
  103. FRAMEChart2->SetChartLegend(FrmLang->lblChartDay->Caption, FrmLang->lblChartCnt->Caption);//"일자", "건수");
  104. FRAMEChart2->ChartValueDisplay(FRAMEChart2->ChkDisplayVal->Checked);
  105. FRAMEChart2->TvChart->ToolBox->CustomizeButton = true;
  106. FRAMEChart2->TvChart->Legend->Position = cppDefault;
  107. FRAMEChart3->SetChartLegend(FrmLang->lblChartMonth->Caption, FrmLang->lblChartCnt->Caption);//"월", "건수");
  108. FRAMEChart3->ChartValueDisplay(FRAMEChart3->ChkDisplayVal->Checked);
  109. FRAMEChart3->TvChart->ToolBox->CustomizeButton = true;
  110. FRAMEChart3->TvChart->Legend->Position = cppDefault;
  111. FRAMEChart4->SetChartLegend(FrmLang->lblChartYear->Caption, FrmLang->lblChartCnt->Caption);//"년도", "건수");
  112. FRAMEChart4->ChartValueDisplay(FRAMEChart4->ChkDisplayVal->Checked);
  113. FRAMEChart4->TvChart->ToolBox->CustomizeButton = true;
  114. FRAMEChart4->TvChart->Legend->Position = cppDefault;
  115. CMM_SetSummaryAlign((TcxGridTableView *)TvDay);
  116. CMM_SetSummaryAlign((TcxGridTableView *)TvMon);
  117. CMM_SetSummaryAlign((TcxGridTableView *)TvYear);
  118. CMM_SetSummaryAlign((TcxGridTableView *)TvTermYear);
  119. }
  120. //---------------------------------------------------------------------------
  121. /*
  122. * 닫기버튼 이나 x버튼 클릭시 공통으로 처리하는 로직이들어간다..
  123. * Form과 DataModule class를 delete시킨다.
  124. * arguments
  125. *
  126. * return
  127. * void
  128. */
  129. void __fastcall TIST0010M::CommClose()
  130. {
  131. try
  132. {
  133. TvDay->BeginUpdate();
  134. ADOD->Close();
  135. TvDay->EndUpdate();
  136. TvMon->BeginUpdate();
  137. ADOM->Close();
  138. TvMon->EndUpdate();
  139. TvYear->BeginUpdate();
  140. ADOY->Close();
  141. TvYear->EndUpdate();
  142. TvTermYear->BeginUpdate();
  143. ADOT->Close();
  144. TvTermYear->EndUpdate();
  145. CMM_SaveForm(g_sFormsDir, this);
  146. }
  147. catch(...)
  148. {
  149. }
  150. }
  151. //---------------------------------------------------------------------------
  152. /*
  153. * 통계구분 탭 변경시 발생하는 이벤트 핸들러
  154. * arguments
  155. *
  156. * return
  157. * void
  158. */
  159. void __fastcall TIST0010M::PgQueryChange(TObject *Sender)
  160. {
  161. //Tab Change
  162. PgList->ActivePageIndex = PgQuery->ActivePageIndex;
  163. switch(PgQuery->ActivePageIndex)
  164. {
  165. case 0: DtDay->SetFocus(); break;
  166. case 1: DtMon->SetFocus(); break;
  167. case 2: DtYear->SetFocus(); break;
  168. case 3: DtStYear->SetFocus(); break;
  169. default: break;
  170. }
  171. }
  172. //---------------------------------------------------------------------------
  173. /*
  174. * Print Button Click Event Handler
  175. * arguments
  176. * Sender : event handler 객체
  177. * return
  178. * void
  179. */
  180. void __fastcall TIST0010M::BtnPrintClick(TObject *Sender)
  181. {
  182. #if 0
  183. TcxGrid *pGrid = NULL;
  184. TcxGridDBBandedTableView *pView = NULL;
  185. TLabel *LblQry= NULL;
  186. String sTitle;
  187. switch(PgQuery->ActivePageIndex)
  188. {
  189. case 0: pGrid = CxDay; pView = TvDay;
  190. LblQry = LblQryTm;
  191. break;
  192. case 1: pGrid = CxMon; pView = TvMon;
  193. LblQry = LblQryDay;
  194. break;
  195. case 2: pGrid = CxYear; pView = TvYear;
  196. LblQry = LblQryYear;
  197. break;
  198. case 3: pGrid = CxTermYear; pView = TvTermYear;
  199. LblQry = LblQryTermYear;
  200. break;
  201. default: return;
  202. }
  203. sTitle = LblRptTitle->Caption + "\r\n" + LblQry->Caption;
  204. if (pView->DataController->RecordCount == 0)
  205. {
  206. ShowMessage(FrmLang->lblPrintNoData->Caption);//"인쇄 할 데이터가 없습니다.");
  207. return;
  208. }
  209. ComponentPrinterLink->OptionsView->Footers = true;
  210. ComponentPrinterLink->OptionsView->GroupFooters = true;
  211. ComponentPrinterLink->OptionsSize->AutoWidth = true;
  212. PrintList(pGrid, sTitle, m_sFooterRight);
  213. pView->DataController->FocusedRecordIndex = 0;
  214. #endif
  215. }
  216. //---------------------------------------------------------------------------
  217. /*
  218. * Excel Button Click Event Handler
  219. * arguments
  220. * Sender : event handler 객체
  221. * return
  222. * void
  223. */
  224. void __fastcall TIST0010M::BtnExlSaveClick(TObject *Sender)
  225. {
  226. TcxGrid *pGrid = NULL;
  227. TcxGridBandedTableView *pView = NULL;
  228. TLabel *LblQry= NULL;
  229. String sTitle;
  230. switch(PgQuery->ActivePageIndex)
  231. {
  232. case 0: pGrid = CxDay; pView = TvDay;
  233. LblQry = LblQryTm;
  234. break;
  235. case 1: pGrid = CxMon; pView = TvMon;
  236. LblQry = LblQryDay;
  237. break;
  238. case 2: pGrid = CxYear; pView = TvYear;
  239. LblQry = LblQryYear;
  240. break;
  241. case 3: pGrid = CxTermYear; pView = TvTermYear;
  242. LblQry = LblQryTermYear;
  243. break;
  244. default: return;
  245. }
  246. sTitle = LblRptTitle->Caption + LblQry->Caption;
  247. if (pView->DataController->RecordCount == 0)
  248. {
  249. ShowMessage(FrmLang->lblSaveNoData->Caption);//"저장 할 데이터가 없습니다.");
  250. return;
  251. }
  252. CMM_ExportToExcelFile(sTitle, pGrid, (TcxGridTableView *)pView, this);
  253. }
  254. //---------------------------------------------------------------------------
  255. /*
  256. * Refresh Button Click Event Handler
  257. * arguments
  258. * Sender : event handler 객체
  259. * return
  260. * void
  261. */
  262. void __fastcall TIST0010M::BtnSearchClick(TObject *Sender)
  263. {
  264. Application->ProcessMessages();
  265. TSqlCursor sqlCrs((TControl*)BtnSearch);
  266. Application->ProcessMessages();
  267. RefreshData();
  268. }
  269. //---------------------------------------------------------------------------
  270. /*
  271. * Refresh Data Event Function
  272. * arguments
  273. *
  274. * return
  275. * void
  276. */
  277. void __fastcall TIST0010M::RefreshData()
  278. {
  279. TcxGridBandedTableView *pView = NULL;
  280. TLabel *LblQry= NULL;
  281. WORD nYear, nMonth, nDay, nHour, nMin, nSec, nMSec;
  282. int nDispCols;
  283. String sBandText = "";
  284. TDateTimePicker *DtQryTm;
  285. int nStYear, nEdYear;
  286. switch(PgQuery->ActivePageIndex)
  287. {
  288. case 0:
  289. pView = (TcxGridBandedTableView *)TvDay; DtQryTm = DtDay;
  290. LblQry = LblQryTm;
  291. sBandText = "(" + DtDay->Date.FormatString("yyyy년 mm월 dd일") + ")";
  292. nDispCols = 24;
  293. if (StartOfTheDay(Now()) <= DtDay->DateTime)
  294. {
  295. DecodeTime(Now(), nHour, nMin, nSec, nMSec);
  296. if (nMin > 5) nDispCols = nHour;
  297. else nDispCols = nHour-1;
  298. // nDispCols = nHour+1;
  299. }
  300. break;
  301. case 1:
  302. pView = TvMon; DtQryTm = DtMon;
  303. sBandText = "(" + DtMon->Date.FormatString("yyyy년 mm월") + ")";
  304. LblQry = LblQryDay;
  305. nDispCols = ITSUtil_GetMonthLastDay(AnsiString(DtMon->Date.FormatString("yyyymm")).c_str());
  306. if (StartOfTheDay(Now()) <= EndOfTheMonth(DtMon->DateTime))
  307. {
  308. DecodeDate(Now(), nYear, nMonth, nDay);
  309. if (nDay < nDispCols) nDispCols = nDay-1;
  310. }
  311. break;
  312. case 2:
  313. pView = TvYear; DtQryTm = DtYear;
  314. sBandText = "(" + DtYear->Date.FormatString("yyyy년") + ")";
  315. LblQry = LblQryYear;
  316. nDispCols = 12;
  317. if (Now().FormatString("yyyy") == DtYear->DateTime.FormatString("yyyy"))
  318. {
  319. DecodeDate(Now(), nYear, nMonth, nDay);
  320. nDispCols = nMonth;
  321. }
  322. break;
  323. case 3:
  324. pView = TvTermYear; DtQryTm = DtStYear;
  325. nStYear = DtStYear->DateTime.FormatString("yyyy").ToInt();
  326. nEdYear = DtEdYear->DateTime.FormatString("yyyy").ToInt();
  327. if (nStYear > nEdYear)
  328. {
  329. MessageDlg(L"통계검색 시각 정보를 확인하세요...",
  330. mtInformation, TMsgDlgButtons() << mbOK, NULL);
  331. DtStYear->SetFocus();
  332. nDispCols = 0; /* 리턴하지 않는 경우 모든 컬럼을 숨긴다. */
  333. return;
  334. }
  335. if ((nEdYear - nStYear) > 23)
  336. {
  337. nEdYear = nStYear + 23;
  338. String sDateTime;
  339. sDateTime = String(nEdYear) + "-01-01 00:00:00";
  340. DtEdYear->DateTime = StrToDateTime(sDateTime);
  341. }
  342. nDispCols = nEdYear - nStYear;
  343. nDispCols++;
  344. sBandText = "(" + DtStYear->Date.FormatString("yyyy년 ~ ") + DtEdYear->Date.FormatString("yyyy년") + ")";
  345. LblQry = LblQryTermYear;
  346. #if 0
  347. if (Now().FormatString("yyyy") == DtYear->DateTime.FormatString("yyyy"))
  348. {
  349. DecodeDate(Now(), nYear, nMonth, nDay);
  350. nDispCols = nMonth;
  351. }
  352. #endif
  353. break;
  354. default: return;
  355. }
  356. if (!pView) return;
  357. if (PgQuery->ActivePageIndex == 3)
  358. {
  359. }
  360. else
  361. {
  362. if (DtQryTm->DateTime.FormatString("yyyymmdd").ToInt() > Now().FormatString("yyyymmdd").ToInt())
  363. {
  364. MessageDlg(L"통계검색 시각 정보를 확인하세요...",
  365. mtInformation, TMsgDlgButtons() << mbOK, NULL);
  366. DtQryTm->SetFocus();
  367. nDispCols = 0; /* 리턴하지 않는 경우 모든 컬럼을 숨긴다. */
  368. return;
  369. }
  370. }
  371. LblQry->Caption = sBandText;
  372. CMM_ShowListColumn((TcxGridDBBandedTableView *)pView, nDispCols);
  373. TWaitCursor crs;
  374. try
  375. {
  376. pView->BeginUpdate();
  377. switch(PgQuery->ActivePageIndex)
  378. {
  379. case 0: SelDayStatistics(nDispCols); break;
  380. case 1: SelMonthStatistics(nDispCols); break;
  381. case 2: SelYearStatistics(nDispCols); break;
  382. case 3: SelTermYearStatistics(nDispCols); break;
  383. default: return;
  384. }
  385. }
  386. __finally
  387. {
  388. pView->EndUpdate();
  389. //pView->ApplyBestFit(NULL, false, false);
  390. }
  391. DrawChart(sBandText);
  392. }
  393. //---------------------------------------------------------------------------
  394. /*
  395. * 조회한 데이터를 기준으로 차트를 그린다.
  396. * arguments
  397. *
  398. * return
  399. * void
  400. */
  401. void __fastcall TIST0010M::DrawChart(String sTitle)
  402. {
  403. #if 0
  404. TcxGridDBBandedTableView *pView = NULL;
  405. String sAxisX, sAxisY;
  406. int nAxisY, nStColIdx, nTotColIdx;
  407. nTotColIdx = 1;
  408. switch(PgQuery->ActivePageIndex)
  409. {
  410. case 0: pView = TvDay;
  411. nAxisY = vDayColumnNm->Index;
  412. nStColIdx = vDayColumnTot->Index;
  413. break;
  414. case 1: pView = TvMon;
  415. nAxisY = vMonColumnNm->Index;
  416. nStColIdx = vMonColumnTot->Index;
  417. break;
  418. case 2: pView = TvYear;
  419. nAxisY = vYearColumnNm->Index;
  420. nStColIdx = vYearColumnTot->Index;
  421. break;
  422. case 3: pView = TvTermYear;
  423. nAxisY = cxGridDBBandedColumn2->Index;
  424. nStColIdx = cxGridDBBandedColumn3->Index;
  425. break;
  426. default: return;
  427. }
  428. /*
  429. * Chart draw
  430. */
  431. try
  432. {
  433. m_pFrmChart[PgQuery->ActivePageIndex]->Clear();
  434. if (pView->DataController->RecordCount == 0)
  435. {
  436. //ShowMessage("표출 할 데이터가 없습니다.");
  437. return;
  438. }
  439. m_pFrmChart[PgQuery->ActivePageIndex]->BeginDraw("", "", "");
  440. m_pFrmChart[PgQuery->ActivePageIndex]->DrawChart1((TcxGridDBTableView *)pView, nAxisY, nStColIdx, nTotColIdx);
  441. m_pFrmChart[PgQuery->ActivePageIndex]->EndDraw();
  442. }
  443. catch(...)
  444. {
  445. }
  446. #endif
  447. }
  448. //---------------------------------------------------------------------------
  449. /*
  450. * 시간대별 일 통계 데이터 조회/출력
  451. * arguments
  452. *
  453. * return
  454. * void
  455. */
  456. void __fastcall TIST0010M::SelDayStatistics(int ADispCols)
  457. {
  458. TSqlCursor sqlCrs;
  459. TADOQuery *pADO = ADOD;
  460. String sQry;
  461. String sParamDay;
  462. sParamDay = DtDay->Date.FormatString("yyyymmdd");
  463. sQry = "SELECT DECODE(Y.PAGETP, 'W', '웹', 'S', '스마트폰', '') AS PAGETPNAME, \r\n"
  464. " Y.PAGEID, Y.PAGE_NAME, \r\n"
  465. " NVL(X.PAGEID,0) PAGEID, NVL(X.TOT,0) TOT, \r\n"
  466. " NVL(X.C00,0) C00, NVL(X.C01,0) C01, NVL(X.C02,0) C02, \r\n"
  467. " NVL(X.C03,0) C03, NVL(X.C04,0) C04, NVL(X.C05,0) C05, \r\n"
  468. " NVL(X.C06,0) C06, NVL(X.C07,0) C07, NVL(X.C08,0) C08, \r\n"
  469. " NVL(X.C09,0) C09, NVL(X.C10,0) C10, NVL(X.C11,0) C11, \r\n"
  470. " NVL(X.C12,0) C12, NVL(X.C13,0) C13, NVL(X.C14,0) C14, \r\n"
  471. " NVL(X.C15,0) C15, NVL(X.C16,0) C16, NVL(X.C17,0) C17, \r\n"
  472. " NVL(X.C18,0) C18, NVL(X.C19,0) C19, NVL(X.C20,0) C20, \r\n"
  473. " NVL(X.C21,0) C21, NVL(X.C22,0) C22, NVL(X.C23,0) C23 \r\n"
  474. " FROM (SELECT CASE WHEN GROUPING(A.PAGEID) = 1 THEN '0' \r\n"
  475. " ELSE A.PAGEID END AS PAGEID, \r\n"
  476. " SUM(A.CONNCNT) AS TOT, \r\n"
  477. " SUM(DECODE(A.STATHOUR, '00', A.CONNCNT, 0)) AS C00, \r\n"
  478. " SUM(DECODE(A.STATHOUR, '01', A.CONNCNT, 0)) AS C01, \r\n"
  479. " SUM(DECODE(A.STATHOUR, '02', A.CONNCNT, 0)) AS C02, \r\n"
  480. " SUM(DECODE(A.STATHOUR, '03', A.CONNCNT, 0)) AS C03, \r\n"
  481. " SUM(DECODE(A.STATHOUR, '04', A.CONNCNT, 0)) AS C04, \r\n"
  482. " SUM(DECODE(A.STATHOUR, '05', A.CONNCNT, 0)) AS C05, \r\n"
  483. " SUM(DECODE(A.STATHOUR, '06', A.CONNCNT, 0)) AS C06, \r\n"
  484. " SUM(DECODE(A.STATHOUR, '07', A.CONNCNT, 0)) AS C07, \r\n"
  485. " SUM(DECODE(A.STATHOUR, '08', A.CONNCNT, 0)) AS C08, \r\n"
  486. " SUM(DECODE(A.STATHOUR, '09', A.CONNCNT, 0)) AS C09, \r\n"
  487. " SUM(DECODE(A.STATHOUR, '10', A.CONNCNT, 0)) AS C10, \r\n"
  488. " SUM(DECODE(A.STATHOUR, '11', A.CONNCNT, 0)) AS C11, \r\n"
  489. " SUM(DECODE(A.STATHOUR, '12', A.CONNCNT, 0)) AS C12, \r\n"
  490. " SUM(DECODE(A.STATHOUR, '13', A.CONNCNT, 0)) AS C13, \r\n"
  491. " SUM(DECODE(A.STATHOUR, '14', A.CONNCNT, 0)) AS C14, \r\n"
  492. " SUM(DECODE(A.STATHOUR, '15', A.CONNCNT, 0)) AS C15, \r\n"
  493. " SUM(DECODE(A.STATHOUR, '16', A.CONNCNT, 0)) AS C16, \r\n"
  494. " SUM(DECODE(A.STATHOUR, '17', A.CONNCNT, 0)) AS C17, \r\n"
  495. " SUM(DECODE(A.STATHOUR, '18', A.CONNCNT, 0)) AS C18, \r\n"
  496. " SUM(DECODE(A.STATHOUR, '19', A.CONNCNT, 0)) AS C19, \r\n"
  497. " SUM(DECODE(A.STATHOUR, '20', A.CONNCNT, 0)) AS C20, \r\n"
  498. " SUM(DECODE(A.STATHOUR, '21', A.CONNCNT, 0)) AS C21, \r\n"
  499. " SUM(DECODE(A.STATHOUR, '22', A.CONNCNT, 0)) AS C22, \r\n"
  500. " SUM(DECODE(A.STATHOUR, '23', A.CONNCNT, 0)) AS C23 \r\n"
  501. " FROM TB_ST_HOUR_CONN_WEB A \r\n"
  502. " WHERE A.STATDATE = :p01 \r\n"
  503. " GROUP BY ROLLUP(A.PAGEID)) X, \r\n"
  504. " (SELECT PAGEID, PAGETP, PAGETP || ':' || PAGENAME AS PAGE_NAME \r\n"
  505. " FROM TB_MS_WEB_PAGE) Y \r\n"
  506. " WHERE Y.PAGEID = X.PAGEID(+) \r\n"
  507. " ORDER BY Y.PAGEID \r\n";
  508. try
  509. {
  510. ITSDb_SQLText(pADO, sQry);
  511. ITSDb_SQLBind(pADO, "p01", sParamDay);
  512. ITSDb_SQLOpen(pADO);
  513. DspDayStatistics(ADispCols);
  514. }
  515. catch(EDatabaseError &E)
  516. {
  517. ::PostMessage(Application->MainForm->Handle, (UINT)(WM_USER+0xF4), (WPARAM)0xB2, (LPARAM)0xB2);
  518. DBERRORMSG(Caption, String(E.ClassName()), E.Message, sQry);
  519. throw Exception(String(E.ClassName()) + E.Message);
  520. }
  521. catch(Exception &exception)
  522. {
  523. ::PostMessage(Application->MainForm->Handle, (UINT)(WM_USER+0xF4), (WPARAM)0xB2, (LPARAM)0xB2);
  524. DBERRORMSG(Caption, String(exception.ClassName()), exception.Message, sQry);
  525. throw Exception(String(exception.ClassName()) + exception.Message);
  526. }
  527. }
  528. //---------------------------------------------------------------------------
  529. void __fastcall TIST0010M::DspDayStatistics(int ADispCols)
  530. {
  531. TSqlCursor sqlCrs;
  532. TADOQuery *pADO = ADOD;
  533. TcxGridTableView *TvList = (TcxGridTableView*)TvDay;
  534. TcxDataController *pGDC = TvList->DataController;
  535. TcxGridChartView *TvChart = FRAMEChart1->TvChart;
  536. FRAMEChart1->FTitle = LblQryTm->Caption;
  537. try
  538. {
  539. TcxGridChartSeries *pChart = NULL;
  540. TvChart->ClearSeries();
  541. FRAMEChart1->ChartValueDisplay(FRAMEChart1->ChkDisplayVal->Checked);
  542. CMM_ClearGridTableView(TvList);
  543. int nRow = 0;
  544. int nDataCnt = 0;
  545. try
  546. {
  547. TvList->BeginUpdate();
  548. TvChart->BeginUpdate();
  549. nDataCnt = pADO->RecordCount;
  550. TvChart->DataController->RecordCount = ADispCols+1;
  551. pGDC->RecordCount = nDataCnt;
  552. int ii;
  553. String sCol, sChart;
  554. TvChart->Categories->Values[0] = FrmLang->lblChartSoge->Caption;//"소계";
  555. for (ii = 0; ii < ADispCols; ii++)
  556. {
  557. sChart.printf(L"%02d", ii);
  558. TvChart->Categories->Values[ii+1] = sChart;
  559. }
  560. for( ; !pADO->Eof; pADO->Next(), nRow++)
  561. {
  562. String sId = pADO->FieldByName("PAGEID")->AsString;
  563. String sNm = pADO->FieldByName("PAGE_NAME")->AsString;
  564. pGDC->Values[nRow][ColDayNo->Index] = sId;
  565. pGDC->Values[nRow][ColDayNm->Index] = sNm;
  566. pChart = TvChart->CreateSeries();
  567. pChart->DataBinding->ValueType = "Integer";
  568. pChart->DisplayText = sNm;
  569. pGDC->Values[nRow][ColDayTt->Index] = pADO->FieldByName("TOT")->AsInteger;
  570. pChart->Values[0] = pGDC->Values[nRow][ColDayTt->Index];
  571. for (int ii = 0; ii < ADispCols; ii++)
  572. {
  573. sCol.printf(L"C%02d", ii);
  574. pGDC->Values[nRow][ColDay00->Index+ii] = pADO->FieldByName(sCol)->AsInteger;
  575. pChart->Values[ii+1] = pGDC->Values[nRow][ColDay00->Index+ii];
  576. }
  577. }
  578. }
  579. __finally
  580. {
  581. if (pADO)
  582. {
  583. pADO->Close();
  584. }
  585. TvChart->EndUpdate();
  586. TvList->EndUpdate();
  587. }
  588. }
  589. catch(EDatabaseError &E)
  590. {
  591. throw Exception(String(E.ClassName()) + E.Message);
  592. }
  593. catch(...)
  594. {
  595. throw Exception(FrmLang->lblDbErr->Caption);//"알수없는 오류가 발생하였습니다.");
  596. }
  597. }
  598. //---------------------------------------------------------------------------
  599. /*
  600. * 일별 월 통계 데이터 조회/출력
  601. * arguments
  602. *
  603. * return
  604. * void
  605. */
  606. void __fastcall TIST0010M::SelMonthStatistics(int ADispCols)
  607. {
  608. TSqlCursor sqlCrs;
  609. TADOQuery *pADO = ADOM;
  610. String sQry;
  611. String sQryDt;
  612. sQryDt = DtMon->Date.FormatString("yyyymm");
  613. sQry = "SELECT DECODE(Y.PAGETP, 'W', '웹', 'S', '스마트폰', '') AS PAGETPNAME, \r\n"
  614. " Y.PAGEID, Y.PAGE_NAME, \r\n"
  615. " NVL(X.PAGEID, 0) PAGE, NVL(X.TOT,0) TOT, \r\n"
  616. " NVL(X.C31,0) C31, NVL(X.C01,0) C01, NVL(X.C02,0) C02, \r\n"
  617. " NVL(X.C03,0) C03, NVL(X.C04,0) C04, NVL(X.C05,0) C05, \r\n"
  618. " NVL(X.C06,0) C06, NVL(X.C07,0) C07, NVL(X.C08,0) C08, \r\n"
  619. " NVL(X.C09,0) C09, NVL(X.C10,0) C10, NVL(X.C11,0) C11, \r\n"
  620. " NVL(X.C12,0) C12, NVL(X.C13,0) C13, NVL(X.C14,0) C14, \r\n"
  621. " NVL(X.C15,0) C15, NVL(X.C16,0) C16, NVL(X.C17,0) C17, \r\n"
  622. " NVL(X.C18,0) C18, NVL(X.C19,0) C19, NVL(X.C20,0) C20, \r\n"
  623. " NVL(X.C21,0) C21, NVL(X.C22,0) C22, NVL(X.C23,0) C23, \r\n"
  624. " NVL(X.C24,0) C24, NVL(X.C25,0) C25, NVL(X.C26,0) C26, \r\n"
  625. " NVL(X.C27,0) C27, NVL(X.C28,0) C28, NVL(X.C29,0) C29, \r\n"
  626. " NVL(X.C30,0) C30 \r\n"
  627. " FROM (SELECT CASE WHEN GROUPING(A.PAGEID) = 1 THEN '0' \r\n"
  628. " ELSE A.PAGEID END AS PAGEID, \r\n"
  629. " SUM(A.CONNCNT) AS TOT, \r\n"
  630. " SUM(DECODE(A.STATDAY, '01', A.CONNCNT, 0)) AS C01, \r\n"
  631. " SUM(DECODE(A.STATDAY, '02', A.CONNCNT, 0)) AS C02, \r\n"
  632. " SUM(DECODE(A.STATDAY, '03', A.CONNCNT, 0)) AS C03, \r\n"
  633. " SUM(DECODE(A.STATDAY, '04', A.CONNCNT, 0)) AS C04, \r\n"
  634. " SUM(DECODE(A.STATDAY, '05', A.CONNCNT, 0)) AS C05, \r\n"
  635. " SUM(DECODE(A.STATDAY, '06', A.CONNCNT, 0)) AS C06, \r\n"
  636. " SUM(DECODE(A.STATDAY, '07', A.CONNCNT, 0)) AS C07, \r\n"
  637. " SUM(DECODE(A.STATDAY, '08', A.CONNCNT, 0)) AS C08, \r\n"
  638. " SUM(DECODE(A.STATDAY, '09', A.CONNCNT, 0)) AS C09, \r\n"
  639. " SUM(DECODE(A.STATDAY, '10', A.CONNCNT, 0)) AS C10, \r\n"
  640. " SUM(DECODE(A.STATDAY, '11', A.CONNCNT, 0)) AS C11, \r\n"
  641. " SUM(DECODE(A.STATDAY, '12', A.CONNCNT, 0)) AS C12, \r\n"
  642. " SUM(DECODE(A.STATDAY, '13', A.CONNCNT, 0)) AS C13, \r\n"
  643. " SUM(DECODE(A.STATDAY, '14', A.CONNCNT, 0)) AS C14, \r\n"
  644. " SUM(DECODE(A.STATDAY, '15', A.CONNCNT, 0)) AS C15, \r\n"
  645. " SUM(DECODE(A.STATDAY, '16', A.CONNCNT, 0)) AS C16, \r\n"
  646. " SUM(DECODE(A.STATDAY, '17', A.CONNCNT, 0)) AS C17, \r\n"
  647. " SUM(DECODE(A.STATDAY, '18', A.CONNCNT, 0)) AS C18, \r\n"
  648. " SUM(DECODE(A.STATDAY, '19', A.CONNCNT, 0)) AS C19, \r\n"
  649. " SUM(DECODE(A.STATDAY, '20', A.CONNCNT, 0)) AS C20, \r\n"
  650. " SUM(DECODE(A.STATDAY, '21', A.CONNCNT, 0)) AS C21, \r\n"
  651. " SUM(DECODE(A.STATDAY, '22', A.CONNCNT, 0)) AS C22, \r\n"
  652. " SUM(DECODE(A.STATDAY, '23', A.CONNCNT, 0)) AS C23, \r\n"
  653. " SUM(DECODE(A.STATDAY, '24', A.CONNCNT, 0)) AS C24, \r\n"
  654. " SUM(DECODE(A.STATDAY, '25', A.CONNCNT, 0)) AS C25, \r\n"
  655. " SUM(DECODE(A.STATDAY, '26', A.CONNCNT, 0)) AS C26, \r\n"
  656. " SUM(DECODE(A.STATDAY, '27', A.CONNCNT, 0)) AS C27, \r\n"
  657. " SUM(DECODE(A.STATDAY, '28', A.CONNCNT, 0)) AS C28, \r\n"
  658. " SUM(DECODE(A.STATDAY, '29', A.CONNCNT, 0)) AS C29, \r\n"
  659. " SUM(DECODE(A.STATDAY, '30', A.CONNCNT, 0)) AS C30, \r\n"
  660. " SUM(DECODE(A.STATDAY, '31', A.CONNCNT, 0)) AS C31 \r\n"
  661. " FROM TB_ST_DAY_CONN_WEB A \r\n"
  662. " WHERE A.STATMONTH = :p01 \r\n"
  663. " GROUP BY ROLLUP(A.PAGEID)) X, \r\n"
  664. " (SELECT PAGEID, PAGETP, PAGETP || ':' || PAGENAME AS PAGE_NAME \r\n"
  665. " FROM TB_MS_WEB_PAGE) Y \r\n"
  666. " WHERE Y.PAGEID = X.PAGEID(+) \r\n"
  667. " ORDER BY Y.PAGEID \r\n";
  668. try
  669. {
  670. ITSDb_SQLText(pADO, sQry);
  671. ITSDb_SQLBind(pADO, "p01", sQryDt);
  672. ITSDb_SQLOpen(pADO);
  673. DspMonthStatistics(ADispCols);
  674. }
  675. catch(EDatabaseError &E)
  676. {
  677. ::PostMessage(Application->MainForm->Handle, (UINT)(WM_USER+0xF4), (WPARAM)0xB2, (LPARAM)0xB2);
  678. DBERRORMSG(Caption, String(E.ClassName()), E.Message, sQry);
  679. throw Exception(String(E.ClassName()) + E.Message);
  680. }
  681. catch(Exception &exception)
  682. {
  683. ::PostMessage(Application->MainForm->Handle, (UINT)(WM_USER+0xF4), (WPARAM)0xB2, (LPARAM)0xB2);
  684. DBERRORMSG(Caption, String(exception.ClassName()), exception.Message, sQry);
  685. throw Exception(String(exception.ClassName()) + exception.Message);
  686. }
  687. }
  688. //---------------------------------------------------------------------------
  689. void __fastcall TIST0010M::DspMonthStatistics(int ADispCols)
  690. {
  691. TSqlCursor sqlCrs;
  692. TADOQuery *pADO = ADOM;
  693. TcxGridTableView *TvList = (TcxGridTableView*)TvMon;
  694. TcxDataController *pGDC = TvList->DataController;
  695. TcxGridChartView *TvChart = FRAMEChart2->TvChart;
  696. FRAMEChart2->FTitle = LblQryDay->Caption;
  697. try
  698. {
  699. TcxGridChartSeries *pChart = NULL;
  700. TvChart->ClearSeries();
  701. FRAMEChart2->ChartValueDisplay(FRAMEChart2->ChkDisplayVal->Checked);
  702. CMM_ClearGridTableView(TvList);
  703. int nRow = 0;
  704. int nDataCnt = 0;
  705. try
  706. {
  707. TvList->BeginUpdate();
  708. TvChart->BeginUpdate();
  709. nDataCnt = pADO->RecordCount;
  710. TvChart->DataController->RecordCount = ADispCols+1;
  711. pGDC->RecordCount = nDataCnt;
  712. int ii;
  713. String sCol, sChart;
  714. TvChart->Categories->Values[0] = FrmLang->lblChartSoge->Caption;//"소계";
  715. for (ii = 0; ii < ADispCols; ii++)
  716. {
  717. sChart.printf(L"%02d", ii+1);
  718. TvChart->Categories->Values[ii+1] = sChart;
  719. }
  720. for( ; !pADO->Eof; pADO->Next(), nRow++)
  721. {
  722. String sId = pADO->FieldByName("PAGEID")->AsString;
  723. String sNm = pADO->FieldByName("PAGE_NAME")->AsString;
  724. pGDC->Values[nRow][ColMonNo->Index] = sId;
  725. pGDC->Values[nRow][ColMonNm->Index] = sNm;
  726. pChart = TvChart->CreateSeries();
  727. pChart->DataBinding->ValueType = "Integer";
  728. pChart->DisplayText = sNm;
  729. pGDC->Values[nRow][ColMonTt->Index] = pADO->FieldByName("TOT")->AsInteger;
  730. pChart->Values[0] = pGDC->Values[nRow][ColMonTt->Index];
  731. for (int ii = 0; ii < ADispCols; ii++)
  732. {
  733. sCol.printf(L"C%02d", ii+1);
  734. pGDC->Values[nRow][ColMon01->Index+ii] = pADO->FieldByName(sCol)->AsInteger;
  735. pChart->Values[ii+1] = pGDC->Values[nRow][ColMon01->Index+ii];
  736. }
  737. }
  738. }
  739. __finally
  740. {
  741. if (pADO)
  742. {
  743. pADO->Close();
  744. }
  745. TvChart->EndUpdate();
  746. TvList->EndUpdate();
  747. }
  748. }
  749. catch(EDatabaseError &E)
  750. {
  751. throw Exception(String(E.ClassName()) + E.Message);
  752. }
  753. catch(...)
  754. {
  755. throw Exception(FrmLang->lblDbErr->Caption);//"알수없는 오류가 발생하였습니다.");
  756. }
  757. }
  758. //---------------------------------------------------------------------------
  759. /*
  760. * 월별 년 통계 데이터 조회/출력
  761. * arguments
  762. *
  763. * return
  764. * void
  765. */
  766. void __fastcall TIST0010M::SelYearStatistics(int ADispCols)
  767. {
  768. TSqlCursor sqlCrs;
  769. TADOQuery *pADO = ADOY;
  770. String sQry;
  771. String sQryDt;
  772. sQryDt = DtYear->Date.FormatString("yyyy");
  773. sQry = "SELECT DECODE(Y.PAGETP, 'W', '웹', 'S', '스마트폰', '') AS PAGETPNAME, \r\n"
  774. " Y.PAGEID, Y.PAGE_NAME, \r\n"
  775. " NVL(X.PAGEID, 0) PAGE, NVL(X.TOT,0) TOT, \r\n"
  776. " NVL(X.C12,0) C12, NVL(X.C01,0) C01, NVL(X.C02,0) C02, \r\n"
  777. " NVL(X.C03,0) C03, NVL(X.C04,0) C04, NVL(X.C05,0) C05, \r\n"
  778. " NVL(X.C06,0) C06, NVL(X.C07,0) C07, NVL(X.C08,0) C08, \r\n"
  779. " NVL(X.C09,0) C09, NVL(X.C10,0) C10, NVL(X.C11,0) C11 \r\n"
  780. " FROM (SELECT CASE WHEN GROUPING(A.PAGEID) = 1 THEN '0' \r\n"
  781. " ELSE A.PAGEID END AS PAGEID, \r\n"
  782. " SUM(A.CONNCNT) AS TOT, \r\n"
  783. " SUM(DECODE(A.STATMON, '01', A.CONNCNT, 0)) AS C01, \r\n"
  784. " SUM(DECODE(A.STATMON, '02', A.CONNCNT, 0)) AS C02, \r\n"
  785. " SUM(DECODE(A.STATMON, '03', A.CONNCNT, 0)) AS C03, \r\n"
  786. " SUM(DECODE(A.STATMON, '04', A.CONNCNT, 0)) AS C04, \r\n"
  787. " SUM(DECODE(A.STATMON, '05', A.CONNCNT, 0)) AS C05, \r\n"
  788. " SUM(DECODE(A.STATMON, '06', A.CONNCNT, 0)) AS C06, \r\n"
  789. " SUM(DECODE(A.STATMON, '07', A.CONNCNT, 0)) AS C07, \r\n"
  790. " SUM(DECODE(A.STATMON, '08', A.CONNCNT, 0)) AS C08, \r\n"
  791. " SUM(DECODE(A.STATMON, '09', A.CONNCNT, 0)) AS C09, \r\n"
  792. " SUM(DECODE(A.STATMON, '10', A.CONNCNT, 0)) AS C10, \r\n"
  793. " SUM(DECODE(A.STATMON, '11', A.CONNCNT, 0)) AS C11, \r\n"
  794. " SUM(DECODE(A.STATMON, '12', A.CONNCNT, 0)) AS C12 \r\n"
  795. " FROM TB_ST_MON_CONN_WEB A \r\n"
  796. " WHERE A.STATYEAR = :p01 \r\n"
  797. " GROUP BY ROLLUP(A.PAGEID)) X, \r\n"
  798. " (SELECT PAGEID, PAGETP, PAGETP || ':' || PAGENAME AS PAGE_NAME \r\n"
  799. " FROM TB_MS_WEB_PAGE) Y \r\n"
  800. " WHERE Y.PAGEID = X.PAGEID(+) \r\n"
  801. " ORDER BY Y.PAGEID \r\n";
  802. try
  803. {
  804. ITSDb_SQLText(pADO, sQry);
  805. ITSDb_SQLBind(pADO, "p01", sQryDt);
  806. ITSDb_SQLOpen(pADO);
  807. DspYearStatistics(ADispCols);
  808. }
  809. catch(EDatabaseError &E)
  810. {
  811. ::PostMessage(Application->MainForm->Handle, (UINT)(WM_USER+0xF4), (WPARAM)0xB2, (LPARAM)0xB2);
  812. DBERRORMSG(Caption, String(E.ClassName()), E.Message, sQry);
  813. throw Exception(String(E.ClassName()) + E.Message);
  814. }
  815. catch(Exception &exception)
  816. {
  817. ::PostMessage(Application->MainForm->Handle, (UINT)(WM_USER+0xF4), (WPARAM)0xB2, (LPARAM)0xB2);
  818. DBERRORMSG(Caption, String(exception.ClassName()), exception.Message, sQry);
  819. throw Exception(String(exception.ClassName()) + exception.Message);
  820. }
  821. }
  822. //---------------------------------------------------------------------------
  823. void __fastcall TIST0010M::DspYearStatistics(int ADispCols)
  824. {
  825. TSqlCursor sqlCrs;
  826. TADOQuery *pADO = ADOY;
  827. TcxGridTableView *TvList = (TcxGridTableView*)TvYear;
  828. TcxDataController *pGDC = TvList->DataController;
  829. TcxGridChartView *TvChart = FRAMEChart3->TvChart;
  830. FRAMEChart3->FTitle = LblQryYear->Caption;
  831. try
  832. {
  833. TcxGridChartSeries *pChart = NULL;
  834. TvChart->ClearSeries();
  835. FRAMEChart3->ChartValueDisplay(FRAMEChart3->ChkDisplayVal->Checked);
  836. CMM_ClearGridTableView(TvList);
  837. int nRow = 0;
  838. int nDataCnt = 0;
  839. try
  840. {
  841. TvList->BeginUpdate();
  842. TvChart->BeginUpdate();
  843. nDataCnt = pADO->RecordCount;
  844. TvChart->DataController->RecordCount = ADispCols+1;
  845. pGDC->RecordCount = nDataCnt;
  846. int ii;
  847. String sCol, sChart;
  848. TvChart->Categories->Values[0] = FrmLang->lblChartSoge->Caption;//"소계";
  849. for (ii = 0; ii < ADispCols; ii++)
  850. {
  851. sChart.printf(L"%02d", ii+1);
  852. TvChart->Categories->Values[ii+1] = sChart;
  853. }
  854. for( ; !pADO->Eof; pADO->Next(), nRow++)
  855. {
  856. String sId = pADO->FieldByName("PAGEID")->AsString;
  857. String sNm = pADO->FieldByName("PAGE_NAME")->AsString;
  858. pGDC->Values[nRow][ColYearNo->Index] = sId;
  859. pGDC->Values[nRow][ColYearNm->Index] = sNm;
  860. pChart = TvChart->CreateSeries();
  861. pChart->DataBinding->ValueType = "Integer";
  862. pChart->DisplayText = sNm;
  863. pGDC->Values[nRow][ColYearTt->Index] = pADO->FieldByName("TOT")->AsInteger;
  864. pChart->Values[0] = pGDC->Values[nRow][ColYearTt->Index];
  865. for (int ii = 0; ii < ADispCols; ii++)
  866. {
  867. sCol.printf(L"C%02d", ii+1);
  868. pGDC->Values[nRow][ColYear01->Index+ii] = pADO->FieldByName(sCol)->AsInteger;
  869. pChart->Values[ii+1] = pGDC->Values[nRow][ColYear01->Index+ii];
  870. }
  871. }
  872. }
  873. __finally
  874. {
  875. if (pADO)
  876. {
  877. pADO->Close();
  878. }
  879. TvChart->EndUpdate();
  880. TvList->EndUpdate();
  881. }
  882. }
  883. catch(EDatabaseError &E)
  884. {
  885. throw Exception(String(E.ClassName()) + E.Message);
  886. }
  887. catch(...)
  888. {
  889. throw Exception(FrmLang->lblDbErr->Caption);//"알수없는 오류가 발생하였습니다.");
  890. }
  891. }
  892. //---------------------------------------------------------------------------
  893. /*
  894. * 월별 년 통계 데이터 조회/출력
  895. * arguments
  896. *
  897. * return
  898. * void
  899. */
  900. void __fastcall TIST0010M::SelTermYearStatistics(int ADispCols)
  901. {
  902. TSqlCursor sqlCrs;
  903. TADOQuery *pADO = ADOT;
  904. String sQry;
  905. String sCap, sTemp, sTemp2;
  906. String sStYear, sEdYear;
  907. sTemp = "";
  908. sTemp2= "";
  909. int ii;
  910. int nStYear = DtStYear->DateTime.FormatString("yyyy").ToInt();
  911. int nEdYear = DtEdYear->DateTime.FormatString("yyyy").ToInt();
  912. int nYears = nEdYear - nStYear;
  913. nYears++;
  914. sStYear = DtStYear->Date.FormatString("yyyy");
  915. sEdYear = DtEdYear->Date.FormatString("yyyy");
  916. TcxGridBand *pBand;
  917. try
  918. {
  919. TvTermYear->BeginUpdate();
  920. pBand = TvTermYear->Bands->Items[1];
  921. pBand->Visible = false;
  922. int nCols = pBand->ColumnCount;
  923. try
  924. {
  925. for (ii = 0; ii < nCols; ii++)
  926. {
  927. pBand->Columns[ii]->Visible = false;
  928. }
  929. for (ii = 0; ii < nYears && ii < 24; ii++)
  930. {
  931. TcxGridBandedColumn *pCol = TvTermYear->Columns[ColTYear00->Index+ii];
  932. sCap.printf(L"%04d", ii+nStYear);
  933. pCol->Caption = sCap;
  934. pCol->Width = 70;
  935. pCol->Visible = true;
  936. if (ii != 0)
  937. {
  938. sTemp += ", \r\n";
  939. sTemp2 += ", \r\n";
  940. }
  941. sCap.printf(L" NVL(X.C%02d,0) C%02d", ii, ii);
  942. sTemp += sCap;
  943. sCap.printf(L" SUM(DECODE(A.STATYEAR, '%04d', A.CONNCNT, 0)) AS C%02d", ii + nStYear, ii);
  944. sTemp2 += sCap;
  945. }
  946. sTemp += "\r\n";
  947. sTemp2 += "\r\n";
  948. }
  949. catch(...)
  950. {
  951. }
  952. }
  953. __finally
  954. {
  955. pBand->Width = nYears*70;
  956. pBand->Visible = true;
  957. TvTermYear->EndUpdate();
  958. }
  959. sQry = "SELECT DECODE(Y.PAGETP, 'W', '웹', 'S', '스마트폰', '') AS PAGETPNAME, \r\n"
  960. " Y.PAGEID, Y.PAGE_NAME, \r\n"
  961. " NVL(X.PAGEID, 0) PAGE, NVL(X.TOT,0) TOT, \r\n"
  962. + sTemp +
  963. // " NVL(X.C00,0) C00, \r\n"
  964. // " NVL(X.C01,0) C01, \r\n"
  965. // " NVL(X.C02,0) C02 \r\n"
  966. " FROM (SELECT CASE WHEN GROUPING(A.PAGEID) = 1 THEN '0' \r\n"
  967. " ELSE A.PAGEID END AS PAGEID, \r\n"
  968. " SUM(A.CONNCNT) AS TOT, \r\n"
  969. + sTemp2 +
  970. // " SUM(DECODE(A.STATYEAR, '2010', A.CONNCNT, 0)) AS C00, \r\n"
  971. // " SUM(DECODE(A.STATYEAR, '2011', A.CONNCNT, 0)) AS C01, \r\n"
  972. // " SUM(DECODE(A.STATYEAR, '2012', A.CONNCNT, 0)) AS C02 \r\n"
  973. " FROM TB_ST_MON_CONN_WEB A \r\n"
  974. " WHERE A.STATYEAR BETWEEN :p01 AND :p02 \r\n"
  975. " GROUP BY ROLLUP(A.PAGEID)) X, \r\n"
  976. " (SELECT PAGEID, PAGETP, PAGETP || ':' || PAGENAME AS PAGE_NAME \r\n"
  977. " FROM TB_MS_WEB_PAGE) Y \r\n"
  978. " WHERE Y.PAGEID = X.PAGEID(+) \r\n"
  979. " ORDER BY Y.PAGEID \r\n";
  980. try
  981. {
  982. ITSDb_SQLText(pADO, sQry);
  983. ITSDb_SQLBind(pADO, "p01", sStYear);
  984. ITSDb_SQLBind(pADO, "p02", sEdYear);
  985. ITSDb_SQLOpen(pADO);
  986. DspTermYearStatistics(ADispCols, nStYear);
  987. }
  988. catch(EDatabaseError &E)
  989. {
  990. ::PostMessage(Application->MainForm->Handle, (UINT)(WM_USER+0xF4), (WPARAM)0xB2, (LPARAM)0xB2);
  991. DBERRORMSG(Caption, String(E.ClassName()), E.Message, sQry);
  992. throw Exception(String(E.ClassName()) + E.Message);
  993. }
  994. catch(Exception &exception)
  995. {
  996. ::PostMessage(Application->MainForm->Handle, (UINT)(WM_USER+0xF4), (WPARAM)0xB2, (LPARAM)0xB2);
  997. DBERRORMSG(Caption, String(exception.ClassName()), exception.Message, sQry);
  998. throw Exception(String(exception.ClassName()) + exception.Message);
  999. }
  1000. }
  1001. //---------------------------------------------------------------------------
  1002. void __fastcall TIST0010M::DspTermYearStatistics(int ADispCols, int AStYear)
  1003. {
  1004. TSqlCursor sqlCrs;
  1005. TADOQuery *pADO = ADOT;
  1006. TcxGridTableView *TvList = (TcxGridTableView*)TvTermYear;
  1007. TcxDataController *pGDC = TvList->DataController;
  1008. TcxGridChartView *TvChart = FRAMEChart4->TvChart;
  1009. FRAMEChart4->FTitle = LblQryTermYear->Caption;
  1010. try
  1011. {
  1012. TcxGridChartSeries *pChart = NULL;
  1013. TvChart->ClearSeries();
  1014. FRAMEChart4->ChartValueDisplay(FRAMEChart4->ChkDisplayVal->Checked);
  1015. CMM_ClearGridTableView(TvList);
  1016. int nRow = 0;
  1017. int nDataCnt = 0;
  1018. try
  1019. {
  1020. TvList->BeginUpdate();
  1021. TvChart->BeginUpdate();
  1022. nDataCnt = pADO->RecordCount;
  1023. TvChart->DataController->RecordCount = ADispCols+1;
  1024. pGDC->RecordCount = nDataCnt;
  1025. int ii;
  1026. String sCol, sChart;
  1027. TvChart->Categories->Values[0] = FrmLang->lblChartSoge->Caption;//"소계";
  1028. for (ii = 0; ii < ADispCols; ii++)
  1029. {
  1030. sChart.printf(L"%02d", AStYear + ii);
  1031. TvChart->Categories->Values[ii+1] = sChart;
  1032. }
  1033. for( ; !pADO->Eof; pADO->Next(), nRow++)
  1034. {
  1035. String sId = pADO->FieldByName("PAGEID")->AsString;
  1036. String sNm = pADO->FieldByName("PAGE_NAME")->AsString;
  1037. pGDC->Values[nRow][ColTYearNo->Index] = sId;
  1038. pGDC->Values[nRow][ColTYearNm->Index] = sNm;
  1039. pChart = TvChart->CreateSeries();
  1040. pChart->DataBinding->ValueType = "Integer";
  1041. pChart->DisplayText = sNm;
  1042. pGDC->Values[nRow][ColTYearTt->Index] = pADO->FieldByName("TOT")->AsInteger;
  1043. pChart->Values[0] = pGDC->Values[nRow][ColTYearTt->Index];
  1044. for (int ii = 0; ii < ADispCols; ii++)
  1045. {
  1046. sCol.printf(L"C%02d", ii);
  1047. pGDC->Values[nRow][ColTYear00->Index+ii] = pADO->FieldByName(sCol)->AsInteger;
  1048. pChart->Values[ii+1] = pGDC->Values[nRow][ColTYear00->Index+ii];
  1049. }
  1050. }
  1051. }
  1052. __finally
  1053. {
  1054. if (pADO)
  1055. {
  1056. pADO->Close();
  1057. }
  1058. TvChart->EndUpdate();
  1059. TvList->EndUpdate();
  1060. }
  1061. }
  1062. catch(EDatabaseError &E)
  1063. {
  1064. throw Exception(String(E.ClassName()) + E.Message);
  1065. }
  1066. catch(...)
  1067. {
  1068. throw Exception(FrmLang->lblDbErr->Caption);//"알수없는 오류가 발생하였습니다.");
  1069. }
  1070. }
  1071. //---------------------------------------------------------------------------
  1072. /*
  1073. * Summary Footer style set
  1074. * arguments
  1075. *
  1076. * return
  1077. * void
  1078. */
  1079. void __fastcall TIST0010M::TvListDataControllerSummaryFooterSummaryItemsSummary(TcxDataSummaryItems *ASender, TcxSummaryEventArguments &Arguments,
  1080. TcxSummaryEventOutArguments &OutArguments)
  1081. {
  1082. CMM_SetSummaryItemKind(Arguments, OutArguments, 2, false, false);
  1083. }
  1084. //---------------------------------------------------------------------------
  1085. /*
  1086. * Summary Footer style set
  1087. * arguments
  1088. *
  1089. * return
  1090. * void
  1091. */
  1092. void __fastcall TIST0010M::TvListDataControllerSummaryDefaultGroupSummaryItemsSummary(TcxDataSummaryItems *ASender, TcxSummaryEventArguments &Arguments,
  1093. TcxSummaryEventOutArguments &OutArguments)
  1094. {
  1095. CMM_SetSummaryItemKind(Arguments, OutArguments, 1, false, false);
  1096. }
  1097. //---------------------------------------------------------------------------
  1098. /*
  1099. * Close 버튼 클릭 이벤트 핸들러
  1100. * arguments
  1101. * Sender : event handler 객체
  1102. * return
  1103. * void
  1104. */
  1105. void __fastcall TIST0010M::BtnCloseClick(TObject *Sender)
  1106. {
  1107. Close();
  1108. }
  1109. //---------------------------------------------------------------------------
  1110. void __fastcall TIST0010M::FormClose(TObject *Sender, TCloseAction &Action)
  1111. {
  1112. CommClose();
  1113. IST0010M = NULL;
  1114. Action = caFree;
  1115. }
  1116. //---------------------------------------------------------------------------