IST0020MF.cpp 45 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185
  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 "IST0020MF.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. TIST0020M *IST0020M = NULL;
  45. //---------------------------------------------------------------------------
  46. __fastcall TIST0020M::TIST0020M(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;//"CCTV접속 통계";
  53. }
  54. //---------------------------------------------------------------------------
  55. void __fastcall TIST0020M::FormCreate(TObject *Sender)
  56. {
  57. PgList->HideTabs = true;
  58. }
  59. //---------------------------------------------------------------------------
  60. void __fastcall TIST0020M::FormShow(TObject *Sender)
  61. {
  62. PgList->ActivePageIndex = 0;
  63. PgQuery->ActivePageIndex= 0;
  64. FormInit();
  65. }
  66. //---------------------------------------------------------------------------
  67. void __fastcall TIST0020M::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 TIST0020M::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 TIST0020M::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 TIST0020M::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 TIST0020M::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 TIST0020M::BtnSearchClick(TObject *Sender)
  206. {
  207. Application->ProcessMessages();
  208. TSqlCursor sqlCrs((TControl*)BtnSearch);
  209. Application->ProcessMessages();
  210. RefreshData();
  211. }
  212. //---------------------------------------------------------------------------
  213. void __fastcall TIST0020M::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 TIST0020M::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. /*
  379. * 시간대별 일 통계 데이터 조회/출력
  380. * arguments
  381. *
  382. * return
  383. * void
  384. */
  385. void __fastcall TIST0020M::SelDayStatistics(int ADispCols)
  386. {
  387. TSqlCursor sqlCrs;
  388. TADOQuery *pADO = ADOD;
  389. String sQry;
  390. String sParamDay;
  391. sParamDay = DtDay->Date.FormatString("yyyymmdd");
  392. sQry = "SELECT Y.CCTVID AS POINT_NUM, Y.CCTV_ID, Y.NAME_KO, \r\n"
  393. " NVL(X.CCTVID,0) CCTVID, NVL(X.TOT,0) TOT, \r\n"
  394. " NVL(X.C00,0) C00, NVL(X.C01,0) C01, NVL(X.C02,0) C02, \r\n"
  395. " NVL(X.C03,0) C03, NVL(X.C04,0) C04, NVL(X.C05,0) C05, \r\n"
  396. " NVL(X.C06,0) C06, NVL(X.C07,0) C07, NVL(X.C08,0) C08, \r\n"
  397. " NVL(X.C09,0) C09, NVL(X.C10,0) C10, NVL(X.C11,0) C11, \r\n"
  398. " NVL(X.C12,0) C12, NVL(X.C13,0) C13, NVL(X.C14,0) C14, \r\n"
  399. " NVL(X.C15,0) C15, NVL(X.C16,0) C16, NVL(X.C17,0) C17, \r\n"
  400. " NVL(X.C18,0) C18, NVL(X.C19,0) C19, NVL(X.C20,0) C20, \r\n"
  401. " NVL(X.C21,0) C21, NVL(X.C22,0) C22, NVL(X.C23,0) C23 \r\n"
  402. " FROM (SELECT CASE WHEN GROUPING(TO_CHAR(A.CCTVID)) = 1 THEN '0' \r\n"
  403. " ELSE TO_CHAR(A.CCTVID) END AS CCTVID, \r\n"
  404. " SUM(A.CONNCNT) AS TOT, \r\n"
  405. " SUM(DECODE(A.STATHOUR, '00', A.CONNCNT, 0)) AS C00, \r\n"
  406. " SUM(DECODE(A.STATHOUR, '01', A.CONNCNT, 0)) AS C01, \r\n"
  407. " SUM(DECODE(A.STATHOUR, '02', A.CONNCNT, 0)) AS C02, \r\n"
  408. " SUM(DECODE(A.STATHOUR, '03', A.CONNCNT, 0)) AS C03, \r\n"
  409. " SUM(DECODE(A.STATHOUR, '04', A.CONNCNT, 0)) AS C04, \r\n"
  410. " SUM(DECODE(A.STATHOUR, '05', A.CONNCNT, 0)) AS C05, \r\n"
  411. " SUM(DECODE(A.STATHOUR, '06', A.CONNCNT, 0)) AS C06, \r\n"
  412. " SUM(DECODE(A.STATHOUR, '07', A.CONNCNT, 0)) AS C07, \r\n"
  413. " SUM(DECODE(A.STATHOUR, '08', A.CONNCNT, 0)) AS C08, \r\n"
  414. " SUM(DECODE(A.STATHOUR, '09', A.CONNCNT, 0)) AS C09, \r\n"
  415. " SUM(DECODE(A.STATHOUR, '10', A.CONNCNT, 0)) AS C10, \r\n"
  416. " SUM(DECODE(A.STATHOUR, '11', A.CONNCNT, 0)) AS C11, \r\n"
  417. " SUM(DECODE(A.STATHOUR, '12', A.CONNCNT, 0)) AS C12, \r\n"
  418. " SUM(DECODE(A.STATHOUR, '13', A.CONNCNT, 0)) AS C13, \r\n"
  419. " SUM(DECODE(A.STATHOUR, '14', A.CONNCNT, 0)) AS C14, \r\n"
  420. " SUM(DECODE(A.STATHOUR, '15', A.CONNCNT, 0)) AS C15, \r\n"
  421. " SUM(DECODE(A.STATHOUR, '16', A.CONNCNT, 0)) AS C16, \r\n"
  422. " SUM(DECODE(A.STATHOUR, '17', A.CONNCNT, 0)) AS C17, \r\n"
  423. " SUM(DECODE(A.STATHOUR, '18', A.CONNCNT, 0)) AS C18, \r\n"
  424. " SUM(DECODE(A.STATHOUR, '19', A.CONNCNT, 0)) AS C19, \r\n"
  425. " SUM(DECODE(A.STATHOUR, '20', A.CONNCNT, 0)) AS C20, \r\n"
  426. " SUM(DECODE(A.STATHOUR, '21', A.CONNCNT, 0)) AS C21, \r\n"
  427. " SUM(DECODE(A.STATHOUR, '22', A.CONNCNT, 0)) AS C22, \r\n"
  428. " SUM(DECODE(A.STATHOUR, '23', A.CONNCNT, 0)) AS C23 \r\n"
  429. " FROM TB_ST_HOUR_CONN_CCTV A \r\n"
  430. " WHERE A.STATDATE = :p01 \r\n"
  431. " GROUP BY ROLLUP(TO_CHAR(A.CCTVID))) X, \r\n"
  432. " (SELECT TO_CHAR(B.CCTV_CTLR_NMBR) AS CCTVID, \r\n"
  433. " B.CCTV_CTLR_ID AS CCTV_ID, \r\n"
  434. " B.ISTL_LCTN_NM AS NAME_KO \r\n"
  435. " FROM TB_CCTV_CTLR B \r\n"
  436. " WHERE SUBSTR(B.CCTV_CTLR_ID, 1, 3) = :p02) Y \r\n"
  437. " WHERE Y.CCTVID = X.CCTVID(+) \r\n"
  438. " ORDER BY Y.NAME_KO \r\n";
  439. try
  440. {
  441. ITSDb_SQLText(pADO, sQry);
  442. ITSDb_SQLBind(pADO, "p01", sParamDay);
  443. ITSDb_SQLBind(pADO, "p02", CenterId);
  444. ITSDb_SQLOpen(pADO);
  445. DspDayStatistics(ADispCols);
  446. }
  447. catch(EDatabaseError &E)
  448. {
  449. ::PostMessage(Application->MainForm->Handle, (UINT)(WM_USER+0xF4), (WPARAM)0xB2, (LPARAM)0xB2);
  450. DBERRORMSG(Caption, String(E.ClassName()), E.Message, sQry);
  451. throw Exception(String(E.ClassName()) + E.Message);
  452. }
  453. catch(Exception &e)
  454. {
  455. ::PostMessage(Application->MainForm->Handle, (UINT)(WM_USER+0xF4), (WPARAM)0xB2, (LPARAM)0xB2);
  456. DBERRORMSG(Caption, String(e.ClassName()), e.Message, sQry);
  457. throw Exception(String(e.ClassName()) + e.Message);
  458. }
  459. }
  460. //---------------------------------------------------------------------------
  461. void __fastcall TIST0020M::DspDayStatistics(int ADispCols)
  462. {
  463. TSqlCursor sqlCrs;
  464. TADOQuery *pADO = ADOD;
  465. TcxGridTableView *TvList = (TcxGridTableView*)TvDay;
  466. TcxDataController *pGDC = TvList->DataController;
  467. TcxGridChartView *TvChart = FRAMEChart1->TvChart;
  468. FRAMEChart1->FTitle = LblQryTm->Caption;
  469. try
  470. {
  471. TcxGridChartSeries *pChart = NULL;
  472. TvChart->ClearSeries();
  473. FRAMEChart1->ChartValueDisplay(FRAMEChart1->ChkDisplayVal->Checked);
  474. CMM_ClearGridTableView(TvList);
  475. int nRow = 0;
  476. int nDataCnt = 0;
  477. try
  478. {
  479. TvList->BeginUpdate();
  480. TvChart->BeginUpdate();
  481. nDataCnt = pADO->RecordCount;
  482. TvChart->DataController->RecordCount = ADispCols+1;
  483. pGDC->RecordCount = nDataCnt;
  484. int ii;
  485. String sCol, sChart;
  486. TvChart->Categories->Values[0] = FrmLang->lblChartSoge->Caption;//"소계";
  487. for (ii = 0; ii < ADispCols; ii++)
  488. {
  489. sChart.printf(L"%02d", ii);
  490. TvChart->Categories->Values[ii+1] = sChart;
  491. }
  492. for( ; !pADO->Eof; pADO->Next(), nRow++)
  493. {
  494. String sId = pADO->FieldByName("CCTV_ID")->AsString;
  495. String sNm = pADO->FieldByName("NAME_KO")->AsString;
  496. pGDC->Values[nRow][ColDayNo->Index] = sId;
  497. pGDC->Values[nRow][ColDayNm->Index] = sNm;
  498. pChart = TvChart->CreateSeries();
  499. pChart->DataBinding->ValueType = "Integer";
  500. pChart->DisplayText = sNm;
  501. pGDC->Values[nRow][ColDayTt->Index] = pADO->FieldByName("TOT")->AsInteger;
  502. pChart->Values[0] = pGDC->Values[nRow][ColDayTt->Index];
  503. for (int ii = 0; ii < ADispCols; ii++)
  504. {
  505. sCol.printf(L"C%02d", ii);
  506. pGDC->Values[nRow][ColDay00->Index+ii] = pADO->FieldByName(sCol)->AsInteger;
  507. pChart->Values[ii+1] = pGDC->Values[nRow][ColDay00->Index+ii];
  508. }
  509. }
  510. }
  511. __finally
  512. {
  513. if (pADO)
  514. {
  515. pADO->Close();
  516. }
  517. TvChart->EndUpdate();
  518. TvList->EndUpdate();
  519. }
  520. }
  521. catch(EDatabaseError &E)
  522. {
  523. ::PostMessage(Application->MainForm->Handle, (UINT)(WM_USER+0xF4), (WPARAM)0xB2, (LPARAM)0xB2);
  524. DBERRORMSG(Caption, String(E.ClassName()), E.Message, pADO->SQL->Text);
  525. throw Exception(String(E.ClassName()) + E.Message);
  526. }
  527. catch(Exception &e)
  528. {
  529. ::PostMessage(Application->MainForm->Handle, (UINT)(WM_USER+0xF4), (WPARAM)0xB2, (LPARAM)0xB2);
  530. DBERRORMSG(Caption, String(e.ClassName()), e.Message, pADO->SQL->Text);
  531. throw Exception(String(e.ClassName()) + e.Message);
  532. }
  533. }
  534. //---------------------------------------------------------------------------
  535. /*
  536. * 일별 월 통계 데이터 조회/출력
  537. * arguments
  538. *
  539. * return
  540. * void
  541. */
  542. void __fastcall TIST0020M::SelMonthStatistics(int ADispCols)
  543. {
  544. TSqlCursor sqlCrs;
  545. TADOQuery *pADO = ADOM;
  546. String sQry;
  547. String sQryDt;
  548. sQryDt = DtMon->Date.FormatString("yyyymm");
  549. sQry = "SELECT Y.CCTVID AS POINT_NUM, Y.CCTV_ID, Y.NAME_KO, \r\n"
  550. " NVL(X.CCTVID,0) CCTVID, NVL(X.TOT,0) TOT, \r\n"
  551. " NVL(X.C31,0) C31, NVL(X.C01,0) C01, NVL(X.C02,0) C02, \r\n"
  552. " NVL(X.C03,0) C03, NVL(X.C04,0) C04, NVL(X.C05,0) C05, \r\n"
  553. " NVL(X.C06,0) C06, NVL(X.C07,0) C07, NVL(X.C08,0) C08, \r\n"
  554. " NVL(X.C09,0) C09, NVL(X.C10,0) C10, NVL(X.C11,0) C11, \r\n"
  555. " NVL(X.C12,0) C12, NVL(X.C13,0) C13, NVL(X.C14,0) C14, \r\n"
  556. " NVL(X.C15,0) C15, NVL(X.C16,0) C16, NVL(X.C17,0) C17, \r\n"
  557. " NVL(X.C18,0) C18, NVL(X.C19,0) C19, NVL(X.C20,0) C20, \r\n"
  558. " NVL(X.C21,0) C21, NVL(X.C22,0) C22, NVL(X.C23,0) C23, \r\n"
  559. " NVL(X.C24,0) C24, NVL(X.C25,0) C25, NVL(X.C26,0) C26, \r\n"
  560. " NVL(X.C27,0) C27, NVL(X.C28,0) C28, NVL(X.C29,0) C29, \r\n"
  561. " NVL(X.C30,0) C30 \r\n"
  562. " FROM (SELECT CASE WHEN GROUPING(TO_CHAR(A.CCTVID)) = 1 THEN '0' \r\n"
  563. " ELSE TO_CHAR(A.CCTVID) END AS CCTVID, \r\n"
  564. " SUM(A.CONNCNT) AS TOT, \r\n"
  565. " SUM(DECODE(A.STATDAY, '01', A.CONNCNT, 0)) AS C01, \r\n"
  566. " SUM(DECODE(A.STATDAY, '02', A.CONNCNT, 0)) AS C02, \r\n"
  567. " SUM(DECODE(A.STATDAY, '03', A.CONNCNT, 0)) AS C03, \r\n"
  568. " SUM(DECODE(A.STATDAY, '04', A.CONNCNT, 0)) AS C04, \r\n"
  569. " SUM(DECODE(A.STATDAY, '05', A.CONNCNT, 0)) AS C05, \r\n"
  570. " SUM(DECODE(A.STATDAY, '06', A.CONNCNT, 0)) AS C06, \r\n"
  571. " SUM(DECODE(A.STATDAY, '07', A.CONNCNT, 0)) AS C07, \r\n"
  572. " SUM(DECODE(A.STATDAY, '08', A.CONNCNT, 0)) AS C08, \r\n"
  573. " SUM(DECODE(A.STATDAY, '09', A.CONNCNT, 0)) AS C09, \r\n"
  574. " SUM(DECODE(A.STATDAY, '10', A.CONNCNT, 0)) AS C10, \r\n"
  575. " SUM(DECODE(A.STATDAY, '11', A.CONNCNT, 0)) AS C11, \r\n"
  576. " SUM(DECODE(A.STATDAY, '12', A.CONNCNT, 0)) AS C12, \r\n"
  577. " SUM(DECODE(A.STATDAY, '13', A.CONNCNT, 0)) AS C13, \r\n"
  578. " SUM(DECODE(A.STATDAY, '14', A.CONNCNT, 0)) AS C14, \r\n"
  579. " SUM(DECODE(A.STATDAY, '15', A.CONNCNT, 0)) AS C15, \r\n"
  580. " SUM(DECODE(A.STATDAY, '16', A.CONNCNT, 0)) AS C16, \r\n"
  581. " SUM(DECODE(A.STATDAY, '17', A.CONNCNT, 0)) AS C17, \r\n"
  582. " SUM(DECODE(A.STATDAY, '18', A.CONNCNT, 0)) AS C18, \r\n"
  583. " SUM(DECODE(A.STATDAY, '19', A.CONNCNT, 0)) AS C19, \r\n"
  584. " SUM(DECODE(A.STATDAY, '20', A.CONNCNT, 0)) AS C20, \r\n"
  585. " SUM(DECODE(A.STATDAY, '21', A.CONNCNT, 0)) AS C21, \r\n"
  586. " SUM(DECODE(A.STATDAY, '22', A.CONNCNT, 0)) AS C22, \r\n"
  587. " SUM(DECODE(A.STATDAY, '23', A.CONNCNT, 0)) AS C23, \r\n"
  588. " SUM(DECODE(A.STATDAY, '24', A.CONNCNT, 0)) AS C24, \r\n"
  589. " SUM(DECODE(A.STATDAY, '25', A.CONNCNT, 0)) AS C25, \r\n"
  590. " SUM(DECODE(A.STATDAY, '26', A.CONNCNT, 0)) AS C26, \r\n"
  591. " SUM(DECODE(A.STATDAY, '27', A.CONNCNT, 0)) AS C27, \r\n"
  592. " SUM(DECODE(A.STATDAY, '28', A.CONNCNT, 0)) AS C28, \r\n"
  593. " SUM(DECODE(A.STATDAY, '29', A.CONNCNT, 0)) AS C29, \r\n"
  594. " SUM(DECODE(A.STATDAY, '30', A.CONNCNT, 0)) AS C30, \r\n"
  595. " SUM(DECODE(A.STATDAY, '31', A.CONNCNT, 0)) AS C31 \r\n"
  596. " FROM TB_ST_DAY_CONN_CCTV A \r\n"
  597. " WHERE A.STATMONTH = :p01 \r\n"
  598. " GROUP BY ROLLUP(TO_CHAR(A.CCTVID))) X, \r\n"
  599. " (SELECT TO_CHAR(B.CCTV_CTLR_NMBR) AS CCTVID, \r\n"
  600. " B.CCTV_CTLR_ID AS CCTV_ID, \r\n"
  601. " B.ISTL_LCTN_NM AS NAME_KO \r\n"
  602. " FROM TB_CCTV_CTLR B \r\n"
  603. " WHERE SUBSTR(B.CCTV_CTLR_ID, 1, 3) = :p02) Y \r\n"
  604. " WHERE Y.CCTVID = X.CCTVID(+) \r\n"
  605. " ORDER BY Y.NAME_KO \r\n";
  606. try
  607. {
  608. ITSDb_SQLText(pADO, sQry);
  609. ITSDb_SQLBind(pADO, "p01", sQryDt);
  610. ITSDb_SQLBind(pADO, "p02", CenterId);
  611. ITSDb_SQLOpen(pADO);
  612. DspMonthStatistics(ADispCols);
  613. }
  614. catch(EDatabaseError &E)
  615. {
  616. ::PostMessage(Application->MainForm->Handle, (UINT)(WM_USER+0xF4), (WPARAM)0xB2, (LPARAM)0xB2);
  617. DBERRORMSG(Caption, String(E.ClassName()), E.Message, sQry);
  618. throw Exception(String(E.ClassName()) + E.Message);
  619. }
  620. catch(Exception &e)
  621. {
  622. ::PostMessage(Application->MainForm->Handle, (UINT)(WM_USER+0xF4), (WPARAM)0xB2, (LPARAM)0xB2);
  623. DBERRORMSG(Caption, String(e.ClassName()), e.Message, sQry);
  624. throw Exception(String(e.ClassName()) + e.Message);
  625. }
  626. }
  627. //---------------------------------------------------------------------------
  628. void __fastcall TIST0020M::DspMonthStatistics(int ADispCols)
  629. {
  630. TSqlCursor sqlCrs;
  631. TADOQuery *pADO = ADOM;
  632. TcxGridTableView *TvList = (TcxGridTableView*)TvMon;
  633. TcxDataController *pGDC = TvList->DataController;
  634. TcxGridChartView *TvChart = FRAMEChart2->TvChart;
  635. FRAMEChart2->FTitle = LblQryDay->Caption;
  636. try
  637. {
  638. TcxGridChartSeries *pChart = NULL;
  639. TvChart->ClearSeries();
  640. FRAMEChart2->ChartValueDisplay(FRAMEChart2->ChkDisplayVal->Checked);
  641. CMM_ClearGridTableView(TvList);
  642. int nRow = 0;
  643. int nDataCnt = 0;
  644. try
  645. {
  646. TvList->BeginUpdate();
  647. TvChart->BeginUpdate();
  648. nDataCnt = pADO->RecordCount;
  649. TvChart->DataController->RecordCount = ADispCols+1;
  650. pGDC->RecordCount = nDataCnt;
  651. int ii;
  652. String sCol, sChart;
  653. TvChart->Categories->Values[0] = FrmLang->lblChartSoge->Caption;//"소계";
  654. for (ii = 0; ii < ADispCols; ii++)
  655. {
  656. sChart.printf(L"%02d", ii+1);
  657. TvChart->Categories->Values[ii+1] = sChart;
  658. }
  659. for( ; !pADO->Eof; pADO->Next(), nRow++)
  660. {
  661. String sId = pADO->FieldByName("CCTV_ID")->AsString;
  662. String sNm = pADO->FieldByName("NAME_KO")->AsString;
  663. pGDC->Values[nRow][ColMonNo->Index] = sId;
  664. pGDC->Values[nRow][ColMonNm->Index] = sNm;
  665. pChart = TvChart->CreateSeries();
  666. pChart->DataBinding->ValueType = "Integer";
  667. pChart->DisplayText = sNm;
  668. pGDC->Values[nRow][ColMonTt->Index] = pADO->FieldByName("TOT")->AsInteger;
  669. pChart->Values[0] = pGDC->Values[nRow][ColMonTt->Index];
  670. for (int ii = 0; ii < ADispCols; ii++)
  671. {
  672. sCol.printf(L"C%02d", ii+1);
  673. pGDC->Values[nRow][ColMon01->Index+ii] = pADO->FieldByName(sCol)->AsInteger;
  674. pChart->Values[ii+1] = pGDC->Values[nRow][ColMon01->Index+ii];
  675. }
  676. }
  677. }
  678. __finally
  679. {
  680. if (pADO)
  681. {
  682. pADO->Close();
  683. }
  684. TvChart->EndUpdate();
  685. TvList->EndUpdate();
  686. }
  687. }
  688. catch(EDatabaseError &E)
  689. {
  690. ::PostMessage(Application->MainForm->Handle, (UINT)(WM_USER+0xF4), (WPARAM)0xB2, (LPARAM)0xB2);
  691. DBERRORMSG(Caption, String(E.ClassName()), E.Message, pADO->SQL->Text);
  692. throw Exception(String(E.ClassName()) + E.Message);
  693. }
  694. catch(Exception &e)
  695. {
  696. ::PostMessage(Application->MainForm->Handle, (UINT)(WM_USER+0xF4), (WPARAM)0xB2, (LPARAM)0xB2);
  697. DBERRORMSG(Caption, String(e.ClassName()), e.Message, pADO->SQL->Text);
  698. throw Exception(String(e.ClassName()) + e.Message);
  699. }
  700. }
  701. //---------------------------------------------------------------------------
  702. /*
  703. * 월별 년 통계 데이터 조회/출력
  704. * arguments
  705. *
  706. * return
  707. * void
  708. */
  709. void __fastcall TIST0020M::SelYearStatistics(int ADispCols)
  710. {
  711. TSqlCursor sqlCrs;
  712. TADOQuery *pADO = ADOY;
  713. String sQry;
  714. String sQryDt;
  715. sQryDt = DtYear->Date.FormatString("yyyy");
  716. sQry = "SELECT Y.CCTVID AS POINT_NUM, Y.CCTV_ID, Y.NAME_KO, \r\n"
  717. " NVL(X.CCTVID,0) CCTVID, NVL(X.TOT,0) TOT, \r\n"
  718. " NVL(X.C12,0) C12, NVL(X.C01,0) C01, NVL(X.C02,0) C02, \r\n"
  719. " NVL(X.C03,0) C03, NVL(X.C04,0) C04, NVL(X.C05,0) C05, \r\n"
  720. " NVL(X.C06,0) C06, NVL(X.C07,0) C07, NVL(X.C08,0) C08, \r\n"
  721. " NVL(X.C09,0) C09, NVL(X.C10,0) C10, NVL(X.C11,0) C11 \r\n"
  722. " FROM (SELECT CASE WHEN GROUPING(TO_CHAR(A.CCTVID)) = 1 THEN '0' \r\n"
  723. " ELSE TO_CHAR(A.CCTVID) END AS CCTVID, \r\n"
  724. " SUM(A.CONNCNT) AS TOT, \r\n"
  725. " SUM(DECODE(A.STATMON, '01', A.CONNCNT, 0)) AS C01, \r\n"
  726. " SUM(DECODE(A.STATMON, '02', A.CONNCNT, 0)) AS C02, \r\n"
  727. " SUM(DECODE(A.STATMON, '03', A.CONNCNT, 0)) AS C03, \r\n"
  728. " SUM(DECODE(A.STATMON, '04', A.CONNCNT, 0)) AS C04, \r\n"
  729. " SUM(DECODE(A.STATMON, '05', A.CONNCNT, 0)) AS C05, \r\n"
  730. " SUM(DECODE(A.STATMON, '06', A.CONNCNT, 0)) AS C06, \r\n"
  731. " SUM(DECODE(A.STATMON, '07', A.CONNCNT, 0)) AS C07, \r\n"
  732. " SUM(DECODE(A.STATMON, '08', A.CONNCNT, 0)) AS C08, \r\n"
  733. " SUM(DECODE(A.STATMON, '09', A.CONNCNT, 0)) AS C09, \r\n"
  734. " SUM(DECODE(A.STATMON, '10', A.CONNCNT, 0)) AS C10, \r\n"
  735. " SUM(DECODE(A.STATMON, '11', A.CONNCNT, 0)) AS C11, \r\n"
  736. " SUM(DECODE(A.STATMON, '12', A.CONNCNT, 0)) AS C12 \r\n"
  737. " FROM TB_ST_MON_CONN_CCTV A \r\n"
  738. " WHERE A.STATYEAR = :p01 \r\n"
  739. " GROUP BY ROLLUP(TO_CHAR(A.CCTVID))) X, \r\n"
  740. " (SELECT TO_CHAR(B.CCTV_CTLR_NMBR) AS CCTVID, \r\n"
  741. " B.CCTV_CTLR_ID AS CCTV_ID, \r\n"
  742. " B.ISTL_LCTN_NM AS NAME_KO \r\n"
  743. " FROM TB_CCTV_CTLR B \r\n"
  744. " WHERE SUBSTR(B.CCTV_CTLR_ID, 1, 3) = :p02) Y \r\n"
  745. " WHERE Y.CCTVID = X.CCTVID(+) \r\n"
  746. " ORDER BY Y.NAME_KO \r\n";
  747. try
  748. {
  749. ITSDb_SQLText(pADO, sQry);
  750. ITSDb_SQLBind(pADO, "p01", sQryDt);
  751. ITSDb_SQLBind(pADO, "p02", CenterId);
  752. ITSDb_SQLOpen(pADO);
  753. DspYearStatistics(ADispCols);
  754. }
  755. catch(EDatabaseError &E)
  756. {
  757. ::PostMessage(Application->MainForm->Handle, (UINT)(WM_USER+0xF4), (WPARAM)0xB2, (LPARAM)0xB2);
  758. DBERRORMSG(Caption, String(E.ClassName()), E.Message, sQry);
  759. throw Exception(String(E.ClassName()) + E.Message);
  760. }
  761. catch(Exception &e)
  762. {
  763. ::PostMessage(Application->MainForm->Handle, (UINT)(WM_USER+0xF4), (WPARAM)0xB2, (LPARAM)0xB2);
  764. DBERRORMSG(Caption, String(e.ClassName()), e.Message, sQry);
  765. throw Exception(String(e.ClassName()) + e.Message);
  766. }
  767. }
  768. //---------------------------------------------------------------------------
  769. void __fastcall TIST0020M::DspYearStatistics(int ADispCols)
  770. {
  771. TSqlCursor sqlCrs;
  772. TADOQuery *pADO = ADOY;
  773. TcxGridTableView *TvList = (TcxGridTableView*)TvYear;
  774. TcxDataController *pGDC = TvList->DataController;
  775. TcxGridChartView *TvChart = FRAMEChart3->TvChart;
  776. FRAMEChart3->FTitle = LblQryYear->Caption;
  777. try
  778. {
  779. TcxGridChartSeries *pChart = NULL;
  780. TvChart->ClearSeries();
  781. FRAMEChart3->ChartValueDisplay(FRAMEChart3->ChkDisplayVal->Checked);
  782. CMM_ClearGridTableView(TvList);
  783. int nRow = 0;
  784. int nDataCnt = 0;
  785. try
  786. {
  787. TvList->BeginUpdate();
  788. TvChart->BeginUpdate();
  789. nDataCnt = pADO->RecordCount;
  790. TvChart->DataController->RecordCount = ADispCols+1;
  791. pGDC->RecordCount = nDataCnt;
  792. int ii;
  793. String sCol, sChart;
  794. TvChart->Categories->Values[0] = FrmLang->lblChartSoge->Caption;//"소계";
  795. for (ii = 0; ii < ADispCols; ii++)
  796. {
  797. sChart.printf(L"%02d", ii+1);
  798. TvChart->Categories->Values[ii+1] = sChart;
  799. }
  800. for( ; !pADO->Eof; pADO->Next(), nRow++)
  801. {
  802. String sId = pADO->FieldByName("CCTV_ID")->AsString;
  803. String sNm = pADO->FieldByName("NAME_KO")->AsString;
  804. pGDC->Values[nRow][ColYearNo->Index] = sId;
  805. pGDC->Values[nRow][ColYearNm->Index] = sNm;
  806. pChart = TvChart->CreateSeries();
  807. pChart->DataBinding->ValueType = "Integer";
  808. pChart->DisplayText = sNm;
  809. pGDC->Values[nRow][ColYearTt->Index] = pADO->FieldByName("TOT")->AsInteger;
  810. pChart->Values[0] = pGDC->Values[nRow][ColYearTt->Index];
  811. for (int ii = 0; ii < ADispCols; ii++)
  812. {
  813. sCol.printf(L"C%02d", ii+1);
  814. pGDC->Values[nRow][ColYear01->Index+ii] = pADO->FieldByName(sCol)->AsInteger;
  815. pChart->Values[ii+1] = pGDC->Values[nRow][ColYear01->Index+ii];
  816. }
  817. }
  818. }
  819. __finally
  820. {
  821. if (pADO)
  822. {
  823. pADO->Close();
  824. }
  825. TvChart->EndUpdate();
  826. TvList->EndUpdate();
  827. }
  828. }
  829. catch(EDatabaseError &E)
  830. {
  831. ::PostMessage(Application->MainForm->Handle, (UINT)(WM_USER+0xF4), (WPARAM)0xB2, (LPARAM)0xB2);
  832. DBERRORMSG(Caption, String(E.ClassName()), E.Message, pADO->SQL->Text);
  833. throw Exception(String(E.ClassName()) + E.Message);
  834. }
  835. catch(Exception &e)
  836. {
  837. ::PostMessage(Application->MainForm->Handle, (UINT)(WM_USER+0xF4), (WPARAM)0xB2, (LPARAM)0xB2);
  838. DBERRORMSG(Caption, String(e.ClassName()), e.Message, pADO->SQL->Text);
  839. throw Exception(String(e.ClassName()) + e.Message);
  840. }
  841. }
  842. //---------------------------------------------------------------------------
  843. /*
  844. * 월별 년 통계 데이터 조회/출력
  845. * arguments
  846. *
  847. * return
  848. * void
  849. */
  850. void __fastcall TIST0020M::SelTermYearStatistics(int ADispCols)
  851. {
  852. TSqlCursor sqlCrs;
  853. TADOQuery *pADO = ADOT;
  854. String sQry;
  855. String sCap, sTemp, sTemp2;
  856. String sStYear, sEdYear;
  857. sTemp = "";
  858. sTemp2= "";
  859. int ii;
  860. int nStYear = DtStYear->DateTime.FormatString("yyyy").ToInt();
  861. int nEdYear = DtEdYear->DateTime.FormatString("yyyy").ToInt();
  862. int nYears = nEdYear - nStYear;
  863. nYears++;
  864. sStYear = DtStYear->Date.FormatString("yyyy");
  865. sEdYear = DtEdYear->Date.FormatString("yyyy");
  866. TcxGridBand *pBand;
  867. try
  868. {
  869. TvTermYear->BeginUpdate();
  870. pBand = TvTermYear->Bands->Items[1];
  871. pBand->Visible = false;
  872. int nCols = pBand->ColumnCount;
  873. try
  874. {
  875. for (ii = 0; ii < nCols; ii++)
  876. {
  877. pBand->Columns[ii]->Visible = false;
  878. }
  879. for (ii = 0; ii < nYears && ii < 24; ii++)
  880. {
  881. TcxGridBandedColumn *pCol = TvTermYear->Columns[ColTYear00->Index+ii];
  882. sCap.printf(L"%04d", ii+nStYear);
  883. pCol->Caption = sCap;
  884. pCol->Width = 70;
  885. pCol->Visible = true;
  886. if (ii != 0)
  887. {
  888. sTemp += ", \r\n";
  889. sTemp2 += ", \r\n";
  890. }
  891. sCap.printf(L" NVL(X.C%02d,0) C%02d", ii, ii);
  892. sTemp += sCap;
  893. sCap.printf(L" SUM(DECODE(A.STATYEAR, '%04d', A.CONNCNT, 0)) AS C%02d", ii + nStYear, ii);
  894. sTemp2 += sCap;
  895. }
  896. sTemp += "\r\n";
  897. sTemp2 += "\r\n";
  898. }
  899. catch(...)
  900. {
  901. }
  902. }
  903. __finally
  904. {
  905. pBand->Width = nYears*70;
  906. pBand->Visible = true;
  907. TvTermYear->EndUpdate();
  908. }
  909. sQry = "SELECT Y.CCTVID AS POINT_NUM, Y.CCTV_ID, Y.NAME_KO, \r\n"
  910. " NVL(X.CCTVID,0) CCTVID, NVL(X.TOT,0) TOT, \r\n"
  911. + sTemp +
  912. // " NVL(X.C00,0) C00, \r\n"
  913. // " NVL(X.C01,0) C01, \r\n"
  914. // " NVL(X.C02,0) C02 \r\n"
  915. " FROM (SELECT CASE WHEN GROUPING(TO_CHAR(A.CCTVID)) = 1 THEN '0' \r\n"
  916. " ELSE TO_CHAR(A.CCTVID) END AS CCTVID, \r\n"
  917. " SUM(A.CONNCNT) AS TOT, \r\n"
  918. + sTemp2 +
  919. // " SUM(DECODE(A.STATYEAR, '2010', A.CONNCNT, 0)) AS C00, \r\n"
  920. // " SUM(DECODE(A.STATYEAR, '2011', A.CONNCNT, 0)) AS C01, \r\n"
  921. // " SUM(DECODE(A.STATYEAR, '2012', A.CONNCNT, 0)) AS C02 \r\n"
  922. " FROM TB_ST_MON_CONN_CCTV A \r\n"
  923. " WHERE A.STATYEAR BETWEEN :p01 AND :p02 \r\n"
  924. " GROUP BY ROLLUP(TO_CHAR(A.CCTVID))) X, \r\n"
  925. " (SELECT TO_CHAR(B.CCTV_CTLR_NMBR) AS CCTVID, \r\n"
  926. " B.CCTV_CTLR_ID AS CCTV_ID, \r\n"
  927. " B.ISTL_LCTN_NM AS NAME_KO \r\n"
  928. " FROM TB_CCTV_CTLR B \r\n"
  929. " WHERE SUBSTR(B.CCTV_CTLR_ID, 1, 3) = :p03) Y \r\n"
  930. " WHERE Y.CCTVID = X.CCTVID(+) \r\n"
  931. " ORDER BY Y.NAME_KO \r\n";
  932. try
  933. {
  934. ITSDb_SQLText(pADO, sQry);
  935. ITSDb_SQLBind(pADO, "p01", sStYear);
  936. ITSDb_SQLBind(pADO, "p02", sEdYear);
  937. ITSDb_SQLBind(pADO, "p03", CenterId);
  938. ITSDb_SQLOpen(pADO);
  939. DspTermYearStatistics(ADispCols, nStYear);
  940. }
  941. catch(EDatabaseError &E)
  942. {
  943. ::PostMessage(Application->MainForm->Handle, (UINT)(WM_USER+0xF4), (WPARAM)0xB2, (LPARAM)0xB2);
  944. DBERRORMSG(Caption, String(E.ClassName()), E.Message, sQry);
  945. throw Exception(String(E.ClassName()) + E.Message);
  946. }
  947. catch(Exception &e)
  948. {
  949. ::PostMessage(Application->MainForm->Handle, (UINT)(WM_USER+0xF4), (WPARAM)0xB2, (LPARAM)0xB2);
  950. DBERRORMSG(Caption, String(e.ClassName()), e.Message, sQry);
  951. throw Exception(String(e.ClassName()) + e.Message);
  952. }
  953. }
  954. //---------------------------------------------------------------------------
  955. void __fastcall TIST0020M::DspTermYearStatistics(int ADispCols, int AStYear)
  956. {
  957. TSqlCursor sqlCrs;
  958. TADOQuery *pADO = ADOT;
  959. TcxGridTableView *TvList = (TcxGridTableView*)TvTermYear;
  960. TcxDataController *pGDC = TvList->DataController;
  961. TcxGridChartView *TvChart = FRAMEChart4->TvChart;
  962. FRAMEChart4->FTitle = LblQryTermYear->Caption;
  963. try
  964. {
  965. TcxGridChartSeries *pChart = NULL;
  966. TvChart->ClearSeries();
  967. FRAMEChart4->ChartValueDisplay(FRAMEChart4->ChkDisplayVal->Checked);
  968. CMM_ClearGridTableView(TvList);
  969. int nRow = 0;
  970. int nDataCnt = 0;
  971. try
  972. {
  973. TvList->BeginUpdate();
  974. TvChart->BeginUpdate();
  975. nDataCnt = pADO->RecordCount;
  976. TvChart->DataController->RecordCount = ADispCols+1;
  977. pGDC->RecordCount = nDataCnt;
  978. int ii;
  979. String sCol, sChart;
  980. TvChart->Categories->Values[0] = FrmLang->lblChartSoge->Caption;//"소계";
  981. for (ii = 0; ii < ADispCols; ii++)
  982. {
  983. sChart.printf(L"%02d", AStYear + ii);
  984. TvChart->Categories->Values[ii+1] = sChart;
  985. }
  986. for( ; !pADO->Eof; pADO->Next(), nRow++)
  987. {
  988. String sId = pADO->FieldByName("CCTV_ID")->AsString;
  989. String sNm = pADO->FieldByName("NAME_KO")->AsString;
  990. pGDC->Values[nRow][ColTYearNo->Index] = sId;
  991. pGDC->Values[nRow][ColTYearNm->Index] = sNm;
  992. pChart = TvChart->CreateSeries();
  993. pChart->DataBinding->ValueType = "Integer";
  994. pChart->DisplayText = sNm;
  995. pGDC->Values[nRow][ColTYearTt->Index] = pADO->FieldByName("TOT")->AsInteger;
  996. pChart->Values[0] = pGDC->Values[nRow][ColTYearTt->Index];
  997. for (int ii = 0; ii < ADispCols; ii++)
  998. {
  999. sCol.printf(L"C%02d", ii);
  1000. pGDC->Values[nRow][ColTYear00->Index+ii] = pADO->FieldByName(sCol)->AsInteger;
  1001. pChart->Values[ii+1] = pGDC->Values[nRow][ColTYear00->Index+ii];
  1002. }
  1003. }
  1004. }
  1005. __finally
  1006. {
  1007. if (pADO)
  1008. {
  1009. pADO->Close();
  1010. }
  1011. TvChart->EndUpdate();
  1012. TvList->EndUpdate();
  1013. }
  1014. }
  1015. catch(EDatabaseError &E)
  1016. {
  1017. ::PostMessage(Application->MainForm->Handle, (UINT)(WM_USER+0xF4), (WPARAM)0xB2, (LPARAM)0xB2);
  1018. DBERRORMSG(Caption, String(E.ClassName()), E.Message, pADO->SQL->Text);
  1019. throw Exception(String(E.ClassName()) + E.Message);
  1020. }
  1021. catch(Exception &e)
  1022. {
  1023. ::PostMessage(Application->MainForm->Handle, (UINT)(WM_USER+0xF4), (WPARAM)0xB2, (LPARAM)0xB2);
  1024. DBERRORMSG(Caption, String(e.ClassName()), e.Message, pADO->SQL->Text);
  1025. throw Exception(String(e.ClassName()) + e.Message);
  1026. }
  1027. }
  1028. //---------------------------------------------------------------------------
  1029. void __fastcall TIST0020M::TvListDataControllerSummaryFooterSummaryItemsSummary(TcxDataSummaryItems *ASender, TcxSummaryEventArguments &Arguments,
  1030. TcxSummaryEventOutArguments &OutArguments)
  1031. {
  1032. CMM_SetSummaryItemKind(Arguments, OutArguments, 2, false, false);
  1033. }
  1034. //---------------------------------------------------------------------------
  1035. void __fastcall TIST0020M::TvListDataControllerSummaryDefaultGroupSummaryItemsSummary(TcxDataSummaryItems *ASender, TcxSummaryEventArguments &Arguments,
  1036. TcxSummaryEventOutArguments &OutArguments)
  1037. {
  1038. CMM_SetSummaryItemKind(Arguments, OutArguments, 1, false, false);
  1039. }
  1040. //---------------------------------------------------------------------------
  1041. void __fastcall TIST0020M::BtnCloseClick(TObject *Sender)
  1042. {
  1043. Close();
  1044. }
  1045. //---------------------------------------------------------------------------
  1046. void __fastcall TIST0020M::FormClose(TObject *Sender, TCloseAction &Action)
  1047. {
  1048. CommClose();
  1049. IST0020M = NULL;
  1050. Action = caFree;
  1051. }
  1052. //---------------------------------------------------------------------------