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