CDSDsrcF.cpp 19 KB

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