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

书籍源码

开发平台:

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::CheckMaxLength(int nID, size_t nMaxLength)
  86. {
  87. //Define a character string of the maximum characters
  88. char *text = new char[nMaxLength+2];
  89. //Get the value of the edit box
  90. GetDlgItemText(nID, text, nMaxLength+2);
  91. //Truncate if necessary
  92. if (strlen(text) > nMaxLength) {
  93. text[nMaxLength] = 0; //Null termiante at the right position
  94. SetDlgItemText(nID, text);
  95. }
  96. delete text;
  97. }
  98. void CDBDialog::UpdateData(BOOL bSaveChangesToSet)
  99. {
  100. if (bSaveChangesToSet) {
  101. //Read From Screen
  102. GetDlgItemText(IDC_DEPARTMENTCODE,
  103. (char *) m_pSet->m_DepartmentCode, 5);
  104. GetDlgItemText(IDC_DEPARTMENTNAME,
  105. (char *) m_pSet->m_DepartmentName, 51);
  106. }
  107. else {
  108. //Write to Screen
  109. SetDlgItemText(IDC_DEPARTMENTCODE,
  110. (char *) m_pSet->m_DepartmentCode);
  111. SetDlgItemText(IDC_DEPARTMENTNAME,
  112. (char *) m_pSet->m_DepartmentName);
  113. }
  114. }
  115. void CDBDialog::DisplayStatus(char *strMessage)
  116. {
  117. SetDlgItemText(IDC_STATUS, strMessage);
  118. }
  119. void CDBDialog::DisplayError(char *strMessage, HRESULT hresult, char *strFunction)
  120. {
  121. //Allow 1 k for the error message
  122. char message[1024];
  123. strcpy(message, strMessage);
  124. if (strFunction) { //Check for function equal to null
  125. //Function was passed, so see what function it was
  126. strcat(message, " in the ");
  127. strcat(message, strFunction);
  128. strcat(message, " function ");
  129. }
  130. if (FAILED(hresult)) {
  131. char holdmessage[512]; //Allow 512 bytes for HR message
  132. sprintf(holdmessage, "nnHRESULT was %ld", hresult);
  133. strcat(message, holdmessage);
  134. }
  135. MessageBox(message, "An error has occurred");
  136. }