⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 odbcdepartmentview.cpp

📁 vc++6.0数据库编程大全一书得各个章节得源码,比较详细.可以仔细参照学习!
💻 CPP
📖 第 1 页 / 共 2 页
字号:
	//No isntructor records, so add one.
	AddInstructor();
}

void CODBCDepartmentView::OnFileSave() 
{
	if (m_bFieldsChanged && m_pSet->CanTransact()) {
		if (!m_bAddingRecord) {	//Currently adding?
			m_pSet->Edit();	//If not, set edit mode
		}
		UpdateInstructor();	//Update Instructor too
		UpdateData(TRUE);	//Get data from dialog box
		m_pSet->Update();	//Update data if needed
		m_bAddingRecord = FALSE;	//Reset flag
		m_pSet->m_pDatabase->CommitTrans();	//Commit changes
		CRecordsetStatus rStatus;		//Status variable
		m_pSet->GetStatus(rStatus);		//Get CRecordset status
		m_pSet->Close();	//Close to start transaction
		CRecordsetStatus rStatus2;		//Status variable
		m_pInstructorSet->GetStatus(rStatus2);	//Get CRecordset status
		m_pInstructorSet->Close();	//Close second transaction
		m_pSet->m_pDatabase->BeginTrans();	//Start Transaction
		m_pSet->Open();				//Reopen CRecordset
		//Restore record position
		if (rStatus.m_lCurrentRecord >= 0) {
			m_pSet->SetAbsolutePosition(rStatus.m_lCurrentRecord+1);
		}
		m_bFieldsChanged = FALSE;	//Reset flag
		OpenInstructorRecordset(
			rStatus2.m_lCurrentRecord);	//Reopen second instructor
		UpdateData(FALSE);	//Update dialog box fields
	}
}

void CODBCDepartmentView::OnDestroy() 
{
//Check for changed fields and transaction ability
	if (m_pSet->CanTransact()) {
		if (m_bFieldsChanged) {
			if (AfxMessageBox (
				"Records have been changed.  Do you want to save?", 
				MB_YESNO) == IDNO) {
				m_pSet->m_pDatabase->Rollback();
			}
			else {
				if (!m_bAddingRecord) {	//Currently adding?
				//If not, set edit mode
					m_pSet->Edit();
				}
				UpdateInstructor();
				UpdateData(TRUE);	//Get data from dialog box
				m_pSet->Update();	//Update data if needed
				m_pSet->m_pDatabase->CommitTrans();
			}
		}
		else {
			m_pSet->m_pDatabase->CommitTrans();
		}
	}
	if (m_pInstructorSet != NULL) {
		m_pInstructorSet->Close();
		delete m_pInstructorSet;
	}
	CRecordView::OnDestroy();
}

void CODBCDepartmentView::OnChangeDepartmentcode() 
{
	m_bFieldsChanged = TRUE;
}

void CODBCDepartmentView::OnChangeDepartmentname() 
{
	m_bFieldsChanged = TRUE;
}

void CODBCDepartmentView::OnUpdateFileSave(CCmdUI* pCmdUI) 
{ //Enable save functionality if a record has changed
	pCmdUI->Enable(m_bFieldsChanged);
}

/////////////////////////////////////////////////////////////////////////////
// CODBCInstructorSet functions

void CODBCDepartmentView::AddInstructor() 
{
	m_bAddingInstructor = TRUE;	//Set flag
	m_pInstructorSet->SetFieldNull(NULL);	//Clear all fields
	m_pInstructorSet->AddNew();	//Set database in AddNew mode
	UpdateData(FALSE);	//Update dialog box fields
}

void CODBCDepartmentView::OpenInstructorRecordset(long nRows)
{
	m_pInstructorSet->Open();
	m_pInstructorSet->Requery();
	CRecordsetStatus rStatus;		//Status variable
	m_pInstructorSet->GetStatus(rStatus); //Get CRecordset status
	if (rStatus.m_lCurrentRecord < 0) {	//no records Exist?
		//No isntructor records, so add one.
		AddInstructor();
	}
	else {
		this->m_pInstructorSet->SetAbsolutePosition(nRows+1);
	}
}

void CODBCDepartmentView::UpdateInstructor()
{
	if (!m_bAddingInstructor) {
		if (m_pInstructorSet->IsBOF() ||
			m_pInstructorSet->IsEOF() ||
			m_pInstructorSet->IsDeleted()) {
			return;
		}
		m_pInstructorSet->Edit();
	}
	m_bAddingInstructor = FALSE;
	UpdateData(TRUE);	//Get data from dialog box
	m_pInstructorSet->m_DepartmentCode 
		= *m_pInstructorSet->m_pDepartmentCode;
	m_pInstructorSet->Update();
}

void CODBCDepartmentView::OnChangeEmail() 
{
	m_bFieldsChanged = TRUE;
}

void CODBCDepartmentView::OnChangeInstructorname() 
{
	m_bFieldsChanged = TRUE;
}

void CODBCDepartmentView::OnChangeNotes() 
{
	m_bFieldsChanged = TRUE;
}

void CODBCDepartmentView::OnInstructorAddinstructor() 
{
	UpdateInstructor();
	AddInstructor();
}

void CODBCDepartmentView::OnInstructorDeleteinstructor() 
{
	if (AfxMessageBox(	//Be sure to verify your deletes
			"Are you sure you want to delete this instructor?",
			MB_YESNO)
		!= IDYES) {
		return;
	}
	if (m_bAddingInstructor) {	//Currently adding?
		//Don't delete, just cancel add.
		m_pInstructorSet->CancelUpdate();
		m_bAddingInstructor = FALSE;
		OnInstructorPreviousrecord();
		return;
	}
	try {
		m_pInstructorSet->Delete();	//Delete record
	}
	catch(CDBException* e1) {	//Failed
		AfxMessageBox("Delete Failed:\n" +
			e1->m_strError,
			MB_ICONEXCLAMATION);
		e1->Delete();		//Delete Error Message
		OnInstructorFirstrecord();	//Recapture place
		return;
	}
	try {
		OnInstructorNextrecord();	//Go to the next record
		if (m_pSet->IsDeleted()) {	//Was there a next record?
			OnInstructorFirstrecord();	//Deleted last record
		}
		if (m_pSet->IsDeleted()) {	//Can't find a record
			AfxThrowDBException(SQL_ERROR, 
				m_pInstructorSet->m_pDatabase,
				m_pInstructorSet->m_hstmt);   
		}
		UpdateData(FALSE);	//Update dialog box fields
	}
	catch(CDBException* e2) {	//No records exist
		AfxMessageBox("No more Instructors for this department",
			MB_ICONEXCLAMATION);
		e2->Delete();		//Delete Error Message
		//Close and Open to get rid of the Deleted record
		m_pInstructorSet->Close();
		m_pInstructorSet->Open();
		//No records, so set up an add record
		OnInstructorAddinstructor();
	}
}

void CODBCDepartmentView::OnInstructorFirstrecord() 
{
	UpdateInstructor();
	m_pInstructorSet->MoveFirst();
	UpdateData(FALSE);	//Update dialog from database
}

void CODBCDepartmentView::OnInstructorLastrecord() 
{
	UpdateInstructor();
	m_pInstructorSet->MoveLast();
	UpdateData(FALSE);	//Update dialog from database
}

void CODBCDepartmentView::OnInstructorNextrecord() 
{
	UpdateInstructor();
	m_pInstructorSet->MoveNext();
	if (m_pInstructorSet->IsEOF()) {
		m_pInstructorSet->MoveLast();
	}
	UpdateData(FALSE);	//Update dialog from database
}

void CODBCDepartmentView::OnInstructorPreviousrecord() 
{
	UpdateInstructor();
	m_pInstructorSet->MovePrev();
	if (m_pInstructorSet->IsBOF()) {
		m_pInstructorSet->MoveFirst();
	}
	UpdateData(FALSE);	//Update dialog from database
}

void CODBCDepartmentView::OnUpdateInstructorDeleteinstructor(CCmdUI* pCmdUI) 
{
	//Disable delete functionality if no record is found
	pCmdUI->Enable(		//Enable delete if there's a record
		!m_pInstructorSet->IsBOF() &&
		!m_pInstructorSet->IsDeleted() &&
		!m_pInstructorSet->IsEOF());
}

void CODBCDepartmentView::OnUpdateInstructorFirstrecord(CCmdUI* pCmdUI) 
{
	CRecordsetStatus rStatus;		//Status variable
	m_pInstructorSet->GetStatus(rStatus);		//Get CRecordset status
	pCmdUI->Enable(		//Disable at first record
		rStatus.m_lCurrentRecord > 0);
}

void CODBCDepartmentView::OnUpdateInstructorLastrecord(CCmdUI* pCmdUI) 
{
	CRecordsetStatus rStatus;		//Status variable
	m_pInstructorSet->GetStatus(rStatus);		//Get CRecordset status
	if (rStatus.m_bRecordCountFinal) {
		long recs = m_pInstructorSet->GetRecordCount() - 1;
		pCmdUI->Enable(		//Disable at last record
			rStatus.m_lCurrentRecord < recs);
	}
	else {	//Can't tell if we're at the end
		pCmdUI->Enable(TRUE);
	}
}

void CODBCDepartmentView::OnUpdateInstructorNextrecord(CCmdUI* pCmdUI) 
{
	CRecordsetStatus rStatus;		//Status variable
	m_pInstructorSet->GetStatus(rStatus);		//Get CRecordset status
	if (rStatus.m_bRecordCountFinal) {
		long recs = m_pInstructorSet->GetRecordCount() - 1;
		pCmdUI->Enable(		//Disable at last record
			rStatus.m_lCurrentRecord < recs);
	}
	else {	//Can't tell if we're at the end
		pCmdUI->Enable(TRUE);
	}
}

void CODBCDepartmentView::OnUpdateInstructorPreviousrecord(CCmdUI* pCmdUI) 
{
	CRecordsetStatus rStatus;		//Status variable
	m_pInstructorSet->GetStatus(rStatus);		//Get CRecordset status
	pCmdUI->Enable(		//Disable at first record
		rStatus.m_lCurrentRecord > 0);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -