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

书籍源码

开发平台:

Visual C++

  1. // ADODialog.h : Declaration of the CADODialog
  2. #ifndef __ADODIALOG_H_
  3. #define __ADODIALOG_H_
  4. #include "resource.h"       // main symbols
  5. #include <atlhost.h>
  6. //The next two were added by Chuck Wood for ADO Support
  7. #include <adoid.h> // ADO header file
  8. #include <adoint.h> // ADO header file
  9. //Added by Chuck Wood for OLE DB Error support
  10. #include "..OLEDBErrorCheckingOLEDBErrorChecking.h"
  11. /////////////////////////////////////////////////////////////////////////////
  12. // CADODialog
  13. class CADODialog : 
  14. public CAxDialogImpl<CADODialog>
  15. {
  16. private :
  17. //Database Fields 
  18. char m_DepartmentCode[5];
  19. char m_DepartmentName[51];
  20. //ADO Connection and Recordset variables
  21. CComPtr<ADOConnection> m_ADOConn;
  22. CComPtr<ADORecordset> m_pSet;
  23. //Variant for null VARIANT parameters
  24. VARIANT m_varNoVariant;
  25. //Name of database fields
  26. char *m_strODBCDatabase; //Database Name
  27. char *m_strUserID; //User ID
  28. char *m_strPassword; //Password
  29. char *m_strDBTable; //Table for data source
  30. void StartDatabaseAccess(); //Begin program
  31. void StopDatabaseAccess(); //End program
  32. //Show a status message on the dialog box
  33. void DisplayStatus(char *strMessage);
  34. //Take data to and from the dialog box
  35. void UpdateData(BOOL bSaveChangesToSet = TRUE);
  36. //Take data from database fields
  37. HRESULT GetFields();
  38. //Take data to database fields
  39. HRESULT SetFields();
  40. HRESULT OpenConnection(); //Connect
  41. HRESULT OpenRecordset(); //Form Recordset
  42. HRESULT SaveChanges(); //Save Changes
  43. void CloseConnection(); //End Connection
  44. void CloseRecordset(); //End Recordset
  45. public:
  46. //enum for ADOMove function
  47. enum ADOMoveEnum {FIRST, PREV, NEXT, LAST, SAME};
  48. //Move recordset pointer around
  49. void ADOMove(ADOMoveEnum p, BOOL SaveFirst = TRUE);
  50. void ExecuteSQL(char *SQL); //Execute some SQL
  51. CADODialog()
  52. {
  53. //Initialize a variant for inserting and updating
  54. m_varNoVariant.vt = VT_ERROR;
  55. m_varNoVariant.scode = DISP_E_PARAMNOTFOUND;
  56. //Set up your ADO database access
  57. m_strODBCDatabase = strdup("Classes");
  58. m_strUserID = strdup("");
  59. m_strPassword = strdup("");
  60. m_strDBTable = strdup("Department");
  61. m_ADOConn = NULL; //Initialize connection
  62. m_pSet = NULL; //Initialize recordset
  63. DoModal(); //Open this dialog box
  64. }
  65. ~CADODialog()
  66. {
  67. CloseRecordset(); //Close the crecord set
  68. CloseConnection(); //Close a connection
  69. delete m_strODBCDatabase; //Clean up strings
  70. delete m_strUserID;
  71. delete m_strPassword;
  72. delete m_strDBTable;
  73. }
  74. enum { IDD = IDD_ADODIALOG };
  75. BEGIN_MSG_MAP(CADODialog)
  76. MESSAGE_HANDLER(WM_INITDIALOG, OnInitDialog)
  77. COMMAND_ID_HANDLER(IDCANCEL, OnCancel)
  78. COMMAND_ID_HANDLER(ID_RECORDSET_FIRST, OnMoveFirst)
  79. COMMAND_ID_HANDLER(ID_RECORDSET_LAST, OnMoveLast)
  80. COMMAND_ID_HANDLER(ID_RECORDSET_PREV, OnMovePrev)
  81. COMMAND_ID_HANDLER(ID_RECORDSET_NEXT, OnMoveNext)
  82. COMMAND_ID_HANDLER(ID_RECORDSET_INSERT, OnInsert)
  83. COMMAND_ID_HANDLER(ID_RECORDSET_DELETE, OnDelete)
  84. END_MSG_MAP()
  85. // Handler prototypes:
  86. //  LRESULT MessageHandler(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
  87. //  LRESULT CommandHandler(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled);
  88. //  LRESULT NotifyHandler(int idCtrl, LPNMHDR pnmh, BOOL& bHandled);
  89. LRESULT OnInitDialog(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
  90. {
  91. DisplayStatus("Opening Connection.  Please Wait.");
  92. //Open a connection
  93. if (SUCCEEDED(OpenConnection())) {
  94. DisplayStatus("Now Opening RecordSet.  Please Wait.");
  95. //Open a Recordset
  96. if (SUCCEEDED(OpenRecordset())) {
  97. DisplayStatus("");
  98. }
  99. }
  100. return 1;  // Let the system set the focus
  101. }
  102. LRESULT OnCancel(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
  103. {
  104. SaveChanges();
  105. EndDialog(wID); //End Program
  106. return 0;
  107. }
  108. LRESULT OnMoveFirst(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
  109. {
  110. ADOMove(FIRST); //Move to first record
  111. return 0;
  112. }
  113. LRESULT OnMoveNext(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
  114. {
  115. ADOMove(NEXT); //Move to next record
  116. return 0;
  117. }
  118. LRESULT OnMovePrev(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
  119. {
  120. ADOMove(PREV); //Move to previous record
  121. return 0;
  122. }
  123. LRESULT OnMoveLast(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
  124. {
  125. ADOMove(LAST); //Move to last record
  126. return 0;
  127. }
  128. LRESULT OnInsert(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
  129. {
  130. ADOMove(SAME); //Don't move, just do the updating
  131. //Place the recordset in addnew mode
  132. HRESULT hr = m_pSet->AddNew(m_varNoVariant, m_varNoVariant);
  133. if (FAILED(hr)) {
  134. COLEDBErrorChecking::DisplaySingleError(hr, "Can't set addnew mode");
  135. DisplayStatus("Cannot add.");
  136. return 0;
  137. }
  138. //Clear Record
  139. SetDlgItemText(IDC_CODE, "");
  140. SetDlgItemText(IDC_NAME, "");
  141. return 0;
  142. }
  143. LRESULT OnDelete(WORD wNotifyCode, WORD wID, HWND hWndCtl, BOOL& bHandled)
  144. {
  145. if (MessageBox( //Be sure to verify your deletes
  146. "Are you sure you want to delete?",
  147. "Delete this record?",
  148. MB_YESNO)
  149. != IDYES) {
  150. DisplayStatus("Delete aborted");
  151. return 0;
  152. }
  153. //Delete record and test
  154. EditModeEnum eme; //Edit Mode variable
  155. //Get Edit Mode to test for currently adding
  156. HRESULT hr = m_pSet->get_EditMode(&eme);
  157. if (FAILED(hr)) {
  158. COLEDBErrorChecking::DisplaySingleError(hr, "OnDelete get_EditMode");
  159. DisplayStatus("Cannot determine edit mode. Delete aborted");
  160. return 0;
  161. }
  162. if (eme == adEditAdd) { //In add mode?
  163. //Just abort the add
  164. m_pSet->CancelUpdate();
  165. ADOMove(NEXT, FALSE);
  166. DisplayStatus("Add aborted");
  167. return 0;
  168. }
  169. //Ready to delete current record
  170. hr = m_pSet->Delete(adAffectCurrent);
  171. if (FAILED(hr)) {
  172. COLEDBErrorChecking::DisplaySingleError(hr, "OnDelete Delete");
  173. DisplayStatus("Delete had failed.");
  174. return 0;
  175. }
  176. ADOMove(NEXT, FALSE); //Reposition record
  177. return 0;
  178. }
  179. };
  180. #endif //__ADODIALOG_H_