IDB0060MF.cpp 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666
  1. //---------------------------------------------------------------------------
  2. #include <vcl.h>
  3. #include "ITSSkinF.h"
  4. #include "ITSUtilF.h"
  5. #include "ITSDbF.h"
  6. #include "AppGlobalF.h"
  7. #include "WindowMsgF.h"
  8. #include "ITSLangTransF.h"
  9. #pragma hdrstop
  10. #include "IDB0060MF.h"
  11. //---------------------------------------------------------------------------
  12. #pragma package(smart_init)
  13. #pragma link "cxButtons"
  14. #pragma link "cxCalc"
  15. #pragma link "cxCheckBox"
  16. #pragma link "cxClasses"
  17. #pragma link "cxContainer"
  18. #pragma link "cxControls"
  19. #pragma link "cxCustomData"
  20. #pragma link "cxData"
  21. #pragma link "cxDataStorage"
  22. #pragma link "cxDropDownEdit"
  23. #pragma link "cxEdit"
  24. #pragma link "cxFilter"
  25. #pragma link "cxGraphics"
  26. #pragma link "cxGrid"
  27. #pragma link "cxGridBandedTableView"
  28. #pragma link "cxGridCustomTableView"
  29. #pragma link "cxGridCustomView"
  30. #pragma link "cxGridLevel"
  31. #pragma link "cxGridTableView"
  32. #pragma link "cxLabel"
  33. #pragma link "cxLookAndFeelPainters"
  34. #pragma link "cxLookAndFeels"
  35. #pragma link "cxSpinEdit"
  36. #pragma link "cxStyles"
  37. #pragma link "cxTextEdit"
  38. #pragma link "dxSkinBlack"
  39. #pragma link "dxSkinBlue"
  40. #pragma link "dxSkinsCore"
  41. #pragma link "dxSkinscxPCPainter"
  42. #pragma resource "*.dfm"
  43. TIDB0060M *IDB0060M = NULL;
  44. //---------------------------------------------------------------------------
  45. __fastcall TIDB0060M::TIDB0060M(TComponent* Owner)
  46. : TForm(Owner)
  47. {
  48. LangTrans->Translate(this, ITSDb_GetConnection());
  49. ITSSkin_Load(this);
  50. CMM_LoadForm(g_sFormsDir, this);
  51. FTitle = Caption;//"소통등급관리";
  52. }
  53. //---------------------------------------------------------------------------
  54. /*
  55. * 닫기버튼 이나 x버튼 클릭시 공통으로 처리하는 로직이들어간다..
  56. * Form과 DataModule class를 delete시킨다.
  57. * arguments
  58. *
  59. * return
  60. * void
  61. */
  62. void __fastcall TIDB0060M::CommClose()
  63. {
  64. try
  65. {
  66. CMM_SaveForm(g_sFormsDir, this);
  67. }
  68. catch(...)
  69. {
  70. }
  71. }
  72. //---------------------------------------------------------------------------
  73. /*
  74. * Form을 보여줄때 호출되는 event 메서드이다.
  75. * arguments
  76. * Sender : event handler 객체
  77. * return
  78. * void
  79. */
  80. void __fastcall TIDB0060M::FormShow(TObject *Sender)
  81. {
  82. Refresh();
  83. FormInit();
  84. TmrShow->Enabled = true;
  85. }
  86. //---------------------------------------------------------------------------
  87. /*
  88. * form 초기화
  89. *
  90. * arguments
  91. *
  92. * return
  93. * void
  94. */
  95. void __fastcall TIDB0060M::FormInit()
  96. {
  97. m_pGDC = TvList->DataController;
  98. FCodeLTC = ItsCodeManager->FLists.Find("LTC");
  99. TvList->OptionsView->NoDataToDisplayInfoText = FrmLang->lblNoInfo->Caption;//"<소통등급 정보가 없습니다>";
  100. TcxComboBoxProperties *pcxComboBoxProperties = (TcxComboBoxProperties *)Column13->Properties;
  101. pcxComboBoxProperties->Items->Add("Y");
  102. pcxComboBoxProperties->Items->Add("N");
  103. }
  104. //---------------------------------------------------------------------------
  105. /*
  106. * Form이 Show되고 난 후 최초 1회 수행되는 타이머 이벤트
  107. * arguments
  108. * Sender : event handler 객체
  109. * return
  110. * void
  111. */
  112. void __fastcall TIDB0060M::TmrShowTimer(TObject *Sender)
  113. {
  114. TmrShow->Enabled = false;
  115. BtnSearchClick((TObject*)BtnSearch);
  116. }
  117. //---------------------------------------------------------------------------
  118. /*
  119. * Search 버튼 클릭 이벤트 핸들러
  120. * arguments
  121. * Sender : event handler 객체
  122. * return
  123. * void
  124. */
  125. void __fastcall TIDB0060M::BtnSearchClick(TObject *Sender)
  126. {
  127. Application->ProcessMessages();
  128. TSqlCursor sqlCrs((TControl*)BtnSearch);
  129. RefreshData();
  130. CxList->SetFocus();
  131. }
  132. //---------------------------------------------------------------------------
  133. /*
  134. * Refresh Data Event Function
  135. * arguments
  136. *
  137. * return
  138. * void
  139. */
  140. void __fastcall TIDB0060M::RefreshData()
  141. {
  142. // 검색조건에 의한 링크 데이터 조회
  143. SelListData();
  144. ChkExpandClick(ChkExpand);
  145. //TvList->ApplyBestFit(NULL, false, false);
  146. }
  147. //---------------------------------------------------------------------------
  148. void __fastcall TIDB0060M::SelListData()
  149. {
  150. #if 0
  151. 101.고속국도
  152. 102.도시고속국도
  153. 103.일반국도
  154. 104.특별·광역시도
  155. 105.국가지원지방도
  156. 106.지방도
  157. 107.시·군도
  158. --108.기타
  159. SRT1 단속류
  160. SRT2 연속류
  161. SRT3 시군도
  162. SRT4 국도
  163. SRT5 도시고속도로
  164. SRT6 고속도로
  165. #endif
  166. FUpdate = false;
  167. TItsSubCode *pSubCode;
  168. CMM_ClearGridTableView(TvList);
  169. int nTrfClr;
  170. int nRow = 0;
  171. try
  172. {
  173. TvList->BeginUpdate();
  174. FOR_STL(TItsTrafficGrade *, pGrade, ItsTrafficGradeManager->FLists)
  175. {
  176. FOR_STL(TItsTrafficSubGrade *, pSubGrade, pGrade->FSubLists)
  177. {
  178. nRow = m_pGDC->AppendRecord();
  179. m_pGDC->Values[nRow][Column01->Index] = lbl3Step->Caption;//"3단계 소통등급";
  180. m_pGDC->Values[nRow][Column02->Index] = "3";
  181. //도로등급
  182. m_pGDC->Values[nRow][Column03->Index] = "[" + pGrade->SECT_GRAD_CD + "] " + pGrade->SECT_GRAD_NM;
  183. m_pGDC->Values[nRow][Column04->Index] = pGrade->SECT_GRAD_CD;
  184. //소통등급
  185. String sLTC = "[" + pSubGrade->CMTR_GRAD_CD +"] ";
  186. if (FCodeLTC)
  187. {
  188. pSubCode = FCodeLTC->FSubLists.Find(pSubGrade->CMTR_GRAD_CD);
  189. if (pSubCode) sLTC = sLTC + pSubCode->CMMN_CD_KOR_NM;
  190. }
  191. m_pGDC->Values[nRow][Column05->Index] = sLTC;
  192. m_pGDC->Values[nRow][Column06->Index] = pSubGrade->CMTR_GRAD_CD;
  193. //nTrfClr = StrToInt();
  194. m_pGDC->Values[nRow][Column07->Index] = pSubGrade->LWST_TRVL_SPED;
  195. m_pGDC->Values[nRow][Column08->Index] = pSubGrade->LWST_TRVL_SPED;
  196. m_pGDC->Values[nRow][Column09->Index] = pSubGrade->HGHS_TRVL_SPED;
  197. m_pGDC->Values[nRow][Column10->Index] = pSubGrade->HGHS_TRVL_SPED;
  198. if (pSubGrade->CMTR_GRAD_CD == "LTC1") nTrfClr = clLime;//65280;
  199. else if (pSubGrade->CMTR_GRAD_CD == "LTC2") nTrfClr = clYellow;//65535;
  200. else if (pSubGrade->CMTR_GRAD_CD == "LTC3") nTrfClr = clRed;//255;
  201. else nTrfClr = clSilver;
  202. m_pGDC->Values[nRow][Column11->Index] = nTrfClr;
  203. m_pGDC->Values[nRow][Column12->Index] = nTrfClr;
  204. m_pGDC->Values[nRow][Column13->Index] = pSubGrade->CNGS_GRAD_YN;
  205. m_pGDC->Values[nRow][Column14->Index] = pSubGrade->CNGS_GRAD_YN;
  206. m_pGDC->Values[nRow][Column88->Index] = 0;
  207. m_pGDC->Values[nRow][Column98->Index] = (int)pGrade;
  208. m_pGDC->Values[nRow][Column99->Index] = (int)pSubGrade;
  209. }
  210. }
  211. }
  212. __finally
  213. {
  214. TvList->EndUpdate();
  215. TvList->DataController->GotoFirst();
  216. TvList->DataController->FocusedRecordIndex = 0;
  217. }
  218. }
  219. //---------------------------------------------------------------------------
  220. /*
  221. * Close 버튼 클릭 이벤트 핸들러
  222. * arguments
  223. * Sender : event handler 객체
  224. * return
  225. * void
  226. */
  227. void __fastcall TIDB0060M::BtnCloseClick(TObject *Sender)
  228. {
  229. Close();
  230. }
  231. //---------------------------------------------------------------------------
  232. /*
  233. * 저장 버튼 클릭 이벤트 핸들러
  234. * arguments
  235. * Sender : event handler 객체
  236. * return
  237. * void
  238. */
  239. void __fastcall TIDB0060M::BtnSaveClick(TObject *Sender)
  240. {
  241. TcxGrid *pGrid = CxList;
  242. TcxGridTableView *pView = TvList;
  243. String sTitle= Caption;//"소통등급";
  244. CMM_ExportToExcelFile(sTitle, pGrid, pView, this);
  245. }
  246. //---------------------------------------------------------------------------
  247. void __fastcall TIDB0060M::Column11CustomDrawCell(TcxCustomGridTableView *Sender, TcxCanvas *ACanvas, TcxGridTableDataCellViewInfo *AViewInfo,
  248. bool &ADone)
  249. {
  250. try
  251. {
  252. //ACanvas->Canvas->Brush->Color = m_pColor[0]->Color;
  253. int iIndex = AViewInfo->Item->Index;
  254. String val = (String)AViewInfo->GridRecord->DisplayTexts[iIndex];
  255. ACanvas->Canvas->Font->Color = (TColor)StrToInt(val.c_str());
  256. ACanvas->Canvas->Brush->Color = (TColor)StrToInt(val.c_str());
  257. }
  258. catch(...) {}
  259. }
  260. //---------------------------------------------------------------------------
  261. void __fastcall TIDB0060M::ChkExpandClick(TObject *Sender)
  262. {
  263. CMM_ExpandCollapseChk(TvList, ChkExpand->Checked);
  264. }
  265. //---------------------------------------------------------------------------
  266. void __fastcall TIDB0060M::ColValSpdPropertiesChange(TObject *Sender)
  267. {
  268. if (((TcxSpinEdit*)Sender)->Value < 0)
  269. ((TcxSpinEdit*)Sender)->Value = 0;
  270. else if(((TcxSpinEdit*)Sender)->Value > ((TcxSpinEdit*)Sender)->Properties->MaxValue &&
  271. ((TcxSpinEdit*)Sender)->Properties->MaxValue)
  272. ((TcxSpinEdit*)Sender)->Value = ((TcxSpinEdit*)Sender)->Properties->MaxValue;
  273. }
  274. //---------------------------------------------------------------------------
  275. void __fastcall TIDB0060M::TvListCellClick(TcxCustomGridTableView *Sender, TcxGridTableDataCellViewInfo *ACellViewInfo, TMouseButton AButton,
  276. TShiftState AShift, bool &AHandled)
  277. {
  278. #if 0
  279. if (ACellViewInfo->Item->Index == Column11->Index)
  280. {
  281. if (ColorDialog->Execute())
  282. {
  283. //m_pColor[0]->Color = ColorDialog->Color;
  284. //m_pGDC->Values[m_pGDC->FocusedRow->Index-1][Column11->Index] = ColorDialog->Color;
  285. m_pGDC->Values[m_pGDC->GetFocusedRecordIndex()][Column11->Index] = ColorDialog->Color;
  286. }
  287. }
  288. #endif
  289. }
  290. //---------------------------------------------------------------------------
  291. void __fastcall TIDB0060M::TvListMouseMove(TObject *Sender, TShiftState Shift, int X, int Y)
  292. {
  293. try
  294. {
  295. if (!BtnEdit->Down) return;
  296. TcxGridSite *ASite = (TcxGridSite *)Sender;
  297. //Screen->Cursor = crDefault;
  298. //TcxCustomGridHitTest *AHitTest = tvSel->GetHitTest(X, Y);
  299. TcxCustomGridHitTest *AHitTest = dynamic_cast<TcxGridRecordHitTest*>(ASite->ViewInfo->GetHitTest(X, Y));
  300. if (dynamic_cast<TcxGridRecordHitTest*>(ASite->ViewInfo->GetHitTest(X, Y)))
  301. {
  302. int ARow = ((TcxGridRecordCellHitTest*)AHitTest)->GridRecord->Index;
  303. if (((TcxGridRecordCellHitTest*)AHitTest)->Item == NULL) return;
  304. int ACol = ((TcxGridRecordCellHitTest*)AHitTest)->Item->Index;
  305. #if 0
  306. if (ACol == Column11->Index &&
  307. ARow < ASite->GridView->DataController->RecordCount-1)
  308. {
  309. Screen->Cursor = crHandPoint;
  310. }
  311. else
  312. #endif
  313. if (ACol == Column07->Index &&
  314. ARow < ASite->GridView->DataController->RecordCount-1)
  315. {
  316. Screen->Cursor = crIBeam;
  317. }
  318. else
  319. if (ACol == Column09->Index &&
  320. ARow < ASite->GridView->DataController->RecordCount-1)
  321. {
  322. Screen->Cursor = crIBeam;
  323. }
  324. else
  325. if (ACol == Column13->Index &&
  326. ARow < ASite->GridView->DataController->RecordCount-1)
  327. {
  328. Screen->Cursor = crHandPoint;
  329. }
  330. }
  331. else
  332. {
  333. Screen->Cursor = crDefault;
  334. }
  335. }
  336. catch(...)
  337. {
  338. }
  339. }
  340. //---------------------------------------------------------------------------
  341. void __fastcall TIDB0060M::FormClose(TObject *Sender, TCloseAction &Action)
  342. {
  343. CommClose();
  344. IDB0060M = NULL;
  345. Action = caFree;
  346. }
  347. //---------------------------------------------------------------------------
  348. void __fastcall TIDB0060M::BtnEditClick(TObject *Sender)
  349. {
  350. TListFocus tvFocus(TvList);
  351. if (BtnEdit->Caption == FrmLang->lblCancel->Caption)//"취소")
  352. {
  353. CxList->SetFocus();
  354. Application->ProcessMessages();
  355. SaveData();
  356. }
  357. FrmLang->ITSSkin_ButtonClick(BtnSearch, BtnEdit, BtnInsert, BtnDelete, BtnApply);
  358. ChangeEditMode(BtnEdit->Down);
  359. //RefreshData(); //정보변경을 알려야 하므로 저장하는 곳에서 읽도록 처리함.
  360. }
  361. //---------------------------------------------------------------------------
  362. void __fastcall TIDB0060M::ChangeEditMode(bool AEdit)
  363. {
  364. bool bEditing = AEdit;
  365. try
  366. {
  367. TvList->BeginUpdate();
  368. Column00->Visible = bEditing;
  369. Column07->Options->Editing = bEditing;
  370. Column09->Options->Editing = bEditing;
  371. Column13->Options->Editing = bEditing;
  372. }
  373. __finally
  374. {
  375. TvList->EndUpdate();
  376. if (bEditing)
  377. {
  378. BtnEdit->Caption = FrmLang->lblCancel->Caption;//"취소";
  379. BtnEdit->Hint = FrmLang->lblCancel->Hint;//데이터 편집 취소";
  380. }
  381. else
  382. {
  383. BtnEdit->Caption = FrmLang->lblEdit->Caption;//"편집";
  384. BtnEdit->Hint = FrmLang->lblEdit->Hint;//데이터 편집";
  385. Screen->Cursor = crDefault;
  386. }
  387. }
  388. }
  389. //---------------------------------------------------------------------------
  390. void __fastcall TIDB0060M::BtnApplyClick(TObject *Sender)
  391. {
  392. FUpdate = true;
  393. BtnEdit->Down = false;
  394. BtnEdit->Click();
  395. }
  396. //---------------------------------------------------------------------------
  397. bool __fastcall TIDB0060M::IsUpdate()
  398. {
  399. int nMemPtr;
  400. int nMinSpd, nMaxSpd;
  401. String sGradYn;
  402. TItsTrafficSubGrade *pSubGrade;
  403. int nUpdateCnt = 0;
  404. int nRows = m_pGDC->RecordCount;
  405. try
  406. {
  407. for (int ii = 0; ii < nRows; ii++)
  408. {
  409. m_pGDC->Values[ii][Column88->Index] = 0;
  410. nMemPtr = m_pGDC->Values[ii][Column99->Index];
  411. pSubGrade = (TItsTrafficSubGrade *)nMemPtr;
  412. nMinSpd = m_pGDC->Values[ii][Column07->Index];
  413. nMaxSpd = m_pGDC->Values[ii][Column09->Index];
  414. sGradYn = m_pGDC->Values[ii][Column13->Index];
  415. if (nMinSpd != pSubGrade->LWST_TRVL_SPED ||
  416. nMaxSpd != pSubGrade->HGHS_TRVL_SPED ||
  417. sGradYn != pSubGrade->CNGS_GRAD_YN)
  418. {
  419. m_pGDC->Values[ii][Column88->Index] = 1;
  420. nUpdateCnt++;
  421. }
  422. }
  423. }
  424. catch(...)
  425. {
  426. }
  427. if (nUpdateCnt == 0)
  428. {
  429. return false;
  430. }
  431. return true;
  432. }
  433. //---------------------------------------------------------------------------
  434. void __fastcall TIDB0060M::RollbackListData()
  435. {
  436. int nStateVal;
  437. int nMinSpd, nMaxSpd, nColor;
  438. try
  439. {
  440. try
  441. {
  442. int nRows = m_pGDC->RecordCount;
  443. TvList->BeginUpdate();
  444. for (int ii = 0; ii < nRows; ii++)
  445. {
  446. nStateVal = m_pGDC->Values[ii][Column88->Index];
  447. if (nStateVal == 0) continue;
  448. nMinSpd = m_pGDC->Values[ii][Column08->Index];
  449. nMaxSpd = m_pGDC->Values[ii][Column10->Index];
  450. nColor = m_pGDC->Values[ii][Column12->Index];
  451. m_pGDC->Values[ii][Column88->Index] = 0;
  452. m_pGDC->Values[ii][Column07->Index] = nMinSpd;
  453. m_pGDC->Values[ii][Column09->Index] = nMaxSpd;
  454. m_pGDC->Values[ii][Column11->Index] = nColor;
  455. }
  456. }
  457. catch (Exception &exception)
  458. {
  459. throw Exception(String(exception.ClassName()) + exception.Message);
  460. }
  461. }
  462. __finally
  463. {
  464. TvList->EndUpdate();
  465. }
  466. }
  467. //---------------------------------------------------------------------------
  468. void __fastcall TIDB0060M::SaveData()
  469. {
  470. this->Update();
  471. if (!IsUpdate()) return;
  472. if (!FUpdate)
  473. {
  474. if (Application->MessageBox(FrmLang->lblEidtConfirm->Caption.c_str(),//L"변경된 정보가 있습니다.\r\n변경된 정보를 저장 하시겠습니까?",
  475. FTitle.c_str(), MB_YESNO|MB_ICONQUESTION|MB_APPLMODAL) != IDYES)
  476. {
  477. RollbackListData();
  478. return;
  479. }
  480. }
  481. int nStateVal;
  482. int nMemPtr;
  483. TItsTrafficGrade *pGrade;
  484. TItsTrafficSubGrade *pSubGrade;
  485. int nMinSpd, nMaxSpd;
  486. String sGradYn;
  487. bool bSave = false;
  488. int nUpdateCnt = 0;
  489. int nRows = m_pGDC->RecordCount;
  490. TADOQuery *pADO = NULL;
  491. try
  492. {
  493. try
  494. {
  495. pADO = new TADOQuery(NULL);
  496. pADO->Close();
  497. pADO->Connection = ITSDb_GetConnection();
  498. TvList->BeginUpdate();
  499. ITSDb_GetConnection()->BeginTrans();
  500. {
  501. String sQry;
  502. sQry = "UPDATE TB_CMTR_GRAD_CLSF \r\n"
  503. " SET LWST_TRVL_SPED = :p01, \r\n"
  504. " HGHS_TRVL_SPED = :p02, \r\n"
  505. " CNGS_GRAD_YN = :p03 \r\n"
  506. " WHERE SECT_GRAD_CD = :p04 \r\n"
  507. " AND CMTR_GRAD_CD = :p05 \r\n";
  508. ITSDb_SQLText(pADO, sQry);
  509. for (int ii = 0; ii < nRows; ii++)
  510. {
  511. TSqlCursor sqlCrs;
  512. nStateVal = m_pGDC->Values[ii][Column88->Index];
  513. if (nStateVal == 0) continue;
  514. nMemPtr = m_pGDC->Values[ii][Column98->Index];
  515. pGrade = (TItsTrafficGrade *)nMemPtr;
  516. nMemPtr = m_pGDC->Values[ii][Column99->Index];
  517. pSubGrade = (TItsTrafficSubGrade *)nMemPtr;
  518. nMinSpd = m_pGDC->Values[ii][Column07->Index];
  519. nMaxSpd = m_pGDC->Values[ii][Column09->Index];
  520. sGradYn = m_pGDC->Values[ii][Column13->Index];
  521. ITSDb_SQLBind(pADO, "p01", nMinSpd);
  522. ITSDb_SQLBind(pADO, "p02", nMaxSpd);
  523. ITSDb_SQLBind(pADO, "p03", sGradYn);
  524. ITSDb_SQLBind(pADO, "p04", pGrade->SECT_GRAD_CD);
  525. ITSDb_SQLBind(pADO, "p05", pSubGrade->CMTR_GRAD_CD);
  526. ITSDb_SQLExec(pADO);
  527. m_pGDC->Values[ii][Column88->Index] = 0;
  528. pSubGrade->LWST_TRVL_SPED = nMinSpd;
  529. pSubGrade->HGHS_TRVL_SPED = nMaxSpd;
  530. pSubGrade->CNGS_GRAD_YN = sGradYn;
  531. m_pGDC->Values[ii][Column08->Index] = nMinSpd;
  532. m_pGDC->Values[ii][Column10->Index] = nMaxSpd;
  533. m_pGDC->Values[ii][Column14->Index] = pSubGrade->CNGS_GRAD_YN;
  534. }
  535. ITSDb_GetConnection()->CommitTrans();
  536. bSave = true;
  537. }
  538. }
  539. catch (Exception &exception)
  540. {
  541. ITSDb_GetConnection()->RollbackTrans();
  542. ::PostMessage(Application->MainForm->Handle, (UINT)(WM_USER+0xF4), (WPARAM)0xB2, (LPARAM)0xB2);
  543. throw Exception(String(exception.ClassName()) + exception.Message);
  544. }
  545. catch (...)
  546. {
  547. ITSDb_GetConnection()->RollbackTrans();
  548. ::PostMessage(Application->MainForm->Handle, (UINT)(WM_USER+0xF4), (WPARAM)0xB2, (LPARAM)0xB2);
  549. throw Exception(FrmLang->lblDbErr->Caption);//"소통등급 정보 저장 중에 알수없는 오류가 발생하였습니다.");
  550. }
  551. }
  552. __finally
  553. {
  554. TvList->EndUpdate();
  555. if (pADO)
  556. {
  557. pADO->Close();
  558. delete pADO;
  559. }
  560. if (bSave)
  561. {
  562. Application->ProcessMessages();
  563. Application->MessageBox(FrmLang->lblDbSave->Caption.c_str(),//L"변경된 소통등급 정보를 저장하였습니다.",
  564. FTitle.c_str(), MB_OK|MB_ICONQUESTION|MB_APPLMODAL);
  565. RefreshData(); //소통정보 변경을 알리기 위해 먼저 다시 읽어 놓는다.
  566. POST_MSG(Application->MainForm->Handle, WM_DATABASE_REFRESH, WP_MSG_01, 0);
  567. Sleep(500);
  568. POST_MSG(Application->MainForm->Handle, WM_DATABASE_REFRESH, WP_MSG_06, 0); //가공서버로 보내는 메시지
  569. }
  570. }
  571. }
  572. //---------------------------------------------------------------------------
  573. void __fastcall TIDB0060M::FormCloseQuery(TObject *Sender, bool &CanClose)
  574. {
  575. SaveData();
  576. }
  577. //---------------------------------------------------------------------------