DBDialog.h
上传用户:benben_wyd
上传日期:2010-02-26
资源大小:1229k
文件大小:6k
源码类别:

书籍源码

开发平台:

Visual C++

  1. // DBDialog.h : Declaration of the CDBDialog
  2. #ifndef __DBDIALOG_H_
  3. #define __DBDIALOG_H_
  4. #include "resource.h"       // main symbols
  5. //Added by Chuck Wood for OLE DB support
  6. #include "Department.h"
  7. #include <atlhost.h>
  8. /////////////////////////////////////////////////////////////////////////////
  9. // CDBDialog
  10. class CDBDialog : 
  11. public CAxDialogImpl<CDBDialog>
  12. {
  13. /*
  14. Protected variables and function prototypes added by 
  15. Chuck Wood for Visual C++ Database Developer's Guide
  16. */
  17. protected:
  18. CDepartment* m_pSet;
  19. BOOL m_bAddingRecord;
  20. BOOL m_bChangesMade;
  21. enum { FIRST = 0,
  22. LAST = 1,
  23. NEXT = 2,
  24. PREV = 3 };
  25. void DisplayError(char *strMessage, HRESULT hr = S_OK, char *strFunction = NULL);
  26. void DisplayStatus(char *strMessage);
  27. HRESULT SaveDepartment();
  28. void OnMove(int position);
  29. void AddRecord();
  30. void ResetRowSet();
  31. void UpdateData(BOOL bSaveChangesToSet = TRUE);
  32. HRESULT UpdateDepartment();
  33. public:
  34. CDBDialog()
  35. {
  36. //Added by Chuck Wood to open & initialize the dialog box
  37. m_pSet = new CDepartment();
  38. m_bChangesMade = FALSE;
  39. m_bAddingRecord = FALSE;
  40. DoModal();
  41. }
  42. ~CDBDialog()
  43. {
  44. delete m_pSet;
  45. }
  46. enum { IDD = IDD_DBDIALOG };
  47. BEGIN_MSG_MAP(CDBDialog)
  48. MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog)
  49. COMMAND_ID_HANDLER(IDCANCEL, OnCancel)
  50. COMMAND_HANDLER(IDC_ADD, BN_CLICKED, OnClickedAdd)
  51. COMMAND_HANDLER(IDC_DELETE, BN_CLICKED, OnClickedDelete)
  52. COMMAND_HANDLER(IDC_FINDEPARTMENT, BN_CLICKED, OnClickedFindepartment)
  53. COMMAND_HANDLER(IDC_SAVE, BN_CLICKED, OnClickedSave)
  54. COMMAND_HANDLER(IDC_FIRST, BN_CLICKED, OnClickedFirst)
  55. COMMAND_HANDLER(IDC_LAST, BN_CLICKED, OnClickedLast)
  56. COMMAND_HANDLER(IDC_NEXT, BN_CLICKED, OnClickedNext)
  57. COMMAND_HANDLER(IDC_PREV, BN_CLICKED, OnClickedPrev)
  58. COMMAND_HANDLER(IDC_DEPARTMENTCODE, EN_CHANGE, OnChangeDepartmentcode)
  59. COMMAND_HANDLER(IDC_DEPARTMENTNAME, EN_CHANGE, OnChangeDepartmentname)
  60. END_MSG_MAP()
  61. // Handler prototypes:
  62. //  LRESULT MessageHandler(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
  63. //  LRESULT CommandHandler(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);
  64. //  LRESULT NotifyHandler(int idCtrl, LPNMHDR pnmh, BOOL& bHandled);
  65. LRESULT OnInitDialog(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
  66. {
  67. _Module.Lock();
  68. SendMessage(GetDlgItem(IDC_DEPARTMENTCODE), 
  69. EM_LIMITTEXT, (WPARAM)4, 0);
  70. SendMessage(GetDlgItem(IDC_DEPARTMENTNAME), 
  71. EM_LIMITTEXT, (WPARAM)50, 0);
  72. SendMessage(GetDlgItem(IDC_FINDDEPARTMENTEDIT), 
  73. EM_LIMITTEXT, (WPARAM)50, 0);
  74. HRESULT hr = m_pSet->Open();
  75. if (FAILED(hr)) {
  76. DisplayError("Open Rowset failed", hr, "OnInitDialog");
  77. exit(1); //Better not start
  78. }
  79. //Start DB Transaction
  80. hr = m_pSet->m_session.StartTransaction();
  81. if (FAILED(hr)) {
  82. DisplayError("StartTransaction failed", hr, "OnInitDialog");
  83. }
  84. m_pSet->MoveFirst();
  85. UpdateData(FALSE); //Write Values to Window
  86. return 1;  // Let the system set the focus
  87. }
  88. LRESULT OnCancel(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
  89. {
  90. if (m_bChangesMade) {
  91. if (MessageBox(
  92. "Changes were made.  Do you wish to save?", 
  93. "Save Changes?", MB_YESNO) == IDYES) {
  94. UpdateDepartment();
  95. }
  96. }
  97. m_pSet->m_session.Abort(); //Rollback the transaction
  98. EndDialog(wID); //Close the dialog box
  99. _Module.Unlock(); //Exit this program
  100. return 0;
  101. }
  102. LRESULT OnClickedAdd(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
  103. {
  104. if (FAILED(SaveDepartment())) {
  105. return 0;
  106. }
  107. AddRecord();
  108. return 0;
  109. }
  110. LRESULT OnClickedDelete(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
  111. {
  112. if (MessageBox( //Be sure to verify your deletes
  113. "Are you sure you want to delete?", "",
  114. MB_YESNO)
  115. != IDYES) {
  116. return 0;
  117. }
  118. //Delete record and test
  119. if (m_bAddingRecord) {
  120. //Just abort the add
  121. m_bAddingRecord = FALSE;
  122. }
  123. else {
  124. //Delete the current row in the rowset
  125. HRESULT hr = m_pSet->Delete();
  126. if (FAILED(hr)) { //Test Delete
  127. DisplayError("Delete Failed", hr, "OnClickedDelete");
  128. }
  129. else { //Set changes to true if Delete worked.
  130. m_bChangesMade = TRUE;
  131. }
  132. }
  133. ResetRowSet();
  134. return 0;
  135. }
  136. LRESULT OnClickedFindepartment(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
  137. {
  138. char filterDepartment[5];
  139. if (FAILED(SaveDepartment())) {
  140. return 0;
  141. }
  142. GetDlgItemText(IDC_FINDDEPARTMENTEDIT,
  143. filterDepartment, 5);
  144. delete m_pSet->m_strFilter;
  145. m_pSet->m_strFilter = new char[25];
  146. strcpy (m_pSet->m_strFilter, "DepartmentCode = '");
  147. strcat (m_pSet->m_strFilter, filterDepartment);
  148. strcat (m_pSet->m_strFilter, "'");
  149. //Requery for new filter
  150. m_pSet->Close();
  151. m_pSet->OpenRowset();
  152. m_pSet->MoveFirst();
  153. UpdateData(FALSE); //Update the window
  154. return 0;
  155. }
  156. LRESULT OnClickedSave(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
  157. {
  158. UpdateDepartment();
  159. return 0;
  160. }
  161. LRESULT OnClickedFirst(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
  162. {
  163. OnMove(FIRST);
  164. return 0;
  165. }
  166. LRESULT OnClickedLast(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
  167. {
  168. OnMove(LAST);
  169. return 0;
  170. }
  171. LRESULT OnClickedNext(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
  172. {
  173. OnMove(NEXT);
  174. return 0;
  175. }
  176. LRESULT OnClickedPrev(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
  177. {
  178. OnMove(PREV);
  179. return 0;
  180. }
  181. LRESULT OnChangeDepartmentcode(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
  182. {
  183. m_bChangesMade = TRUE;
  184. return 0;
  185. }
  186. LRESULT OnChangeDepartmentname(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
  187. {
  188. m_bChangesMade = TRUE;
  189. return 0;
  190. }
  191. };
  192. #endif //__DBDIALOG_H_