home *** CD-ROM | disk | FTP | other *** search
/ Total C++ 2 / TOTALCTWO.iso / borland / enrols4.pak / CRSFORM.CPP < prev    next >
C/C++ Source or Header  |  1997-05-06  |  4KB  |  157 lines

  1. // crsform.cpp : implementation file
  2. //
  3.  
  4. #include "stdafx.h"
  5. #include "enroll.h"
  6. #include "coursset.h"
  7. #include "addform.h"
  8. #include "crsform.h"
  9. #include "sectset.h"
  10. #include "enroldoc.h"
  11. #include "mainfrm.h"
  12. #include "resource.h"
  13.  
  14. #ifdef _DEBUG
  15. #undef THIS_FILE
  16. static char BASED_CODE THIS_FILE[] = __FILE__;
  17. #endif
  18.  
  19. /////////////////////////////////////////////////////////////////////////////
  20. // CCourseForm
  21.  
  22. IMPLEMENT_DYNCREATE(CCourseForm, CAddForm)
  23.  
  24. CCourseForm::CCourseForm()
  25.     : CAddForm(CCourseForm::IDD)
  26. {
  27.     //{{AFX_DATA_INIT(CCourseForm)
  28.     m_pSet = NULL;
  29.     //}}AFX_DATA_INIT
  30. }
  31.  
  32. CCourseForm::~CCourseForm()
  33. {
  34. }
  35.  
  36. void CCourseForm::DoDataExchange(CDataExchange* pDX)
  37. {
  38.     CRecordView::DoDataExchange(pDX);
  39.     //{{AFX_DATA_MAP(CCourseForm)
  40.     DDX_Control(pDX, IDC_COURSEID, m_ctlCourseID);
  41.     DDX_FieldText(pDX, IDC_COURSEID, m_pSet->m_CourseID, m_pSet);
  42.     DDX_FieldText(pDX, IDC_HOURS, m_pSet->m_Hours, m_pSet);
  43.     DDX_FieldText(pDX, IDC_TITLE, m_pSet->m_CourseTitle, m_pSet);
  44.     //}}AFX_DATA_MAP
  45. }
  46.  
  47. BOOL CCourseForm::OnMove(UINT nIDMoveCommand)
  48. {
  49.     BOOL bWasAddMode = FALSE;
  50.     CString strCourseID;
  51.     if (m_bAddMode == TRUE)
  52.     {
  53.         m_ctlCourseID.GetWindowText(strCourseID);
  54.         bWasAddMode = TRUE;
  55.     }
  56.     if (CAddForm::OnMove(nIDMoveCommand))
  57.     {
  58.         m_ctlCourseID.SetReadOnly(TRUE);
  59.         if (bWasAddMode == TRUE)
  60.         {
  61.             CUpdateHint hint;
  62.             hint.m_strCourse = strCourseID;
  63.             GetDocument()->UpdateAllViews(this, HINT_ADD_COURSE, &hint);
  64.         }
  65.         return TRUE;
  66.     }
  67.     return FALSE;
  68. }
  69.  
  70.  
  71. BEGIN_MESSAGE_MAP(CCourseForm, CAddForm)
  72.     //{{AFX_MSG_MAP(CCourseForm)
  73.     ON_COMMAND(ID_RECORD_ADD, OnRecordAdd)
  74.     ON_COMMAND(ID_RECORD_DELETE, OnRecordDelete)
  75.     ON_COMMAND(ID_RECORD_REFRESH, OnRecordRefresh)
  76.     //}}AFX_MSG_MAP
  77. END_MESSAGE_MAP()
  78.  
  79. /////////////////////////////////////////////////////////////////////////////
  80. // CCourseForm message handlers
  81.  
  82. CRecordset* CCourseForm::OnGetRecordset()
  83. {
  84.     return m_pSet;
  85. }
  86.  
  87. void CCourseForm::OnInitialUpdate()
  88. {
  89.     CEnrollDoc* pDoc = (CEnrollDoc*)GetDocument();
  90.     CDatabase* pDatabase = pDoc->GetDatabase();
  91.     if (!pDatabase->IsOpen())
  92.         return;
  93.     m_pSet = &pDoc->m_courseSetForForm;
  94.     m_pSet->m_strSort = "CourseID";
  95.     m_pSet->m_pDatabase = pDatabase;
  96.     CRecordView::OnInitialUpdate();
  97. }
  98.  
  99.  
  100. void CCourseForm::OnRecordAdd()
  101. {
  102.     CAddForm::RecordAdd();
  103.     m_ctlCourseID.SetReadOnly(FALSE);
  104. }
  105.  
  106.  
  107. void CCourseForm::OnRecordDelete()
  108. {
  109.     // The STDREG.MDB Student Registration database in Access Format
  110.     // does not require a programmatic validation to
  111.     // assure that a course is not deleted if any sections exist.
  112.     // That is because the STDREG.MDB database has been pre-built with
  113.     // such an referential integrity rule.  If the user tries to
  114.     // delete a course that has a section, a CDBException will be
  115.     // thrown, and ENROLL will display the SQL error message 
  116.     // informing the user that the course cannot be deleted.  
  117.     //
  118.     // A Student Registration database initialized by the STDREG
  119.     // tool will not have any such built-in referential integrity
  120.     // rules.  For such databases, the following code assumes the
  121.     // burden of assuring that the course is not deleted if a section
  122.     // exists.  The reason that STDREG does not add referential
  123.     // integrity checks to the Student Registration database is that
  124.     // some databases such as SQL Server do not offer SQL, via ODBC,
  125.     // for creating referential integrity rules such as "FOREIGN KEY".
  126.     //
  127.     // The deletion of a course is not the only place ENROLL 
  128.     // needs a programmatic referential integrity check.  Another example
  129.     // is a check that a duplicate course or seciton is not added.
  130.     // For simplicity, ENROLL does not make these other checks.
  131.  
  132.  
  133.     CEnrollDoc* pDoc = (CEnrollDoc*)GetDocument();
  134.     CSectionSet sectionSet;
  135.     sectionSet.m_pDatabase = pDoc->GetDatabase();
  136.     sectionSet.m_strFilter = "CourseID = ?";
  137.     sectionSet.m_strCourseIDParam = m_pSet->m_CourseID;
  138.     BOOL b = sectionSet.Open();
  139.     if (!sectionSet.IsEOF())
  140.     {
  141.         AfxMessageBox(IDS_CANNOT_DELETE_COURSE_WITH_SECTION);
  142.         return;
  143.     }
  144.  
  145.     CUpdateHint hint;
  146.     hint.m_strCourse = m_pSet->m_CourseID;
  147.     if (CAddForm::RecordDelete())
  148.         GetDocument()->UpdateAllViews(this, HINT_DELETE_COURSE, &hint);
  149. }
  150.  
  151. void CCourseForm::OnRecordRefresh()
  152. {
  153.     if (m_bAddMode == TRUE)
  154.         m_ctlCourseID.SetReadOnly(TRUE);
  155.     CAddForm::RecordRefresh();
  156. }
  157.