IST0010MF.cpp 45 KB

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