ado.h 13 KB

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