CDSDsrcF.cpp 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520
  1. //---------------------------------------------------------------------------
  2. #pragma hdrstop
  3. #include "CDSDsrcF.h"
  4. #include "ITS_OPLibF.h"
  5. #include "CDSFcltF.h"
  6. //---------------------------------------------------------------------------
  7. #pragma package(smart_init)
  8. TItsDsrc::TItsDsrc()
  9. {
  10. }
  11. //---------------------------------------------------------------------------
  12. TItsDsrc::~TItsDsrc()
  13. {
  14. }
  15. //---------------------------------------------------------------------------
  16. //---------------------------------------------------------------------------
  17. TItsDsrcManager *ItsDsrcManager = NULL;
  18. //---------------------------------------------------------------------------
  19. /*
  20. * Dsrc Manager
  21. */
  22. TItsDsrcManager::TItsDsrcManager()
  23. {
  24. }
  25. //---------------------------------------------------------------------------
  26. TItsDsrcManager::~TItsDsrcManager()
  27. {
  28. FLists.RemoveAll();
  29. }
  30. //---------------------------------------------------------------------------
  31. bool TItsDsrcManager::LoadFromDb(TADOConnection *ADbConn/*=NULL*/)
  32. {
  33. String sQry;
  34. TADOQuery *pADO = NULL;
  35. sQry = "SELECT ID, \r\n"
  36. " RSE_ID, \r\n"
  37. " ROAD_SPOT_ID, \r\n"
  38. " LOG_CNNC_ID, \r\n"
  39. " LOG_CNNC_PW, \r\n"
  40. " ISTL_LCTN_NM, \r\n"
  41. " LCTN_X, \r\n"
  42. " LCTN_Y, \r\n"
  43. " IP, \r\n"
  44. " PORT, \r\n"
  45. " MNFC_CMPY_CD, \r\n"
  46. " DEL_YN, \r\n"
  47. " CLCT_ABNR_BASI \r\n"
  48. " FROM TB_RSE_MSTR \r\n";
  49. " WHERE DEL_YN = 'N' \r\n";
  50. try
  51. {
  52. FLists.Lock();
  53. FLists.RemoveAll();
  54. try
  55. {
  56. pADO = new TADOQuery(NULL);
  57. pADO->Close();
  58. pADO->Connection = (NULL != ADbConn) ? ADbConn : ITSDb_GetConnection();
  59. pADO->SQL->Clear();
  60. pADO->SQL->Text = sQry;
  61. pADO->Prepared = true;
  62. pADO->Open();
  63. for( ; !pADO->Eof; pADO->Next())
  64. {
  65. TItsDsrc *pObj = new TItsDsrc();
  66. pObj->CTLR_NMBR = pADO->FieldByName("ID")->AsString;
  67. pObj->CTLR_ID = pADO->FieldByName("RSE_ID")->AsString;
  68. pObj->NAME = pADO->FieldByName("ISTL_LCTN_NM")->AsString;
  69. pObj->ROAD_SPOT_ID = pADO->FieldByName("ROAD_SPOT_ID")->AsString;
  70. pObj->LOG_CNNC_ID = pADO->FieldByName("LOG_CNNC_ID")->AsString;
  71. pObj->LOG_CNNC_PW = pADO->FieldByName("LOG_CNNC_PW")->AsString;
  72. pObj->ISTL_LCTN_NM = pObj->NAME;
  73. pObj->ISTL_LCTN_ADDR = pObj->ISTL_LCTN_NM;
  74. pObj->X_CRDN = pADO->FieldByName("LCTN_X")->AsFloat;
  75. pObj->Y_CRDN = pADO->FieldByName("LCTN_Y")->AsFloat;
  76. pObj->CTLR_IP = pADO->FieldByName("IP")->AsString;
  77. pObj->CTLR_PORT = pADO->FieldByName("PORT")->AsInteger;
  78. pObj->MNFC_CMPY_CD = pADO->FieldByName("MNFC_CMPY_CD")->AsString;
  79. pObj->DEL_YN = pADO->FieldByName("DEL_YN")->AsString;
  80. pObj->CLCT_ABNR_BASI = pADO->FieldByName("CLCT_ABNR_BASI")->AsInteger;
  81. //pObj->CTLR_LOCAL_NO = pADO->FieldByName("PORT")->AsInteger;
  82. //pObj->TYPE_CD = pADO->FieldByName("CCTV_TYPE")->AsString.Trim();
  83. FLists.Push(pObj->CTLR_NMBR, pObj);
  84. pObj->Completed = true;
  85. pObj->MEM_DEL = "N";
  86. }
  87. }
  88. catch(EDatabaseError &E)
  89. {
  90. ::PostMessage(Application->MainForm->Handle, (UINT)(WM_USER+0xF4), (WPARAM)0xB2, (LPARAM)0xB2);
  91. DBERRORMSG("DSRC정보조회", String(E.ClassName()), E.Message, sQry);
  92. throw Exception(String(E.ClassName()) + E.Message);
  93. }
  94. catch(Exception &exception)
  95. {
  96. ::PostMessage(Application->MainForm->Handle, (UINT)(WM_USER+0xF4), (WPARAM)0xB2, (LPARAM)0xB2);
  97. DBERRORMSG("DSRC정보조회", String(exception.ClassName()), exception.Message, sQry);
  98. throw Exception(String(exception.ClassName()) + exception.Message);
  99. }
  100. }
  101. __finally
  102. {
  103. if (pADO)
  104. {
  105. pADO->Close();
  106. delete pADO;
  107. }
  108. FLists.UnLock();
  109. }
  110. return true;
  111. }
  112. //---------------------------------------------------------------------------
  113. bool TItsDsrcManager::LoadStatusFromDb(TADOConnection *ADbConn/*=NULL*/)
  114. {
  115. String sQry;
  116. TADOQuery *pADO = NULL;
  117. sQry = "SELECT * \r\n"
  118. " FROM TB_RSE_STTS_PNST A, TB_RSE_MSTR B \r\n"
  119. " WHERE A.ID = B.ID \r\n"
  120. " AND A.CLCT_DT >= TO_CHAR(SYSDATE-2/1440, 'YYYYMMDDHH24MISS') \r\n";
  121. FLists.Lock();
  122. try
  123. {
  124. TItsDsrc *pObj = NULL;
  125. try
  126. {
  127. pADO = new TADOQuery(NULL);
  128. pADO->Close();
  129. pADO->Connection = (NULL != ADbConn) ? ADbConn : ITSDb_GetConnection();
  130. pADO->SQL->Clear();
  131. pADO->SQL->Text = sQry;
  132. pADO->Prepared = true;
  133. pADO->Open();
  134. //int nRows = pADO->RecordCount;
  135. for( ; !pADO->Eof; pADO->Next())
  136. {
  137. String sVmsNmbr = pADO->FieldByName("ID")->AsString;
  138. pObj = FLists.Find(sVmsNmbr);
  139. if (!pObj) continue;
  140. String UPDT_DT = pADO->FieldByName("CLCT_DT")->AsString;
  141. String CONN_STTS_CD = pADO->FieldByName("CMNC_STTS")->AsString;
  142. if (CONN_STTS_CD != "0")
  143. {
  144. //통신장애
  145. continue;
  146. }
  147. #if 0
  148. pObj->STATE.Comm = vms_comm_normal;
  149. String CBOXDOOR_OPEN_STTS_CD = pADO->FieldByName("CBOX_DOOR_STTS_CD")->AsString;
  150. if (CBOXDOOR_OPEN_STTS_CD == "CDS0") pObj->STATE.DoorStatus = vms_door_close;
  151. else if (CBOXDOOR_OPEN_STTS_CD == "CDS1") pObj->STATE.DoorStatus = vms_door_open;
  152. String CBOXFAN_STTS_CD = pADO->FieldByName("FAN_STTS_CD")->AsString;
  153. if (CBOXFAN_STTS_CD == "MOS0") pObj->STATE.ModulePowerStatus = vms_module_power_on;
  154. else if (CBOXFAN_STTS_CD == "MOS1") pObj->STATE.ModulePowerStatus = vms_module_power_off;
  155. String CBOX_TMPR = pADO->FieldByName("CBOX_TMPR")->AsString;
  156. pObj->STATE.BodyTemp = CBOX_TMPR.ToIntDef(0);
  157. String CBOX_HMDT = pADO->FieldByName("BRGH_VAL")->AsString;
  158. pObj->STATE.LuminanceStatus = CBOX_HMDT.ToIntDef(0);
  159. String FAN_STTS_CD = pADO->FieldByName("FAN_STTS_CD")->AsString;
  160. if (FAN_STTS_CD == "PAS0") pObj->STATE.FanStatus = vms_fan_on;
  161. else if (FAN_STTS_CD == "PAS1") pObj->STATE.FanStatus = vms_fan_off;
  162. String HETR_STTS_CD = pADO->FieldByName("HETR_STTS_CD")->AsString;
  163. if (HETR_STTS_CD == "HTS0") pObj->STATE.HeaterStatus = vms_heater_on;
  164. else if (HETR_STTS_CD == "HTS1") pObj->STATE.HeaterStatus = vms_heater_off;
  165. String COMM_STTS_CD = pADO->FieldByName("COMM_STTS_CD")->AsString;
  166. if (COMM_STTS_CD == "CMS0") pObj->STATE.Wcomm = vms_wcomm_normal;
  167. else if (COMM_STTS_CD == "CMS1") pObj->STATE.Wcomm = vms_wcomm_error;
  168. #endif
  169. }
  170. }
  171. catch(EDatabaseError &E)
  172. {
  173. DBERRORMSG("TItsDsrcManager::LoadStatusFromDb", String(E.ClassName()), E.Message, sQry);
  174. throw Exception(String(E.ClassName()) + E.Message);
  175. }
  176. catch(Exception &e)
  177. {
  178. DBERRORMSG("TItsDsrcManager::LoadStatusFromDb", String(e.ClassName()), e.Message, sQry);
  179. throw Exception(String(e.ClassName()) + e.Message);
  180. }
  181. }
  182. __finally
  183. {
  184. if (pADO)
  185. {
  186. pADO->Close();
  187. delete pADO;
  188. }
  189. FLists.UnLock();
  190. }
  191. return true;
  192. }
  193. //---------------------------------------------------------------------------
  194. bool TItsDsrcManager::GetNextDsrcId(String &ANewId, TADOConnection *ADbConn/*=NULL*/)
  195. {
  196. String sQry;
  197. TADOQuery *pADO = NULL;
  198. sQry = "SELECT TO_NUMBER(CASE WHEN EXISTS (SELECT 1 FROM TB_RSE_MSTR) \r\n"
  199. " THEN (SELECT TRIM(MAX(TO_NUMBER(ID)) + 1) \r\n"
  200. " FROM TB_RSE_MSTR) \r\n"
  201. " ELSE '1' END) NEWID \r\n"
  202. " FROM DUAL \r\n";
  203. ANewId = "";
  204. try
  205. {
  206. try
  207. {
  208. pADO = new TADOQuery(NULL);
  209. pADO->Close();
  210. pADO->Connection = (NULL != ADbConn) ? ADbConn : ITSDb_GetConnection();
  211. pADO->SQL->Clear();
  212. pADO->SQL->Text = sQry;
  213. pADO->Prepared = true;
  214. pADO->Open();
  215. ANewId = pADO->FieldByName("NEWID")->AsString;
  216. return true;
  217. }
  218. catch(EDatabaseError &E)
  219. {
  220. ::PostMessage(Application->MainForm->Handle, (UINT)(WM_USER+0xF4), (WPARAM)0xB2, (LPARAM)0xB2);
  221. DBERRORMSG("DSRC 신규ID조회", String(E.ClassName()), E.Message, sQry);
  222. throw Exception(String(E.ClassName()) + E.Message);
  223. }
  224. catch(Exception &exception)
  225. {
  226. ::PostMessage(Application->MainForm->Handle, (UINT)(WM_USER+0xF4), (WPARAM)0xB2, (LPARAM)0xB2);
  227. DBERRORMSG("DSRC 신규ID조회", String(exception.ClassName()), exception.Message, sQry);
  228. throw Exception(String(exception.ClassName()) + exception.Message);
  229. }
  230. }
  231. __finally
  232. {
  233. if (pADO)
  234. {
  235. pADO->Close();
  236. delete pADO;
  237. }
  238. }
  239. return false;
  240. }
  241. //---------------------------------------------------------------------------
  242. bool TItsDsrcManager::DeleteDsrc(TItsDsrc *AObj, TADOConnection *ADbConn/*=NULL*/)
  243. {
  244. String sQry;
  245. TADOQuery *pADO = NULL;
  246. sQry = "UPDATE TB_RSE_MSTR \r\n"
  247. " SET DEL_YN = 'Y' \r\n"
  248. " WHERE ID = :p01 \r\n";
  249. try
  250. {
  251. FLists.Lock();
  252. try
  253. {
  254. pADO = new TADOQuery(NULL);
  255. pADO->Close();
  256. pADO->Connection = (NULL != ADbConn) ? ADbConn : ITSDb_GetConnection();
  257. pADO->SQL->Clear();
  258. pADO->SQL->Text = sQry;
  259. pADO->Parameters->ParamByName("p01")->Value = AObj->CTLR_NMBR;
  260. pADO->ExecSQL();
  261. return TCDSFcltManager::Delete(AObj->CTLR_ID);
  262. }
  263. catch(EDatabaseError &E)
  264. {
  265. ::PostMessage(Application->MainForm->Handle, (UINT)(WM_USER+0xF4), (WPARAM)0xB2, (LPARAM)0xB2);
  266. DBERRORMSG("DSRC정보삭제", String(E.ClassName()), E.Message, sQry);
  267. throw Exception(String(E.ClassName()) + E.Message);
  268. }
  269. catch(Exception &exception)
  270. {
  271. ::PostMessage(Application->MainForm->Handle, (UINT)(WM_USER+0xF4), (WPARAM)0xB2, (LPARAM)0xB2);
  272. DBERRORMSG("DSRC정보삭제", String(exception.ClassName()), exception.Message, sQry);
  273. throw Exception(String(exception.ClassName()) + exception.Message);
  274. }
  275. }
  276. __finally
  277. {
  278. if (pADO)
  279. {
  280. pADO->Close();
  281. delete pADO;
  282. }
  283. FLists.UnLock();
  284. }
  285. return true;
  286. }
  287. //---------------------------------------------------------------------------
  288. bool TItsDsrcManager::UpdateDsrc(String AOldRseId, TItsDsrc *AObj, TADOConnection *ADbConn/*=NULL*/)
  289. {
  290. String sQry;
  291. TADOQuery *pADO = NULL;
  292. sQry = "UPDATE TB_RSE_MSTR \r\n"
  293. " SET RSE_ID = :p02, \r\n"
  294. " ROAD_SPOT_ID = :p03, \r\n"
  295. " LOG_CNNC_ID = :p04, \r\n"
  296. " LOG_CNNC_PW = :p05, \r\n"
  297. " ISTL_LCTN_NM = :p06, \r\n"
  298. " LCTN_X = :p07, \r\n"
  299. " LCTN_Y = :p08, \r\n"
  300. " IP = :p09, \r\n"
  301. " PORT = :p10, \r\n"
  302. " MNFC_CMPY_CD = :p11, \r\n"
  303. " DEL_YN = :p12, \r\n"
  304. " CLCT_ABNR_BASI = :p13 \r\n"
  305. " WHERE ID = :p01 \r\n";
  306. try
  307. {
  308. FLists.Lock();
  309. try
  310. {
  311. pADO = new TADOQuery(NULL);
  312. pADO->Close();
  313. pADO->Connection = (NULL != ADbConn) ? ADbConn : ITSDb_GetConnection();
  314. pADO->SQL->Clear();
  315. pADO->SQL->Text = sQry;
  316. if (AObj->DEL_YN == "") AObj->DEL_YN = "N";
  317. pADO->Parameters->ParamByName("p01")->Value = AObj->CTLR_NMBR;
  318. pADO->Parameters->ParamByName("p02")->Value = AObj->CTLR_ID;
  319. pADO->Parameters->ParamByName("p03")->Value = AObj->ROAD_SPOT_ID;
  320. pADO->Parameters->ParamByName("p04")->Value = AObj->LOG_CNNC_ID;
  321. pADO->Parameters->ParamByName("p05")->Value = AObj->LOG_CNNC_PW;
  322. pADO->Parameters->ParamByName("p06")->Value = AObj->ISTL_LCTN_NM;
  323. pADO->Parameters->ParamByName("p07")->Value = AObj->X_CRDN;
  324. pADO->Parameters->ParamByName("p08")->Value = AObj->Y_CRDN;
  325. pADO->Parameters->ParamByName("p09")->Value = AObj->CTLR_IP;
  326. pADO->Parameters->ParamByName("p10")->Value = AObj->CTLR_PORT;
  327. pADO->Parameters->ParamByName("p11")->Value = AObj->MNFC_CMPY_CD;
  328. pADO->Parameters->ParamByName("p12")->Value = AObj->DEL_YN;
  329. pADO->Parameters->ParamByName("p13")->Value = AObj->CLCT_ABNR_BASI;
  330. pADO->ExecSQL();
  331. return TCDSFcltManager::Merge("DSRC", AObj->CTLR_ID, AObj->ISTL_LCTN_NM);
  332. }
  333. catch(EDatabaseError &E)
  334. {
  335. ::PostMessage(Application->MainForm->Handle, (UINT)(WM_USER+0xF4), (WPARAM)0xB2, (LPARAM)0xB2);
  336. DBERRORMSG("DSRC정보업데이트", String(E.ClassName()), E.Message, sQry);
  337. throw Exception(String(E.ClassName()) + E.Message);
  338. }
  339. catch(Exception &exception)
  340. {
  341. ::PostMessage(Application->MainForm->Handle, (UINT)(WM_USER+0xF4), (WPARAM)0xB2, (LPARAM)0xB2);
  342. DBERRORMSG("DSRC정보업데이트", String(exception.ClassName()), exception.Message, sQry);
  343. throw Exception(String(exception.ClassName()) + exception.Message);
  344. }
  345. }
  346. __finally
  347. {
  348. if (pADO)
  349. {
  350. pADO->Close();
  351. delete pADO;
  352. }
  353. FLists.UnLock();
  354. }
  355. return true;
  356. }
  357. //---------------------------------------------------------------------------
  358. bool TItsDsrcManager::InsertDsrc(TItsDsrc *AObj, TADOConnection *ADbConn/*=NULL*/)
  359. {
  360. String sQry;
  361. TADOQuery *pADO = NULL;
  362. sQry = "INSERT INTO TB_RSE_MSTR(ID, RSE_ID, ROAD_SPOT_ID, LOG_CNNC_ID, LOG_CNNC_PW, \r\n"
  363. " ISTL_LCTN_NM, LCTN_X, LCTN_Y, IP, PORT, \r\n"
  364. " MNFC_CMPY_CD, DEL_YN, CLCT_ABNR_BASI) \r\n"
  365. " VALUES(:p01, :p02, :p03, :p04, :p05, \r\n"
  366. " :p06, :p07, :p08, :p09, :p10, \r\n"
  367. " :p11, :p12, :p13) \r\n";
  368. try
  369. {
  370. FLists.Lock();
  371. try
  372. {
  373. pADO = new TADOQuery(NULL);
  374. pADO->Close();
  375. pADO->Connection = (NULL != ADbConn) ? ADbConn : ITSDb_GetConnection();
  376. pADO->SQL->Clear();
  377. pADO->SQL->Text = sQry;
  378. pADO->Parameters->ParamByName("p01")->Value = AObj->CTLR_NMBR;
  379. pADO->Parameters->ParamByName("p02")->Value = AObj->CTLR_ID;
  380. pADO->Parameters->ParamByName("p03")->Value = AObj->ROAD_SPOT_ID;
  381. pADO->Parameters->ParamByName("p04")->Value = AObj->LOG_CNNC_ID;
  382. pADO->Parameters->ParamByName("p05")->Value = AObj->LOG_CNNC_PW;
  383. pADO->Parameters->ParamByName("p06")->Value = AObj->ISTL_LCTN_NM;
  384. pADO->Parameters->ParamByName("p07")->Value = AObj->X_CRDN;
  385. pADO->Parameters->ParamByName("p08")->Value = AObj->Y_CRDN;
  386. pADO->Parameters->ParamByName("p09")->Value = AObj->CTLR_IP;
  387. pADO->Parameters->ParamByName("p10")->Value = AObj->CTLR_PORT;
  388. pADO->Parameters->ParamByName("p11")->Value = AObj->MNFC_CMPY_CD;
  389. pADO->Parameters->ParamByName("p12")->Value = AObj->DEL_YN;
  390. pADO->Parameters->ParamByName("p13")->Value = AObj->CLCT_ABNR_BASI;
  391. pADO->ExecSQL();
  392. return TCDSFcltManager::Merge("DSRC", AObj->CTLR_ID, AObj->ISTL_LCTN_NM);
  393. }
  394. catch(EDatabaseError &E)
  395. {
  396. ::PostMessage(Application->MainForm->Handle, (UINT)(WM_USER+0xF4), (WPARAM)0xB2, (LPARAM)0xB2);
  397. DBERRORMSG("DSRC정보입력", String(E.ClassName()), E.Message, sQry);
  398. throw Exception(String(E.ClassName()) + E.Message);
  399. }
  400. catch(Exception &exception)
  401. {
  402. ::PostMessage(Application->MainForm->Handle, (UINT)(WM_USER+0xF4), (WPARAM)0xB2, (LPARAM)0xB2);
  403. DBERRORMSG("DSRC정보입력", String(exception.ClassName()), exception.Message, sQry);
  404. throw Exception(String(exception.ClassName()) + exception.Message);
  405. }
  406. }
  407. __finally
  408. {
  409. if (pADO)
  410. {
  411. pADO->Close();
  412. delete pADO;
  413. }
  414. FLists.UnLock();
  415. }
  416. return true;
  417. }
  418. //---------------------------------------------------------------------------
  419. bool TItsDsrcManager::UpdateClctAbnrBasi(int AClctAbnrBasi, TADOConnection *ADbConn/*=NULL*/)
  420. {
  421. String sQry;
  422. TADOQuery *pADO = NULL;
  423. sQry = "UPDATE TB_RSE_MSTR \r\n"
  424. " SET CLCT_ABNR_BASI = :p01 \r\n";
  425. try
  426. {
  427. FLists.Lock();
  428. try
  429. {
  430. pADO = new TADOQuery(NULL);
  431. pADO->Close();
  432. pADO->Connection = (NULL != ADbConn) ? ADbConn : ITSDb_GetConnection();
  433. pADO->SQL->Clear();
  434. pADO->SQL->Text = sQry;
  435. pADO->Parameters->ParamByName("p01")->Value = AClctAbnrBasi;
  436. pADO->ExecSQL();
  437. FOR_STL(TItsDsrc*, pObj, FLists)
  438. {
  439. if (pObj->DEL_YN == "Y") continue;
  440. pObj->CLCT_ABNR_BASI = AClctAbnrBasi;
  441. }
  442. return true;
  443. }
  444. catch(EDatabaseError &E)
  445. {
  446. ::PostMessage(Application->MainForm->Handle, (UINT)(WM_USER+0xF4), (WPARAM)0xB2, (LPARAM)0xB2);
  447. DBERRORMSG("DSRC수집정보업데이트", String(E.ClassName()), E.Message, sQry);
  448. throw Exception(String(E.ClassName()) + E.Message);
  449. }
  450. catch(Exception &exception)
  451. {
  452. ::PostMessage(Application->MainForm->Handle, (UINT)(WM_USER+0xF4), (WPARAM)0xB2, (LPARAM)0xB2);
  453. DBERRORMSG("DSRC수집정보업데이트", String(exception.ClassName()), exception.Message, sQry);
  454. throw Exception(String(exception.ClassName()) + exception.Message);
  455. }
  456. }
  457. __finally
  458. {
  459. if (pADO)
  460. {
  461. pADO->Close();
  462. delete pADO;
  463. }
  464. FLists.UnLock();
  465. }
  466. return true;
  467. }
  468. //---------------------------------------------------------------------------