XTPCalendarDatabaseDataProvider.h
上传用户:szled88
上传日期:2015-04-09
资源大小:43957k
文件大小:18k
源码类别:

对话框与窗口

开发平台:

Visual C++

  1. // XTPCalendarDatabaseDataProvider.h: interface for
  2. //                          the CXTPCalendarDatabaseDataProvider class.
  3. //
  4. // This file is a part of the XTREME CALENDAR MFC class library.
  5. // (c)1998-2008 Codejock Software, All Rights Reserved.
  6. //
  7. // THIS SOURCE FILE IS THE PROPERTY OF CODEJOCK SOFTWARE AND IS NOT TO BE
  8. // RE-DISTRIBUTED BY ANY MEANS WHATSOEVER WITHOUT THE EXPRESSED WRITTEN
  9. // CONSENT OF CODEJOCK SOFTWARE.
  10. //
  11. // THIS SOURCE CODE CAN ONLY BE USED UNDER THE TERMS AND CONDITIONS OUTLINED
  12. // IN THE XTREME TOOLKIT PRO LICENSE AGREEMENT. CODEJOCK SOFTWARE GRANTS TO
  13. // YOU (ONE SOFTWARE DEVELOPER) THE LIMITED RIGHT TO USE THIS SOFTWARE ON A
  14. // SINGLE COMPUTER.
  15. //
  16. // CONTACT INFORMATION:
  17. // support@codejock.com
  18. // http://www.codejock.com
  19. //
  20. /////////////////////////////////////////////////////////////////////////////
  21. //{{AFX_CODEJOCK_PRIVATE
  22. #if !defined(_XTPCALENDARDATABASEDATAPROVIDER_H__)
  23. #define _XTPCALENDARDATABASEDATAPROVIDER_H__
  24. //}}AFX_CODEJOCK_PRIVATE
  25. #if _MSC_VER > 1000
  26. #pragma once
  27. #endif // _MSC_VER > 1000
  28. #include "XTPCalendarData.h"
  29. #include "XTPCalendarEvents.h"
  30. #include "XTPCalendarEvent.h"
  31. #include "XTPCalendarRecurrencePattern.h"
  32. #include "XTPCalendarMemoryDataProvider.h"
  33. #include "XTPCalendarDefines.h"
  34. #include "XTPCalendarADO.h"
  35. class CXTPCalendarSchedule;
  36. class CXTPCalendarSchedules;
  37. //===========================================================================
  38. // Summary:
  39. //     This class is the implementation of the XTPCalendarData abstract
  40. //     class which represents the data portion of the Calendar control.
  41. // Remarks:
  42. //     This implementation uses MS Access database as the data source.
  43. //     The Data source stores all Events data and provides a way to retrieve
  44. //     and save CXTPCalendarEvent objects.
  45. //
  46. //          To use CXTPCalendarDatabaseDataProvider first construct an instance
  47. //          of CXTPCalendarDatabaseDataProvider object then use Open() member function
  48. //          to establish connection to the data source and initialize the object.
  49. //          Class provides a number of functions to manipulate events and events
  50. //          related data. After finished working with the data source must call
  51. //          the Close() member function to close the connection and to de-initialize
  52. //          the object and free any unused resources.
  53. // See Also: CXTPCalendarData, CXTPCalendarMemoryDataProvider
  54. //===========================================================================
  55. class _XTP_EXT_CLASS CXTPCalendarDatabaseDataProvider : public CXTPCalendarData
  56. {
  57. //{{AFX_CODEJOCK_PRIVATE
  58. class CADOCommand;
  59. DECLARE_DYNAMIC(CXTPCalendarDatabaseDataProvider)
  60. //}}AFX_CODEJOCK_PRIVATE
  61. public:
  62. //-----------------------------------------------------------------------
  63. // Summary:
  64. //     Default constructor.
  65. // Remarks:
  66. //     Constructs a Data object. To establish a connection to a
  67. //     specified data source and initialize the object the
  68. //     Open() member function must be called immediately after
  69. //     construction.
  70. // See Also: Open()
  71. //-----------------------------------------------------------------------
  72. CXTPCalendarDatabaseDataProvider();
  73. //-----------------------------------------------------------------------
  74. // Summary:
  75. //     Default Destructor.
  76. // Remarks:
  77. //     Handles all deallocation.
  78. //-----------------------------------------------------------------------
  79. virtual ~CXTPCalendarDatabaseDataProvider();
  80. //-----------------------------------------------------------------------
  81. // Summary:
  82. //     Call this member function to initialize a newly constructed
  83. //     Data object.
  84. // Remarks:
  85. //     Data object must be created before you call Open.
  86. // Returns:
  87. //     TRUE is successful. FALSE otherwise.
  88. //-----------------------------------------------------------------------
  89. virtual BOOL Open();
  90. //-----------------------------------------------------------------------
  91. // Summary:
  92. //     Call this member function to initialize data provider using existing
  93. //     ADO Connection object.
  94. // Parameters:
  95. //     pdispADOConnection - [in] An IDispatch interface of ADO Connection.
  96. // Remarks:
  97. //     Set Connection String as "Provider=ADO;" (or "Provider=Access;")
  98. //     Connection object must be opened before pass to OpenEx.
  99. //     Also calendar data provider do not close ADO Connection on Close method.
  100. //     You have to close it yourself.
  101. // Returns:
  102. //     TRUE is successful. FALSE otherwise.
  103. //-----------------------------------------------------------------------
  104. virtual BOOL OpenEx(LPDISPATCH pdispADOConnection);
  105. //-----------------------------------------------------------------------
  106. // Summary:
  107. //     Call this member function to create an empty database.
  108. // Remarks:
  109. //     A database is created with the necessary tables structure.
  110. //     It is opened by default.
  111. // Returns:
  112. //     TRUE is successful. FALSE otherwise.
  113. //-----------------------------------------------------------------------
  114. virtual BOOL Create();
  115. //-----------------------------------------------------------------------
  116. // Summary:
  117. //     This method saves data to the database.
  118. // Remarks:
  119. //     Actually, this method just always returns TRUE for the
  120. //     database data provider. The reason is that database data provider
  121. //     always keep consistency of its data and could be closed without
  122. //     saving. The database file would contain the most recent data.
  123. // Returns:
  124. //     TRUE is successful. FALSE otherwise.
  125. //-----------------------------------------------------------------------
  126. virtual BOOL Save();
  127. //-----------------------------------------------------------------------
  128. // Summary:
  129. //     Call this member function to close the connection to a data source.
  130. //-----------------------------------------------------------------------
  131. virtual void Close();
  132. protected:
  133. //-----------------------------------------------------------------------
  134. // Summary:
  135. //     Retrieve day events for a specified day.
  136. // Parameters:
  137. //     dtDay - A specified day.
  138. // Remarks:
  139. //     This method creates and executes a database query on order to
  140. //     retrieve all appointments for a specified day.
  141. // Returns:
  142. //     A collection of events for a specified day.
  143. //-----------------------------------------------------------------------
  144. virtual CXTPCalendarEventsPtr DoRetrieveDayEvents(COleDateTime dtDay);
  145. //-----------------------------------------------------------------------
  146. // Summary:
  147. //     Remove all events from the database.
  148. // Remarks:
  149. //     This method creates and executes a database query which
  150. //     removes all appointments from the database.
  151. //-----------------------------------------------------------------------
  152. virtual void DoRemoveAllEvents();
  153. //-----------------------------------------------------------------------
  154. // Summary:
  155. //     Read event from the database.
  156. // Parameters:
  157. //     dwEventID - Event ID of the read target.
  158. // Remarks:
  159. //     This method creates and executes a database query which
  160. //     retrieves all data for a specified event.
  161. // Returns:
  162. //     A pointer to the new CXTPCalendarEvent object which fields
  163. //     contains a data from the database.
  164. //-----------------------------------------------------------------------
  165. virtual CXTPCalendarEventPtr DoRead_Event(DWORD dwEventID);
  166. //-----------------------------------------------------------------------
  167. // Summary:
  168. //     Read recurrence pattern from the database
  169. // Parameters:
  170. //     dwPatternID - Pattern ID of the read target.
  171. // Remarks:
  172. //     This method creates and executes a database query which
  173. //     retrieves all data for a specified recurrence pattern.
  174. // Returns:
  175. //     A pointer to the created CXTPCalendarRecurrencePattern object.
  176. //-----------------------------------------------------------------------
  177. virtual CXTPCalendarRecurrencePatternPtr DoRead_RPattern(DWORD dwPatternID);
  178. //-----------------------------------------------------------------------
  179. // Summary:
  180. //     Creates a new event in the database
  181. // Parameters:
  182. //     pEvent - Pointer to the CXTPCalendarEvent object which describes
  183. //              all data fields of a newly created record.
  184. //     rdwNewEventID - [out] EventID of a newly created record,
  185. //                     it is an auto-generated numeric events table key.
  186. // Remarks:
  187. //     This method creates and executes a database query which
  188. //     adds a new record to the events table.
  189. // Returns:
  190. //     TRUE if event created successfully,
  191. //     FALSE in case of any error during the process.
  192. //-----------------------------------------------------------------------
  193. virtual BOOL DoCreate_Event(CXTPCalendarEvent* pEvent, DWORD& rdwNewEventID);
  194. //-----------------------------------------------------------------------
  195. // Summary:
  196. //     Updates event properties in the database.
  197. // Parameters:
  198. //     pEvent - Pointer to the CXTPCalendarEvent object which describes
  199. //              all data fields of an event.
  200. // Remarks:
  201. //     This method creates and executes a database query which updates
  202. //     a corresponding database record with properties from the specified
  203. //     event.
  204. // Returns:
  205. //     TRUE if an event updated successfully,
  206. //     FALSE in case of any errors during the process.
  207. //-----------------------------------------------------------------------
  208. virtual BOOL DoUpdate_Event(CXTPCalendarEvent* pEvent);
  209. //-----------------------------------------------------------------------
  210. // Summary:
  211. //     Deletes an event from the database.
  212. // Parameters:
  213. //     pEvent - Pointer to the CXTPCalendarEvent object which describes
  214. //              all data fields of an event.
  215. // Remarks:
  216. //     This method creates and executes a database query which deletes
  217. //     a corresponding database record.
  218. // Returns:
  219. //     TRUE if an event deleted successfully,
  220. //     FALSE in case of any errors during the process.
  221. //-----------------------------------------------------------------------
  222. virtual BOOL DoDelete_Event(CXTPCalendarEvent* pEvent);
  223. //-----------------------------------------------------------------------
  224. // Summary:
  225. //     Creates a new recurrence pattern in the database
  226. // Parameters:
  227. //     pPattern - Pointer to the CXTPCalendarRecurrencePattern object which
  228. //                describes all data fields of a newly created record.
  229. //     rdwNewPatternID - [out] ID of a newly created record,
  230. //                       it is an auto-generated numeric table key.
  231. // Remarks:
  232. //     This method creates and executes a database query which
  233. //     adds a new record to the recurrence patterns table.
  234. // Returns:
  235. //     TRUE if recurrence pattern created successfully,
  236. //     FALSE in case of any error during the process.
  237. //-----------------------------------------------------------------------
  238. virtual BOOL DoCreate_RPattern(CXTPCalendarRecurrencePattern* pPattern, DWORD& rdwNewPatternID);
  239. //-----------------------------------------------------------------------
  240. // Summary:
  241. //     Updates a recurrence pattern in the database
  242. // Parameters:
  243. //     pPattern - Pointer to the CXTPCalendarRecurrencePattern object.
  244. // Remarks:
  245. //     This method creates and executes a database query which
  246. //     updates a corresponding record in the recurrence patterns table.
  247. // Returns:
  248. //     TRUE if recurrence pattern updated successfully,
  249. //     FALSE in case of any error during the process.
  250. //-----------------------------------------------------------------------
  251. virtual BOOL DoUpdate_RPattern(CXTPCalendarRecurrencePattern* pPattern);
  252. //-----------------------------------------------------------------------
  253. // Summary:
  254. //     Deletes a recurrence pattern from the database
  255. // Parameters:
  256. //     pPattern - Pointer to the CXTPCalendarRecurrencePattern object
  257. //                which should be deleted.
  258. // Remarks:
  259. //     This method creates and executes a database query which
  260. //     deletes a corresponding record from the recurrence patterns table.
  261. // Returns:
  262. //     TRUE if recurrence pattern deleted successfully,
  263. //     FALSE in case of any error during the process.
  264. //-----------------------------------------------------------------------
  265. virtual BOOL DoDelete_RPattern(CXTPCalendarRecurrencePattern* pPattern);
  266. //-----------------------------------------------------------------------
  267. // Summary:
  268. //     This method implements Getting all events from the database
  269. //     without generating recurrence occurrences.
  270. // Remarks:
  271. //     Simple events are included as is.
  272. //     For the recurrence events only master events are included,
  273. //     recurrence occurrences are not generated.
  274. // Returns:
  275. //     A CXTPCalendarEvents pointer containing a collection of
  276. //     all events.
  277. // See Also: GetAllEvents_raw()
  278. //-----------------------------------------------------------------------
  279. virtual CXTPCalendarEventsPtr DoGetAllEvents_raw();
  280. //-----------------------------------------------------------------------
  281. // Summary:
  282. //     Retrieves a collection of events expiring in the period from
  283. //     dtFrom during next spPeriod.
  284. // Parameters:
  285. //     dtFrom   - Start date and time of a specified period.
  286. //     spPeriod - A duration of a specified period.
  287. // Remarks:
  288. //     This method creates and executes a database query which
  289. //     returns a collection of upcoming events.
  290. //     It is used by a reminders manager.
  291. // Returns:
  292. //     A CXTPCalendarEvents pointer containing a collection of
  293. //     upcoming events.
  294. // See Also:
  295. //     CXTPCalendarRemindersManager overview
  296. //-----------------------------------------------------------------------
  297. virtual CXTPCalendarEventsPtr DoGetUpcomingEvents(COleDateTime dtFrom, COleDateTimeSpan spPeriod);
  298. public:
  299. //{{AFX_CODEJOCK_PRIVATE
  300. static void AFX_CDECL TRACE_ProviderError(XTPADODB::_Connection* pConnDB);
  301. static void AFX_CDECL TRACE_ComError(_com_error &e);
  302. //}}AFX_CODEJOCK_PRIVATE
  303. private:
  304. virtual CXTPCalendarEventPtr _ReadEvent_common(XTPADODB::_Recordset* pRS, BOOL bEcxception);
  305. virtual BOOL _ReadRExceptions(CXTPCalendarRecurrencePattern* pPattern);
  306. virtual BOOL _GetRPatternOptions(XTPADODB::_Recordset* pRS, XTP_CALENDAR_RECURRENCE_OPTIONS& rROptions);
  307. //-----------------------------------------------------------------------
  308. // Summary:
  309. //     This member function is used to update options data in the database.
  310. // Parameters:
  311. //     strOptionsData - Options data in XML format.
  312. // Returns:
  313. //     TRUE if successful. Otherwise FALSE.
  314. // See Also: LoadOptions
  315. //-----------------------------------------------------------------------
  316. virtual BOOL SaveOptions(const CString& strOptionsData);
  317. //-----------------------------------------------------------------------
  318. // Summary:
  319. //     This member function is used to load options data from the database.
  320. // Returns:
  321. //     TRUE if successful. Otherwise FALSE.
  322. // See Also: SaveOptions
  323. //-----------------------------------------------------------------------
  324. virtual BOOL LoadOptions();
  325. virtual CXTPCalendarSchedulesPtr LoadSchedules();
  326. virtual void UpdateSchedules();
  327. virtual void _AddSchedules(CXTPCalendarSchedules* pAddSet);
  328. virtual void _UpdateSchedules(CXTPCalendarSchedules* pUpdateSet, CXTPCalendarSchedules* pOrigSet);
  329. virtual void _DeleteSchedules(CUIntArray* pDeleteIDs);
  330. virtual CXTPCalendarSchedule* _ReadSchedule(XTPADODB::_Recordset* pRS);
  331. protected:
  332. BOOL m_bTraceOptions; // Indicates whether there should be only one record
  333.                       // in the options table, or every save should add the new one.
  334. private:
  335. //{{AFX_CODEJOCK_PRIVATE
  336. BOOL _Open();
  337. void CreateEventTable(XTPADOX::_CatalogPtr ptrCatalog);
  338. void CreateRPatternTable(XTPADOX::_CatalogPtr ptrCatalog);
  339. void CreateOptionsTable(XTPADOX::_CatalogPtr ptrCatalog);
  340. void CreateSchedulesTable(XTPADOX::_CatalogPtr ptrCatalog);
  341. BOOL IsTableExist(XTPADOX::_CatalogPtr ptrCatalog, LPCWSTR pwszTableName);
  342. //void CreateDicTable(XTPADOX::_CatalogPtr ptrCatalog, LPCWSTR strTable,
  343. //                  LPCWSTR strNameID, bool bAuto = true);
  344. BOOL UpdateDBStructure(XTPADODB::_Connection* pconnDb);
  345. //}}AFX_CODEJOCK_PRIVATE
  346. //{{AFX_CODEJOCK_PRIVATE
  347. // members
  348. XTPADODB::_ConnectionPtr m_pconnDb;
  349. BOOL                     m_bCloseDbConnection;
  350. CADOCommand*  m_pcmdGetLastID;
  351. CADOCommand*  m_pcmdAddEvent;
  352. CADOCommand*  m_pcmdDelEvent;
  353. CADOCommand*  m_pcmdUpdEvent;
  354. CADOCommand*  m_pcmdGetDayEvents;
  355. CADOCommand*  m_pcmdGetRExceptions;
  356. CADOCommand*  m_pcmdGetEvent;
  357. CADOCommand*  m_pcmdUpdEventPatternID;
  358. CADOCommand*  m_pcmdAddRPattern;
  359. CADOCommand*  m_pcmdDelRPattern;
  360. CADOCommand*  m_pcmdUpdRPattern;
  361. CADOCommand*  m_pcmdGetRPattern;
  362. CADOCommand*  m_pcmdRemoveAllEvents;
  363. CADOCommand*  m_pcmdRemoveAllRPatterns;
  364. CADOCommand*  m_pcmdRemoveAllOptions;
  365. CADOCommand*  m_pcmdGetOptions;
  366. CADOCommand*  m_pcmdAddOptions;
  367. CADOCommand*  m_pcmdAddSchedule;
  368. CADOCommand*  m_pcmdUpdSchedule;
  369. //}}AFX_CODEJOCK_PRIVATE
  370. private:
  371. // internal only used member functions
  372. //{{AFX_CODEJOCK_PRIVATE
  373. virtual BOOL _SetRPatternOptions(CADOCommand* pCmd, CXTPCalendarRecurrencePattern* pPattern);
  374. void DeleteAllDBCommands();
  375. void CreateGetLastIDCommand();
  376. void CreateAddEventCommand();
  377. void CreateDelEventCommand();
  378. void CreateUpdEventCommand();
  379. void CreateGetDayEventCommand();
  380. void CreateAddRPatternCommand();
  381. void CreateDelRPatternCommand();
  382. void CreateUpdRPatternCommand();
  383. void CreateGetRPatternCommand();
  384. void CreateGetRExceptionsCommand();
  385. void CreateGetEventCommand();
  386. void CreateUpdEventPatternIDCommand();
  387. void CreateRemoveAllCommands();
  388. void CreateGetOptionsCommand();
  389. void CreateAddOptionsCommand();
  390. void CreateAddScheduleCommand();
  391. void CreateUpdScheduleCommand();
  392. //}}AFX_CODEJOCK_PRIVATE
  393. };
  394. #endif // !defined(_XTPCALENDARDATABASEDATAPROVIDER_H__)