ado.h 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501
  1. //
  2. // MODULE: Ado.h
  3. //
  4. // AUTHOR: Carlos Antollini
  5. //
  6. // mailto: cantollini@hotmail.com
  7. //
  8. // Date: 03/21/2002
  9. //
  10. // Version 2.01
  11. //
  12. #ifndef _ADO_H_
  13. #define _ADO_H_
  14. #if _MSC_VER >= 1000
  15. #pragma once
  16. #endif // _MSC_VER >= 1000
  17. #include <afx.h>
  18. #include <afxdisp.h>
  19. #include <math.h>
  20. //#pragma warning (disable: 4146)
  21. //#pragma warning (default: 4146)
  22. // CG : In order to use this code against a different version of ADO, the appropriate
  23. // ADO library needs to be used in the #import statement
  24. #import "C:\Program Files\Common Files\System\ADO\msado15.dll" rename_namespace("ADOCG") rename("EOF", "EndOfFile")
  25. using namespace ADOCG;
  26. //#import "C:\Program Files\Common Files\System\ADO\msado15.dll" no_namespace rename("EOF", "adoEOF")
  27. #include "icrsint.h"
  28. class CADOCommand;
  29. struct CADOFieldInfo
  30. {
  31. char m_strName[30];
  32. short m_nType;
  33. long m_lSize;
  34. long m_lDefinedSize;
  35. long m_lAttributes;
  36. short m_nOrdinalPosition;
  37. BOOL m_bRequired;
  38. BOOL m_bAllowZeroLength;
  39. long m_lCollatingOrder;
  40. };
  41. class CADODatabase
  42. {
  43. public:
  44. BOOL Execute(LPCTSTR lpstrExec);
  45. CADODatabase()
  46. {
  47. ::CoInitialize(NULL);
  48. m_pConnection = NULL;
  49. m_strConnection = _T("");
  50. m_strLastError = _T("");
  51. m_dwLastError = 0;
  52. m_pConnection.CreateInstance(__uuidof(Connection));
  53. }
  54. ~CADODatabase()
  55. {
  56. Close();
  57. m_pConnection.Release();
  58. m_pConnection = NULL;
  59. m_strConnection = _T("");
  60. m_strLastError = _T("");
  61. m_dwLastError = 0;
  62. ::CoUninitialize();
  63. }
  64. BOOL Open(LPCTSTR lpstrConnection = _T(""), LPCTSTR lpstrUserID = _T(""), LPCTSTR lpstrPassword = _T(""));
  65. _ConnectionPtr GetActiveConnection()
  66. {return m_pConnection;};
  67. DWORD GetRecordCount(_RecordsetPtr m_pRs);
  68. long BeginTransaction()
  69. {return m_pConnection->BeginTrans();};
  70. long CommitTransaction()
  71. {return m_pConnection->CommitTrans();};
  72. long RollbackTransaction()
  73. {return m_pConnection->RollbackTrans();};
  74. BOOL IsOpen();
  75. void Close();
  76. void SetConnectionString(LPCTSTR lpstrConnection)
  77. {m_strConnection = lpstrConnection;};
  78. CString GetConnectionString()
  79. {return m_strConnection;};
  80. CString GetLastErrorString()
  81. {return m_strLastError;};
  82. DWORD GetLastError()
  83. {return m_dwLastError;};
  84. protected:
  85. void dump_com_error(_com_error &e);
  86. public:
  87. _ConnectionPtr m_pConnection;
  88. protected:
  89. CString m_strConnection;
  90. CString m_strLastError;
  91. DWORD m_dwLastError;
  92. };
  93. class CADORecordset
  94. {
  95. public:
  96. BOOL Clone(CADORecordset& pRs);
  97. enum cadoOpenEnum
  98. {
  99. openUnknown = 0,
  100. openQuery = 1,
  101. openTable = 2,
  102. openStoredProc = 3,
  103. openCmdText = 4
  104. };
  105. enum cadoEditEnum
  106. {
  107. dbEditNone = 0,
  108. dbEditNew = 1,
  109. dbEdit = 2
  110. };
  111. enum cadoPositionEnum
  112. {
  113. positionUnknown = -1,
  114. positionBOF = -2,
  115. positionEOF = -3
  116. };
  117. enum cadoSearchEnum
  118. {
  119. searchForward = 1,
  120. searchBackward = -1
  121. };
  122. enum cadoDataType
  123. {
  124. typeEmpty = adEmpty,
  125. typeTinyInt = adTinyInt,
  126. typeSmallInt = adSmallInt,
  127. typeInteger = adInteger,
  128. typeBigInt = adBigInt,
  129. typeUnsignedTinyInt = adUnsignedTinyInt,
  130. typeUnsignedSmallInt = adUnsignedSmallInt,
  131. typeUnsignedInt = adUnsignedInt,
  132. typeUnsignedBigInt = adUnsignedBigInt,
  133. typeSingle = adSingle,
  134. typeDouble = adDouble,
  135. typeCurrency = adCurrency,
  136. typeDecimal = adDecimal,
  137. typeNumeric = adNumeric,
  138. typeBoolean = adBoolean,
  139. typeError = adError,
  140. typeUserDefined = adUserDefined,
  141. typeVariant = adVariant,
  142. typeIDispatch = adIDispatch,
  143. typeIUnknown = adIUnknown,
  144. typeGUID = adGUID,
  145. typeDate = adDate,
  146. typeDBDate = adDBDate,
  147. typeDBTime = adDBTime,
  148. typeDBTimeStamp = adDBTimeStamp,
  149. typeBSTR = adBSTR,
  150. typeChar = adChar,
  151. typeVarChar = adVarChar,
  152. typeLongVarChar = adLongVarChar,
  153. typeWChar = adWChar,
  154. typeVarWChar = adVarWChar,
  155. typeLongVarWChar = adLongVarWChar,
  156. typeBinary = adBinary,
  157. typeVarBinary = adVarBinary,
  158. typeLongVarBinary = adLongVarBinary,
  159. typeChapter = adChapter,
  160. typeFileTime = adFileTime,
  161. typePropVariant = adPropVariant,
  162. typeVarNumeric = adVarNumeric,
  163. typeArray = adVariant
  164. };
  165. BOOL SetFieldValue(int nIndex, int nValue);
  166. BOOL SetFieldValue(LPCTSTR lpFieldName, int nValue);
  167. BOOL SetFieldValue(int nIndex, long lValue);
  168. BOOL SetFieldValue(LPCTSTR lpFieldName, long lValue);
  169. BOOL SetFieldValue(int nIndex, unsigned long lValue);
  170. BOOL SetFieldValue(LPCTSTR lpFieldName, unsigned long lValue);
  171. BOOL SetFieldValue(int nIndex, double dblValue);
  172. BOOL SetFieldValue(LPCTSTR lpFieldName, double dblValue);
  173. BOOL SetFieldValue(int nIndex, CString strValue);
  174. BOOL SetFieldValue(LPCTSTR lpFieldName, CString strValue);
  175. BOOL SetFieldValue(int nIndex, COleDateTime time);
  176. BOOL SetFieldValue(LPCTSTR lpFieldName, COleDateTime time);
  177. BOOL SetFieldValue(int nIndex, bool bValue);
  178. BOOL SetFieldValue(LPCTSTR lpFieldName, bool bValue);
  179. BOOL SetFieldValue(int nIndex, COleCurrency cyValue);
  180. BOOL SetFieldValue(LPCTSTR lpFieldName, COleCurrency cyValue);
  181. BOOL SetFieldValue(int nIndex, _variant_t vtValue);
  182. BOOL SetFieldValue(LPCTSTR lpFieldName, _variant_t vtValue);
  183. BOOL SetFieldEmpty(int nIndex);
  184. BOOL SetFieldEmpty(LPCTSTR lpFieldName);
  185. void CancelUpdate();
  186. BOOL Update();
  187. void Edit();
  188. BOOL AddNew();
  189. BOOL AddNew(CADORecordBinding &pAdoRecordBinding);
  190. BOOL Find(LPCTSTR lpFind, int nSearchDirection = CADORecordset::searchForward);
  191. BOOL FindFirst(LPCTSTR lpFind);
  192. BOOL FindNext();
  193. CADORecordset()
  194. {
  195. m_pRecordset = NULL;
  196. m_pCmd = NULL;
  197. m_strQuery = _T("");
  198. m_strLastError = _T("");
  199. m_dwLastError = 0;
  200. m_pRecBinding = NULL;
  201. m_pRecordset.CreateInstance(__uuidof(Recordset));
  202. m_pCmd.CreateInstance(__uuidof(Command));
  203. m_nEditStatus = CADORecordset::dbEditNone;
  204. m_nSearchDirection = CADORecordset::searchForward;
  205. }
  206. CADORecordset(CADODatabase* pAdoDatabase);
  207. ~CADORecordset()
  208. {
  209. Close();
  210. if(m_pRecordset)
  211. m_pRecordset.Release();
  212. if(m_pCmd)
  213. m_pCmd.Release();
  214. m_pRecordset = NULL;
  215. m_pCmd = NULL;
  216. m_pRecBinding = NULL;
  217. m_strQuery = _T("");
  218. m_strLastError = _T("");
  219. m_dwLastError = 0;
  220. m_nEditStatus = dbEditNone;
  221. }
  222. CString GetQuery()
  223. {return m_strQuery;};
  224. void SetQuery(LPCSTR strQuery)
  225. {m_strQuery = strQuery;};
  226. BOOL RecordBinding(CADORecordBinding &pAdoRecordBinding);
  227. DWORD GetRecordCount();
  228. BOOL IsOpen();
  229. void Close();
  230. BOOL Open(_ConnectionPtr mpdb, LPCTSTR lpstrExec = _T(""), int nOption = CADORecordset::openUnknown);
  231. BOOL Open(LPCTSTR lpstrExec = _T(""), int nOption = CADORecordset::openUnknown);
  232. long GetFieldCount()
  233. {return m_pRecordset->Fields->GetCount();};
  234. BOOL GetFieldValue(LPCTSTR lpFieldName, int& nValue);
  235. BOOL GetFieldValue(int nIndex, int& nValue);
  236. BOOL GetFieldValue(LPCTSTR lpFieldName, long& lValue);
  237. BOOL GetFieldValue(int nIndex, long& lValue);
  238. BOOL GetFieldValue(LPCTSTR lpFieldName, unsigned long& ulValue);
  239. BOOL GetFieldValue(int nIndex, unsigned long& ulValue);
  240. BOOL GetFieldValue(LPCTSTR lpFieldName, double& dbValue);
  241. BOOL GetFieldValue(int nIndex, double& dbValue);
  242. BOOL GetFieldValue(LPCTSTR lpFieldName, CString& strValue, CString strDateFormat = _T(""));
  243. BOOL GetFieldValue(int nIndex, CString& strValue, CString strDateFormat = _T(""));
  244. BOOL GetFieldValue(LPCTSTR lpFieldName, COleDateTime& time);
  245. BOOL GetFieldValue(int nIndex, COleDateTime& time);
  246. BOOL GetFieldValue(int nIndex, bool& bValue);
  247. BOOL GetFieldValue(LPCTSTR lpFieldName, bool& bValue);
  248. BOOL GetFieldValue(int nIndex, COleCurrency& cyValue);
  249. BOOL GetFieldValue(LPCTSTR lpFieldName, COleCurrency& cyValue);
  250. BOOL GetFieldValue(int nIndex, _variant_t& vtValue);
  251. BOOL GetFieldValue(LPCTSTR lpFieldName, _variant_t& vtValue);
  252. BOOL IsFieldNull(LPCTSTR lpFieldName);
  253. BOOL IsFieldNull(int nIndex);
  254. BOOL IsFieldEmpty(LPCTSTR lpFieldName);
  255. BOOL IsFieldEmpty(int nIndex);
  256. BOOL IsEof()
  257. {return m_pRecordset->EndOfFile == VARIANT_TRUE;};
  258. BOOL IsEOF()
  259. {return m_pRecordset->EndOfFile == VARIANT_TRUE;};
  260. BOOL IsBof()
  261. {return m_pRecordset->BOF == VARIANT_TRUE;};
  262. BOOL IsBOF()
  263. {return m_pRecordset->BOF == VARIANT_TRUE;};
  264. void MoveFirst()
  265. {m_pRecordset->MoveFirst();};
  266. void MoveNext()
  267. {m_pRecordset->MoveNext();};
  268. void MovePrevious()
  269. {m_pRecordset->MovePrevious();};
  270. void MoveLast()
  271. {m_pRecordset->MoveLast();};
  272. long GetAbsolutePage()
  273. {return m_pRecordset->GetAbsolutePage();};
  274. void SetAbsolutePage(int nPage)
  275. {m_pRecordset->PutAbsolutePage((enum PositionEnum)nPage);};
  276. long GetPageCount()
  277. {return m_pRecordset->GetPageCount();};
  278. long GetPageSize()
  279. {return m_pRecordset->GetPageSize();};
  280. void SetPageSize(int nSize)
  281. {m_pRecordset->PutPageSize(nSize);};
  282. long GetAbsolutePosition()
  283. {return m_pRecordset->GetAbsolutePosition();};
  284. void SetAbsolutePosition(int nPosition)
  285. {m_pRecordset->PutAbsolutePosition((enum PositionEnum)nPosition);};
  286. void Move(ADO_LONGPTR NumRecords)
  287. {
  288. m_pRecordset->Move(NumRecords);
  289. }
  290. BOOL GetFieldInfo(LPCTSTR lpFieldName, CADOFieldInfo* fldInfo);
  291. BOOL GetFieldInfo(int nIndex, CADOFieldInfo* fldInfo);
  292. BOOL AppendChunk(LPCTSTR lpFieldName, LPVOID lpData, UINT nBytes);
  293. BOOL AppendChunk(int nIndex, LPVOID lpData, UINT nBytes);
  294. BOOL AppendChunkFromFile(LPCTSTR lpFieldName, CHAR* strFileName);
  295. BOOL AppendChunkFromFile(int nIndex, CHAR* strFileName);
  296. LONG GetChunk(LPCTSTR lpFieldName, CString& strValue);
  297. LONG GetChunk(int nIndex, CString& strValue);
  298. LONG GetChunk(LPCTSTR lpFieldName, LPVOID pData);
  299. LONG GetChunk(int nIndex, LPVOID pData);
  300. LONG GetChunkToFile(LPCTSTR lpFieldName, CHAR* strFileName);
  301. LONG GetChunkToFile(int nIndex, CHAR* strFileName);
  302. CString GetString(LPCTSTR lpCols, LPCTSTR lpRows, LPCTSTR lpNull, long numRows = 0);
  303. CString GetLastErrorString()
  304. {return m_strLastError;};
  305. DWORD GetLastError()
  306. {return m_dwLastError;};
  307. void GetBookmark()
  308. {m_varBookmark = m_pRecordset->Bookmark;};
  309. BOOL SetBookmark();
  310. BOOL Delete();
  311. BOOL IsConnectionOpen()
  312. {return m_pConnection->GetState() != adStateClosed;};
  313. _RecordsetPtr GetRecordset()
  314. {return m_pRecordset;};
  315. _ConnectionPtr GetActiveConnection()
  316. {return m_pConnection;};
  317. BOOL SetFilter(LPCTSTR strFilter);
  318. BOOL SetSort(LPCTSTR lpstrCriteria);
  319. BOOL SaveAsXML(LPCTSTR lpstrXMLFile);
  320. BOOL OpenXML(LPCTSTR lpstrXMLFile);
  321. BOOL Execute(CADOCommand* pCommand);
  322. public:
  323. _RecordsetPtr m_pRecordset;
  324. _CommandPtr m_pCmd;
  325. protected:
  326. _ConnectionPtr m_pConnection;
  327. int m_nSearchDirection;
  328. CString m_strFind;
  329. _variant_t m_varBookFind;
  330. _variant_t m_varBookmark;
  331. int m_nEditStatus;
  332. CString m_strLastError;
  333. DWORD m_dwLastError;
  334. void dump_com_error(_com_error &e);
  335. IADORecordBinding *m_pRecBinding;
  336. CString m_strQuery;
  337. protected:
  338. BOOL PutFieldValue(LPCTSTR lpFieldName, _variant_t vtFld);
  339. BOOL PutFieldValue(_variant_t vtIndex, _variant_t vtFld);
  340. BOOL GetFieldInfo(FieldPtr pField, CADOFieldInfo* fldInfo);
  341. LONG GetChunk(FieldPtr pField, CString& strValue);
  342. LONG GetChunk(FieldPtr pField, LPVOID lpData);
  343. BOOL AppendChunk(FieldPtr pField, LPVOID lpData, UINT nBytes);
  344. private:
  345. CString IntToStr(int nVal);
  346. CString LongToStr(long lVal);
  347. CString ULongToStr(unsigned long ulVal);
  348. CString DblToStr(double dblVal, int ndigits = 20);
  349. CString DblToStr(float fltVal);
  350. };
  351. class CADOParameter
  352. {
  353. public:
  354. enum cadoParameterDirection
  355. {
  356. paramUnknown = adParamUnknown,
  357. paramInput = adParamInput,
  358. paramOutput = adParamOutput,
  359. paramInputOutput = adParamInputOutput,
  360. paramReturnValue = adParamReturnValue
  361. };
  362. CADOParameter(int nType, long lSize = 0, int nDirection = paramInput, CString strName = _T(""));
  363. ~CADOParameter()
  364. {
  365. m_pParameter.Release();
  366. m_pParameter = NULL;
  367. m_strName = _T("");
  368. }
  369. BOOL SetValue(int nValue);
  370. BOOL SetValue(long lValue);
  371. BOOL SetValue(double dbValue);
  372. BOOL SetValue(CString strValue);
  373. BOOL SetValue(COleDateTime time);
  374. BOOL SetValue(_variant_t vtValue);
  375. BOOL GetValue(int& nValue);
  376. BOOL GetValue(long& lValue);
  377. BOOL GetValue(double& dbValue);
  378. BOOL GetValue(CString& strValue, CString strDateFormat = _T(""));
  379. BOOL GetValue(COleDateTime& time);
  380. BOOL GetValue(_variant_t& vtValue);
  381. void SetName(CString strName)
  382. {m_strName = strName;};
  383. CString GetName()
  384. {return m_strName;};
  385. int GetType()
  386. {return m_nType;};
  387. _ParameterPtr GetParameter()
  388. {return m_pParameter;};
  389. protected:
  390. void dump_com_error(_com_error &e);
  391. protected:
  392. _ParameterPtr m_pParameter;
  393. CString m_strName;
  394. int m_nType;
  395. CString m_strLastError;
  396. DWORD m_dwLastError;
  397. private:
  398. CString IntToStr(int nVal);
  399. CString LongToStr(long lVal);
  400. CString ULongToStr(unsigned long ulVal);
  401. CString DblToStr(double dblVal, int ndigits = 20);
  402. CString DblToStr(float fltVal);
  403. };
  404. class CADOCommand
  405. {
  406. public:
  407. enum cadoCommandType
  408. {
  409. typeCmdText = adCmdText,
  410. typeCmdTable = adCmdTable,
  411. typeCmdTableDirect = adCmdTableDirect,
  412. typeCmdStoredProc = adCmdStoredProc,
  413. typeCmdUnknown = adCmdUnknown,
  414. typeCmdFile = adCmdFile
  415. };
  416. CADOCommand(CADODatabase* pAdoDatabase, CString strCommandText = _T(""), int nCommandType = typeCmdStoredProc);
  417. ~CADOCommand()
  418. {
  419. m_pCommand.Release();
  420. m_pCommand = NULL;
  421. m_strCommandText = _T("");
  422. }
  423. void SetText(CString strCommandText);
  424. void SetType(int nCommandType);
  425. int GetType()
  426. {return m_nCommandType;};
  427. BOOL AddParameter(CADOParameter* pAdoParameter);
  428. BOOL AddParameter(CString strName, int nType, int nDirection, long lSize, int nValue);
  429. BOOL AddParameter(CString strName, int nType, int nDirection, long lSize, long lValue);
  430. BOOL AddParameter(CString strName, int nType, int nDirection, long lSize, double dblValue);
  431. BOOL AddParameter(CString strName, int nType, int nDirection, long lSize, CString strValue);
  432. BOOL AddParameter(CString strName, int nType, int nDirection, long lSize, COleDateTime time);
  433. BOOL AddParameter(CString strName, int nType, int nDirection, long lSize, _variant_t vtValue);
  434. CString GetText()
  435. {return m_strCommandText;};
  436. _CommandPtr GetCommand()
  437. {return m_pCommand;};
  438. protected:
  439. void dump_com_error(_com_error &e);
  440. protected:
  441. _CommandPtr m_pCommand;
  442. int m_nCommandType;
  443. CString m_strCommandText;
  444. CString m_strLastError;
  445. DWORD m_dwLastError;
  446. };
  447. #endif