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

书籍源码

开发平台:

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. enum { FIRST = 0,
  21. LAST = 1,
  22. NEXT = 2,
  23. PREV = 3 };
  24. void DisplayError(char *strMessage, HRESULT hr = S_OK, char *strFunction = NULL);
  25. void DisplayStatus(char *strMessage);
  26. HRESULT SaveDepartment();
  27. void OnMove(int position);
  28. void AddRecord();
  29. void ResetRowSet();
  30. void CheckMaxLength(int nID, size_t nMaxLength);
  31. void UpdateData(BOOL bSaveChangesToSet = TRUE);
  32. public:
  33. CDBDialog()
  34. {
  35. //Added by Chuck Wood to open & initialize the dialog box
  36. m_pSet = new CDepartment();
  37. m_bAddingRecord = FALSE;
  38. DoModal();
  39. }
  40. ~CDBDialog()
  41. {
  42. delete m_pSet;
  43. }
  44. enum { IDD = IDD_DBDIALOG };
  45. BEGIN_MSG_MAP(CDBDialog)
  46. MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog)
  47. COMMAND_ID_HANDLER(IDCANCEL, OnCancel)
  48. COMMAND_HANDLER(IDC_ADD, BN_CLICKED, OnClickedAdd)
  49. COMMAND_HANDLER(IDC_DELETE, BN_CLICKED, OnClickedDelete)
  50. COMMAND_HANDLER(IDC_DEPARTMENTCODE, EN_CHANGE, OnChangeDepartmentcode)
  51. COMMAND_HANDLER(IDC_DEPARTMENTNAME, EN_CHANGE, OnChangeDepartmentname)
  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_FINDDEPARTMENTEDIT, EN_CHANGE, OnChangeFinddepartmentedit)
  59. END_MSG_MAP()
  60. // Handler prototypes:
  61. //  LRESULT MessageHandler(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
  62. //  LRESULT CommandHandler(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);
  63. //  LRESULT NotifyHandler(int idCtrl, LPNMHDR pnmh, BOOL& bHandled);
  64. LRESULT OnInitDialog(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
  65. {
  66. HRESULT hr = m_pSet->Open();
  67. if (FAILED(hr)) {
  68. COLEDBErrorChecking::DisplaySingleError(S_OK, NULL);
  69. exit(1); //Better not start
  70. }
  71. m_pSet->MoveFirst();
  72. UpdateData(FALSE); //Write Values to Window
  73. return 1;  // Let the system set the focus
  74. }
  75. LRESULT OnCancel(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
  76. {
  77. if (SUCCEEDED(SaveDepartment())){ //Save the department if needed
  78. EndDialog(wID); //Close the dialog box
  79. exit(0); //End this program
  80. }
  81. return 0;
  82. }
  83. LRESULT OnClickedAdd(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
  84. {
  85. if (FAILED(SaveDepartment())) {
  86. return 0;
  87. }
  88. AddRecord();
  89. return 0;
  90. }
  91. LRESULT OnClickedDelete(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
  92. {
  93. if (MessageBox( //Be sure to verify your deletes
  94. "Are you sure you want to delete?", "",
  95. MB_YESNO)
  96. != IDYES) {
  97. return 0;
  98. }
  99. //Delete record and test
  100. if (m_bAddingRecord) {
  101. //Just abort the add
  102. m_bAddingRecord = FALSE;
  103. }
  104. else {
  105. //Delete the current row in the rowset
  106. HRESULT hr = m_pSet->Delete();
  107. if (FAILED(hr)) { //Test Delete
  108. DisplayError("Delete Failed", hr, "OnClickedDelete");
  109. }
  110. }
  111. ResetRowSet();
  112. return 0;
  113. }
  114. LRESULT OnChangeDepartmentcode(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
  115. {
  116. CheckMaxLength(IDC_DEPARTMENTCODE, 4);
  117. return 0;
  118. }
  119. LRESULT OnChangeDepartmentname(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
  120. {
  121. CheckMaxLength(IDC_DEPARTMENTNAME, 50);
  122. return 0;
  123. }
  124. LRESULT OnClickedFindepartment(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
  125. {
  126. char filterDepartment[5];
  127. if (FAILED(SaveDepartment())) {
  128. return 0;
  129. }
  130. GetDlgItemText(IDC_FINDDEPARTMENTEDIT,
  131. filterDepartment, 5);
  132. delete m_pSet->m_strFilter;
  133. m_pSet->m_strFilter = new char[23];
  134. strcpy (m_pSet->m_strFilter, "DepartmentCode = '");
  135. strcat (m_pSet->m_strFilter, filterDepartment);
  136. strcat (m_pSet->m_strFilter, "'");
  137. //Requery for new filter
  138. m_pSet->Close();
  139. m_pSet->OpenRowset();
  140. m_pSet->MoveFirst();
  141. UpdateData(FALSE); //Update the window
  142. return 0;
  143. }
  144. LRESULT OnClickedSave(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
  145. {
  146. return 0;
  147. }
  148. LRESULT OnClickedFirst(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
  149. {
  150. OnMove(FIRST);
  151. return 0;
  152. }
  153. LRESULT OnClickedLast(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
  154. {
  155. OnMove(LAST);
  156. return 0;
  157. }
  158. LRESULT OnClickedNext(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
  159. {
  160. OnMove(NEXT);
  161. return 0;
  162. }
  163. LRESULT OnClickedPrev(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
  164. {
  165. OnMove(PREV);
  166. return 0;
  167. }
  168. LRESULT OnChangeFinddepartmentedit(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
  169. {
  170. CheckMaxLength(IDC_FINDDEPARTMENTEDIT, 4);
  171. return 0;
  172. }
  173. };
  174. #endif //__DBDIALOG_H_