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

书籍源码

开发平台:

Visual C++

  1. // DBDialog.cpp : Implementation of CDBDialog
  2. #include "stdafx.h"
  3. #include "DBDialog.h"
  4. /////////////////////////////////////////////////////////////////////////////
  5. // CDBDialog
  6. /**********************************************
  7. The following were added by Chuck Wood for
  8. Visual C++ Database Developer's Guide
  9. **********************************************/
  10. void CDBDialog::OnMove(int position)
  11. {
  12. //This OnMove is not really an event, but
  13. //rather is called by other move functions
  14. HRESULT hr;
  15. if (FAILED(SaveDepartment())) {
  16. DisplayStatus("Save failed.  No move is possible.");
  17. return; //End if save did not work.
  18. }
  19. DisplayStatus("");
  20. switch (position) {
  21. case (FIRST) :
  22. hr = m_pSet->MoveFirst();
  23. break;
  24. case (NEXT) :
  25. hr = m_pSet->MoveNext();
  26. if (hr != S_OK) { //EOF
  27. DisplayStatus("Last record reached.");
  28. hr = m_pSet->MoveLast();
  29. }
  30. break;
  31. case (LAST) :
  32. hr = m_pSet->MoveLast();
  33. break;
  34. case (PREV) :
  35. hr = m_pSet->MovePrev();
  36. if (hr != S_OK) { //BOF
  37. DisplayStatus("First record reached.");
  38. hr = m_pSet->MoveFirst();
  39. }
  40. break;
  41. }
  42. if (FAILED(hr)) {
  43. DisplayError("No records found. Adding new record");
  44. DisplayStatus("No records found.");
  45. AddRecord();
  46. }
  47. UpdateData(FALSE); //Update Screen
  48. }
  49. void CDBDialog::ResetRowSet()
  50. {
  51. if (m_pSet->MoveNext() != S_OK) { //Go to next record
  52. if (m_pSet->MoveFirst() != S_OK) {
  53. MessageBox("No more records", "",
  54. MB_ICONEXCLAMATION);
  55. //No records, so set up an add record
  56. AddRecord();
  57. }
  58. }
  59. UpdateData(FALSE); //Write changes to window
  60. }
  61. void CDBDialog::AddRecord()
  62. {
  63. m_pSet->ClearRecord();
  64. m_bAddingRecord = TRUE;
  65. UpdateData(FALSE); //Update the window
  66. }
  67. HRESULT CDBDialog::SaveDepartment()
  68. {
  69. UpdateData(TRUE); //Read from screen
  70. HRESULT hr;
  71. if (m_bAddingRecord) {
  72. hr = m_pSet->Insert(); //Insert New rew
  73. }
  74. else {
  75. hr = m_pSet->SetData(); //Update current row
  76. }
  77. if (FAILED(hr)) {
  78. DisplayError("Update Failed.", hr, "SaveDepartment");
  79. }
  80. else {
  81. m_bAddingRecord = FALSE;
  82. }
  83. return hr;
  84. }
  85. void CDBDialog::UpdateData(BOOL bSaveChangesToSet)
  86. {
  87. if (bSaveChangesToSet) {
  88. //Read From Screen
  89. GetDlgItemText(IDC_DEPARTMENTCODE,
  90. (char *) m_pSet->m_DepartmentCode, 5);
  91. GetDlgItemText(IDC_DEPARTMENTNAME,
  92. (char *) m_pSet->m_DepartmentName, 51);
  93. }
  94. else {
  95. //Write to Screen
  96. SetDlgItemText(IDC_DEPARTMENTCODE,
  97. (char *) m_pSet->m_DepartmentCode);
  98. SetDlgItemText(IDC_DEPARTMENTNAME,
  99. (char *) m_pSet->m_DepartmentName);
  100. }
  101. }
  102. void CDBDialog::DisplayStatus(char *strMessage)
  103. {
  104. SetDlgItemText(IDC_STATUS, strMessage);
  105. }
  106. void CDBDialog::DisplayError(char *strMessage, HRESULT hresult, char *strFunction)
  107. {
  108. //Allow 1 k for the error message
  109. char message[1024];
  110. strcpy(message, strMessage);
  111. if (strFunction) { //Check for function equal to null
  112. //Function was passed, so see what function it was
  113. strcat(message, " in the ");
  114. strcat(message, strFunction);
  115. strcat(message, " function ");
  116. }
  117. if (FAILED(hresult)) {
  118. char holdmessage[512]; //Allow 512 bytes for HR message
  119. sprintf(holdmessage, "nnHRESULT was %ld", hresult);
  120. strcat(message, holdmessage);
  121. }
  122. MessageBox(message, "An error has occurred");
  123. }