DMAdoDbF.cpp 9.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375
  1. //---------------------------------------------------------------------------
  2. #include <vcl.h>
  3. #pragma hdrstop
  4. #include "DMAdoDbF.h"
  5. #include "VMSCommLibF.h"
  6. //---------------------------------------------------------------------------
  7. #pragma package(smart_init)
  8. #pragma resource "*.dfm"
  9. //TDMAdoDb *DMAdoDb = NULL;
  10. //---------------------------------------------------------------------------
  11. __fastcall TDMAdoDb::TDMAdoDb(TComponent* Owner)
  12. : TDataModule(Owner)
  13. {
  14. FConnString = "";
  15. }
  16. //---------------------------------------------------------------------------
  17. void __fastcall TDMAdoDb::DataModuleCreate(TObject *Sender)
  18. {
  19. //
  20. }
  21. //---------------------------------------------------------------------------
  22. void __fastcall TDMAdoDb::DataModuleDestroy(TObject *Sender)
  23. {
  24. //
  25. }
  26. //---------------------------------------------------------------------------
  27. void __fastcall TDMAdoDb::SetErrorString(AnsiString AErrorString)
  28. {
  29. FErrorString = AErrorString;
  30. MERROR(AnsiString("DCOM " + FErrorString).c_str());
  31. Close();
  32. }
  33. //---------------------------------------------------------------------------
  34. void __fastcall TDMAdoDb::SetConnectString(String AProvider, String AServerName, String AUserName, String APassword, String ACatalog/*=""*/)
  35. {
  36. FConnString = "";
  37. FConnString += "Provider=" + AProvider;
  38. FConnString += ";Password=" + APassword;
  39. FConnString += ";Persist Security Info=True";
  40. FConnString += ";User ID=" + AUserName;
  41. if (ACatalog != "")
  42. {
  43. FConnString += ";Initial Catalog=" + ACatalog;
  44. }
  45. FConnString += ";Data Source=" + AServerName;
  46. }
  47. //---------------------------------------------------------------------------
  48. void __fastcall TDMAdoDb::SetConnectString(String AConnString)
  49. {
  50. FConnString = AConnString;
  51. }
  52. //---------------------------------------------------------------------------
  53. bool __fastcall TDMAdoDb::Connect(String AConnStr/*=""*/)
  54. {
  55. bool bResult = false;
  56. FConnString = (AConnStr == "") ? FConnString : AConnStr;
  57. try
  58. {
  59. Close();
  60. FDbConn = new TADOConnection(NULL);
  61. if (!FDbConn) return false;
  62. FDbConn->ConnectionTimeout = 10;
  63. FDbConn->ConnectionString = FConnString;
  64. FDbConn->KeepConnection = true;
  65. FDbConn->LoginPrompt = false;
  66. FDbConn->Open();
  67. bResult = true;
  68. }
  69. catch(EDatabaseError &E)
  70. {
  71. ErrorString = String(E.ClassName()) + E.Message;
  72. }
  73. catch (Exception &e)
  74. {
  75. ErrorString = String(e.ClassName()) + e.Message;
  76. }
  77. return bResult;
  78. }
  79. //---------------------------------------------------------------------------
  80. bool __fastcall TDMAdoDb::Close()
  81. {
  82. bool bResult = false;
  83. try
  84. {
  85. if (!FDbConn) return false;
  86. if (FDbConn->Connected)
  87. {
  88. FDbConn->Close();
  89. FDbConn->Connected = false;
  90. }
  91. delete FDbConn;
  92. FDbConn = NULL;
  93. bResult = true;
  94. }
  95. catch(EDatabaseError &E)
  96. {
  97. ErrorString = String(E.ClassName()) + E.Message;
  98. }
  99. catch (Exception &e)
  100. {
  101. ErrorString = String(e.ClassName()) + e.Message;
  102. }
  103. return bResult;
  104. }
  105. //---------------------------------------------------------------------------
  106. bool __fastcall TDMAdoDb::SQLClose(TADOQuery *adoQry)
  107. {
  108. try
  109. {
  110. if (adoQry->Active)
  111. {
  112. adoQry->Recordset->Close();
  113. adoQry->Close();
  114. adoQry->Active = false;
  115. }
  116. adoQry->SQL->Clear();
  117. return true;
  118. }
  119. catch(EDatabaseError &E)
  120. {
  121. ErrorString = String(E.ClassName()) + E.Message;
  122. }
  123. catch (Exception &e)
  124. {
  125. ErrorString = String(e.ClassName()) + e.Message;
  126. }
  127. return false;
  128. }
  129. //---------------------------------------------------------------------------
  130. int __fastcall TDMAdoDb::SQLText(TADOQuery *adoQry, String sQry)
  131. {
  132. try
  133. {
  134. adoQry->Close();
  135. adoQry->SQL->BeginUpdate();
  136. adoQry->SQL->Text = sQry;
  137. adoQry->SQL->EndUpdate();
  138. return 0;
  139. }
  140. catch(EDatabaseError &E)
  141. {
  142. ErrorString = String(E.ClassName()) + E.Message;
  143. }
  144. catch (Exception &e)
  145. {
  146. ErrorString = String(e.ClassName()) + e.Message;
  147. }
  148. return 0;
  149. }
  150. //---------------------------------------------------------------------------
  151. bool __fastcall TDMAdoDb::SQLBind(TADOQuery *adoQry, String param, String var)
  152. {
  153. try
  154. {
  155. adoQry->Parameters->ParamByName(param)->Value = var;
  156. return true;
  157. }
  158. catch(EDatabaseError &E)
  159. {
  160. ErrorString = String(E.ClassName()) + E.Message;
  161. }
  162. catch (Exception &e)
  163. {
  164. ErrorString = String(e.ClassName()) + e.Message;
  165. }
  166. return false;
  167. }
  168. //---------------------------------------------------------------------------
  169. bool __fastcall TDMAdoDb::SQLBindStream(TADOQuery *adoQry, String param, TStream * pStream)
  170. {
  171. try
  172. {
  173. adoQry->Parameters->ParamByName(param)->LoadFromStream(pStream, ftBlob);
  174. return true;
  175. }
  176. catch(EDatabaseError &E)
  177. {
  178. ErrorString = String(E.ClassName()) + E.Message;
  179. }
  180. catch (Exception &e)
  181. {
  182. ErrorString = String(e.ClassName()) + e.Message;
  183. }
  184. return false;
  185. }
  186. //---------------------------------------------------------------------------
  187. int __fastcall TDMAdoDb::SQLOpen(TADOQuery *adoQry)
  188. {
  189. try{
  190. #if 0
  191. if (0)
  192. {
  193. String sLogSql = adoQry->SQL->Text;
  194. sLogSql += "\r\n";
  195. for (int ii = 0; ii < adoQry->Parameters->Count; ii++)
  196. {
  197. sLogSql += ":" + adoQry->Parameters->Items[ii]->Name + " : " + adoQry->Parameters->Items[ii]->Value;
  198. sLogSql += "\r\n";
  199. }
  200. //LogSql(sLogSql);
  201. }
  202. #endif
  203. adoQry->Open();
  204. adoQry->First();
  205. return adoQry->RecordCount;
  206. }
  207. catch(EDatabaseError &E)
  208. {
  209. ErrorString = String(E.ClassName()) + E.Message;
  210. }
  211. catch (Exception &e)
  212. {
  213. ErrorString = String(e.ClassName()) + e.Message;
  214. }
  215. return -1;
  216. }
  217. //---------------------------------------------------------------------------
  218. int __fastcall TDMAdoDb::SQLExec(TADOQuery *adoQry)
  219. {
  220. try
  221. {
  222. #if 0
  223. if (0)
  224. {
  225. String sLogSql = adoQry->SQL->Text;
  226. sLogSql += "\r\n";
  227. for (int ii = 0; ii < adoQry->Parameters->Count; ii++)
  228. {
  229. sLogSql += ":" + adoQry->Parameters->Items[ii]->Name + " : " + adoQry->Parameters->Items[ii]->Value;
  230. sLogSql += "\r\n";
  231. }
  232. //LogSql(sLogSql);
  233. }
  234. #endif
  235. adoQry->ExecSQL();
  236. return adoQry->RowsAffected;
  237. }
  238. catch(EDatabaseError &E)
  239. {
  240. ErrorString = String(E.ClassName()) + E.Message;
  241. }
  242. catch (Exception &e)
  243. {
  244. ErrorString = String(e.ClassName()) + e.Message;
  245. }
  246. return -1;
  247. }
  248. //---------------------------------------------------------------------------
  249. bool __fastcall TDMAdoDb::SQLClear(TADOQuery *adoQry)
  250. {
  251. try
  252. {
  253. adoQry->Close();
  254. adoQry->SQL->Clear();
  255. return true;
  256. }
  257. catch(EDatabaseError &E)
  258. {
  259. ErrorString = String(E.ClassName()) + E.Message;
  260. }
  261. catch (Exception &e)
  262. {
  263. ErrorString = String(e.ClassName()) + e.Message;
  264. }
  265. return false;
  266. }
  267. //---------------------------------------------------------------------------
  268. bool __fastcall TDMAdoDb::LocateItem(TADOQuery *adoQry, String sFldNm, String sFldVal)
  269. {
  270. try
  271. {
  272. TLocateOptions Opts;
  273. Opts.Clear();
  274. Opts << loPartialKey;
  275. return adoQry->Locate(sFldNm, sFldVal, Opts);
  276. }
  277. catch(EDatabaseError &E)
  278. {
  279. ErrorString = String(E.ClassName()) + E.Message;
  280. }
  281. catch (Exception &e)
  282. {
  283. ErrorString = String(e.ClassName()) + e.Message;
  284. }
  285. return false;
  286. }
  287. //---------------------------------------------------------------------------
  288. bool __fastcall TDMAdoDb::IsDbAlive(AnsiString &ASysTime)
  289. {
  290. String sQry;
  291. TADOQuery *pADO = NULL;
  292. sQry = "SELECT TO_CHAR(SYSDATE, 'YYYYMMDDHH24MISS') AS CURTIME \r\n"
  293. " FROM DUAL \r\n";
  294. ASysTime = "";
  295. try
  296. {
  297. try
  298. {
  299. pADO = new TADOQuery(NULL);
  300. pADO->Connection = GetConnection();
  301. SQLText(pADO, sQry);
  302. SQLOpen(pADO);
  303. ASysTime = pADO->FieldByName("CURTIME")->AsString;
  304. }
  305. catch(EDatabaseError &E)
  306. {
  307. DBERROR(String(E.ClassName()), E.Message, sQry);
  308. return false;
  309. }
  310. catch(Exception &e)
  311. {
  312. DBERROR(String(e.ClassName()), e.Message, sQry);
  313. return false;
  314. }
  315. }
  316. __finally
  317. {
  318. if (pADO)
  319. {
  320. SQLClose(pADO);
  321. delete pADO; pADO = NULL;
  322. }
  323. }
  324. MINFO("DCOM <<< Check Database Alive: Ok(%s)", ASysTime.c_str());
  325. return true;
  326. }
  327. //---------------------------------------------------------------------------
  328. void __fastcall TDMAdoDb::SetDbState(bool AFlag, UINT AMsg)
  329. {
  330. if (AFlag)
  331. {
  332. SendMessage((HWND)g_AppCfg.lMainWinHandle, AMsg, dbm_status, 1);
  333. }
  334. else
  335. {
  336. SendMessage((HWND)g_AppCfg.lMainWinHandle, AMsg, dbm_status, -1);
  337. }
  338. }
  339. //---------------------------------------------------------------------------