CDSItsRoadInfoF.cpp 8.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351
  1. //---------------------------------------------------------------------------
  2. #pragma hdrstop
  3. #include "ITSDbF.h"
  4. #include "AppGlobalF.h"
  5. #include "CDSItsRoadInfoF.h"
  6. //---------------------------------------------------------------------------
  7. #if 0
  8. String REGCODE = "228";
  9. String REGNAME = "¿ëÀνÃ";
  10. #endif
  11. String REGCODE = "222";
  12. String REGNAME = "³²¾çÁÖ½Ã";
  13. #pragma package(smart_init)
  14. String __fastcall STCodeCondition::ToSQLOrString(String strField)
  15. {
  16. String strRet;
  17. int nCount = 0;
  18. if(true == bUse)
  19. {
  20. strRet += "( ";
  21. vector<String>::iterator it, itEnd = Codes.end();
  22. for(it = Codes.begin(); it != itEnd; ++it)
  23. {
  24. if(Codes.begin() != it)
  25. {
  26. strRet += " or ";
  27. }
  28. if(nCount >= 100)
  29. {
  30. strRet += " \n";
  31. nCount = 0;
  32. }
  33. strRet += strField + " = '";
  34. strRet += *it;
  35. strRet += "'";
  36. }
  37. strRet += ") ";
  38. }
  39. return strRet;
  40. }
  41. //------------------------------------------------------------------------------
  42. String __fastcall STCodeCondition::ToSQLInString(String strField)
  43. {
  44. String strRet;
  45. if(true == bUse)
  46. {
  47. if(strField.IsEmpty() == false)
  48. {
  49. strRet.sprintf(L" %s IN ( ", strField);
  50. }
  51. else
  52. {
  53. strRet = " IN ( ";
  54. }
  55. vector<String>::iterator it, itEnd = Codes.end();
  56. for(it = Codes.begin(); it != itEnd; ++it)
  57. {
  58. if(Codes.begin() != it)
  59. {
  60. strRet += ", ";
  61. }
  62. strRet += "'";
  63. strRet += *it;
  64. strRet += "'";
  65. }
  66. strRet += ") ";
  67. }
  68. return strRet;
  69. };
  70. //------------------------------------------------------------------------------
  71. TRLink::TRLink()
  72. {
  73. FShow = true;
  74. }
  75. //---------------------------------------------------------------------------
  76. void TRLink::Clear()
  77. {
  78. }
  79. //---------------------------------------------------------------------------
  80. TRLink::~TRLink()
  81. {
  82. }
  83. //---------------------------------------------------------------------------
  84. TRRoad::TRRoad()
  85. {
  86. FShow = true;
  87. }
  88. //---------------------------------------------------------------------------
  89. void TRRoad::Clear()
  90. {
  91. }
  92. //---------------------------------------------------------------------------
  93. TRRoad::~TRRoad()
  94. {
  95. }
  96. //---------------------------------------------------------------------------
  97. TRSido::TRSido()
  98. {
  99. FShow = true;
  100. }
  101. //---------------------------------------------------------------------------
  102. void TRSido::Clear()
  103. {
  104. }
  105. //---------------------------------------------------------------------------
  106. TRSido::~TRSido()
  107. {
  108. }
  109. //---------------------------------------------------------------------------
  110. //---------------------------------------------------------------------------
  111. TRLinkManager *RLinkManager = NULL;
  112. //---------------------------------------------------------------------------
  113. /*
  114. * User Manager
  115. */
  116. TRLinkManager::TRLinkManager()
  117. {
  118. FLoadLink = false;
  119. }
  120. //---------------------------------------------------------------------------
  121. TRLinkManager::~TRLinkManager()
  122. {
  123. FLists.RemoveAll();
  124. }
  125. //---------------------------------------------------------------------------
  126. bool TRLinkManager::LoadSido(TADOConnection *ADbConn/*=NULL*/)
  127. {
  128. #if 0
  129. String sQry;
  130. TADOQuery *pADO = NULL;
  131. String sSido = REGCODE;
  132. sQry = "SELECT VALUE, CODE, PCODE "
  133. " FROM CODEDEFINE "
  134. " WHERE PCODEKIND = 'CTY' "
  135. " AND CODEKIND = 'RGN' "
  136. " AND PCODE = " + sSido +
  137. " AND USEYN = 1 "
  138. " ORDER BY VALUE ";
  139. try
  140. {
  141. FLists.Lock();
  142. FLists.RemoveAll();
  143. try
  144. {
  145. pADO = new TADOQuery(NULL);
  146. pADO->Close();
  147. pADO->Connection = (NULL != ADbConn) ? ADbConn : ITSDb_GetConnection();
  148. pADO->SQL->Clear();
  149. pADO->SQL->Text = sQry;
  150. pADO->Open();
  151. for( ; !pADO->Eof; pADO->Next())
  152. {
  153. TRSido *pObj = new TRSido();
  154. pObj->LINKID = pADO->FieldByName("CODE")->AsString;
  155. pObj->NAME = pADO->FieldByName("VALUE")->AsString;
  156. FLists.Push(pObj->LINKID, pObj);
  157. }
  158. }
  159. catch(EDatabaseError &E)
  160. {
  161. throw Exception(String(E.ClassName()) + E.Message);
  162. }
  163. catch(Exception &exception)
  164. {
  165. throw Exception(String(exception.ClassName()) + exception.Message);
  166. }
  167. }
  168. __finally
  169. {
  170. if (pADO)
  171. {
  172. pADO->Close();
  173. delete pADO;
  174. }
  175. FLists.UnLock();
  176. }
  177. #else
  178. try
  179. {
  180. FLists.Lock();
  181. FLists.RemoveAll();
  182. TRSido *pObj = new TRSido();
  183. pObj->LINKID = REGCODE;
  184. pObj->NAME = REGNAME;
  185. FLists.Push(pObj->LINKID, pObj);
  186. }
  187. __finally
  188. {
  189. FLists.UnLock();
  190. }
  191. #endif
  192. return true;
  193. }
  194. //---------------------------------------------------------------------------
  195. bool TRLinkManager::LoadRoad(TADOConnection *ADbConn/*=NULL*/)
  196. {
  197. String sQry;
  198. TADOQuery *pADO = NULL;
  199. String sSido = "8";
  200. sQry = "SELECT SUBSTR(A.LINK_ID, 1, 3) AS LINKID, \r\n"
  201. " A.ROAD_NAME AS ROADNAME \r\n"
  202. " FROM TB_LINK A \r\n"
  203. " WHERE SUBSTR(A.LINK_ID, 1, 3) = '" + REGCODE + "' \r\n"
  204. " GROUP BY SUBSTR(A.LINK_ID, 1, 3), ROAD_NAME \r\n";
  205. TRSido *pSido;
  206. try
  207. {
  208. try
  209. {
  210. pADO = new TADOQuery(NULL);
  211. pADO->Close();
  212. pADO->Connection = (NULL != ADbConn) ? ADbConn : ITSDb_GetConnection();
  213. pADO->SQL->Clear();
  214. pADO->SQL->Text = sQry;
  215. pADO->Open();
  216. for( ; !pADO->Eof; pADO->Next())
  217. {
  218. String sLinkId = pADO->FieldByName("LINKID")->AsString;
  219. pSido = FLists.Find(sLinkId);
  220. if (!pSido) continue;
  221. TRRoad *pObj = new TRRoad();
  222. pObj->LINKID = sLinkId;
  223. pObj->NAME = pADO->FieldByName("ROADNAME")->AsString;
  224. pSido->FRoads.Push(pObj->NAME, pObj);
  225. }
  226. }
  227. catch(EDatabaseError &E)
  228. {
  229. throw Exception(String(E.ClassName()) + E.Message);
  230. }
  231. catch(Exception &exception)
  232. {
  233. throw Exception(String(exception.ClassName()) + exception.Message);
  234. }
  235. }
  236. __finally
  237. {
  238. if (pADO)
  239. {
  240. pADO->Close();
  241. delete pADO;
  242. }
  243. }
  244. return true;
  245. }
  246. //---------------------------------------------------------------------------
  247. bool TRLinkManager::LoadLink(TADOConnection *ADbConn/*=NULL*/)
  248. {
  249. if (FLoadLink) return true;
  250. String sQry;
  251. TADOQuery *pADO = NULL;
  252. String sSido = REGCODE;
  253. sQry = "SELECT SUBSTR(A.LINK_ID, 1, 3) AS SIDOID, \r\n"
  254. " A.ROAD_NAME AS ROADNAME, A.LINK_ID AS LINKID, \r\n"
  255. " C.NODE_NAME AS STNODENAME, \r\n"
  256. " D.NODE_NAME AS EDNODENAME \r\n"
  257. " FROM TB_LINK A, \r\n"
  258. " TB_NODE C, TB_NODE D \r\n"
  259. " WHERE SUBSTR(A.LINK_ID, 1, 3) = '" + REGCODE + "' \r\n"
  260. " AND A.F_NODE = C.NODE_ID \r\n"
  261. " AND A.T_NODE = D.NODE_ID \r\n"
  262. " ORDER BY A.ROAD_NAME, A.LINK_ID \r\n";
  263. TRSido *pSido;
  264. TRRoad *pRoad;
  265. try
  266. {
  267. try
  268. {
  269. pADO = new TADOQuery(NULL);
  270. pADO->Close();
  271. pADO->Connection = (NULL != ADbConn) ? ADbConn : ITSDb_GetConnection();
  272. pADO->SQL->Clear();
  273. pADO->SQL->Text = sQry;
  274. pADO->Open();
  275. for( ; !pADO->Eof; pADO->Next())
  276. {
  277. String sSidoId = pADO->FieldByName("SIDOID")->AsString;
  278. pSido = FLists.Find(sSidoId);
  279. if (!pSido) continue;
  280. String sRoadName = pADO->FieldByName("ROADNAME")->AsString;
  281. pRoad = pSido->FRoads.Find(sRoadName);
  282. if (!pRoad) continue;
  283. TRLink *pObj = new TRLink();
  284. pObj->LINKID = pADO->FieldByName("LINKID")->AsString;
  285. pObj->STNODENAME = pADO->FieldByName("STNODENAME")->AsString;
  286. pObj->EDNODENAME = pADO->FieldByName("EDNODENAME")->AsString;
  287. pRoad->FLinks.Push(pObj->LINKID, pObj);
  288. }
  289. }
  290. catch(EDatabaseError &E)
  291. {
  292. throw Exception(String(E.ClassName()) + E.Message);
  293. }
  294. catch(Exception &exception)
  295. {
  296. throw Exception(String(exception.ClassName()) + exception.Message);
  297. }
  298. }
  299. __finally
  300. {
  301. if (pADO)
  302. {
  303. pADO->Close();
  304. delete pADO;
  305. }
  306. }
  307. FLoadLink = true;
  308. return true;
  309. }
  310. //---------------------------------------------------------------------------