gusucode.com > VC+Access工程信息管理系统 > VC+Access工程信息管理系统/gusucode/IMS/PropPageDelete.cpp

    //Download by http://www.NewXing.com
// PropPageDelete.cpp : implementation file
//

#include "stdafx.h"
#include "IMS.h"
#include "PropPageDelete.h"
#include "IMSDlg.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CPropPageDelete property page

IMPLEMENT_DYNCREATE(CPropPageDelete, CPropertyPage)

CPropPageDelete::CPropPageDelete() : CPropertyPage(CPropPageDelete::IDD)
{
	//{{AFX_DATA_INIT(CPropPageDelete)
	m_strDataPosition = _T("");
	m_olecExpense = COleCurrency(0, 0);
	m_strLinkMan = _T("");
	m_strRemark = _T("");
	m_strTelNumber = _T("");
	m_strWorkAmount = _T("");
	m_strWorkContent = _T("");
	m_strWorkGroup = _T("");
	m_strWorkPosition = _T("");
	m_oletDataTime = COleDateTime::GetCurrentTime();
	m_oletWorkDate = COleDateTime::GetCurrentTime();
	m_strWorkUnit = _T("");
	//}}AFX_DATA_INIT
	nItemIndex = -1;

}

CPropPageDelete::~CPropPageDelete()
{
}

void CPropPageDelete::DoDataExchange(CDataExchange* pDX)
{
	CPropertyPage::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CPropPageDelete)
	DDX_Text(pDX, IDC_DATAPOSITION, m_strDataPosition);
	DDX_Text(pDX, IDC_EXPENSES, m_olecExpense);
	DDX_Text(pDX, IDC_LINKMAN, m_strLinkMan);
	DDX_Text(pDX, IDC_REMARK, m_strRemark);
	DDX_Text(pDX, IDC_TELNUMBER, m_strTelNumber);
	DDX_Text(pDX, IDC_WORKAMOUNT, m_strWorkAmount);
	DDX_CBString(pDX, IDC_WORKCONTENT, m_strWorkContent);
	DDX_CBString(pDX, IDC_WORKGROUP, m_strWorkGroup);
	DDX_Text(pDX, IDC_WORKPOSITION, m_strWorkPosition);
	DDX_DateTimeCtrl(pDX, IDC_DATATIME, m_oletDataTime);
	DDX_DateTimeCtrl(pDX, IDC_WORKDATE, m_oletWorkDate);
	DDX_Text(pDX, IDC_WORKUNIT, m_strWorkUnit);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CPropPageDelete, CPropertyPage)
	//{{AFX_MSG_MAP(CPropPageDelete)
		// NOTE: the ClassWizard will add message map macros here
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CPropPageDelete message handlers

BOOL CPropPageDelete::OnSetActive() 
{
	nActivePage = 3;		
	
	CIMSDlg *pCIMDlg = (CIMSDlg *)(AfxGetApp( )->m_pMainWnd);
	CListBoxCtrl *pRecordset = &(pCIMDlg->m_lcRecordset);

	CString strRecordIdQuery;
	

	// if there's an element selected in the listbox
	if ( ( pRecordset -> GetNextItem ( -1, LVNI_SELECTED ) ) != -1 )
	{
		nItemIndex = -1;
		try {
			// open the database
			if ( ! daoRecordset . IsOpen () )
				daoRecordset . Open ();
			nItemIndex = pRecordset -> GetNextItem ( nItemIndex, LVNI_SELECTED );
			strRecordIdQuery = CString ( "[ID] = " ) +
							   CString ( pRecordset -> GetItemText ( nItemIndex, 0 ) ); // put the ID into the query string
			if ( daoRecordset . FindFirst ( strRecordIdQuery ) )
			{ 
				m_strDataPosition = daoRecordset . m_strDataPosition;
				m_olecExpense = daoRecordset . m_olecExpense;
				m_strLinkMan = daoRecordset . m_strLinkMan;
				m_strRemark = daoRecordset . m_strRemark;
				m_strTelNumber = daoRecordset . m_strTelNumber;
				m_strWorkAmount = daoRecordset . m_strWorkAmount;
				m_strWorkContent = daoRecordset . m_strWorkContent;
				m_strWorkGroup = daoRecordset . m_strWorkGroup;
				m_strWorkPosition = daoRecordset . m_strWorkPosition;
				m_oletDataTime = daoRecordset . m_oletDataTime;
				m_oletWorkDate = daoRecordset . m_oletWorkDate;
				m_strWorkUnit = daoRecordset . m_strWorkUnit;

			}
			else 
			{
				AfxMessageBox ( "Internal failure\n\nCannot find selected repeater in database\nor database is corrupted", MB_ICONSTOP );
			}
			
			daoRecordset . Close (); // close the database
		}
		catch ( CDaoException* e ) { // yeah, yeah, same comments as all the other "catch" blocks.
			char szBuffer [ 256 ];
			CString strExceptDesc =
				CString ( "JET Database Engine Error:\n\n Error Code: " ) +
				CString ( ltoa ( e -> m_pErrorInfo -> m_lErrorCode, szBuffer, 10 ) ) +
				CString ( "\nDescription: " ) +
				CString ( e -> m_pErrorInfo -> m_strDescription );
			AfxMessageBox ( strExceptDesc, MB_ICONEXCLAMATION );
			daoRecordset . Close ();
			return FALSE;
		}
	}
	else 
	{
		nItemIndex = -1;
		m_strDataPosition = _T("");
		m_olecExpense = COleCurrency(0, 0);
		m_strLinkMan = _T("");
		m_strRemark = _T("");
		m_strTelNumber = _T("");
		m_strWorkAmount = _T("");
		m_strWorkContent = _T("");
		m_strWorkGroup = _T("");
		m_strWorkPosition = _T("");
		m_oletDataTime = COleDateTime::GetCurrentTime();
		m_oletWorkDate = COleDateTime::GetCurrentTime();
		m_strWorkUnit = _T("");
	}


	UpdateData(FALSE);
	CWnd *pWnd = pCIMDlg->GetDlgItem(IDC_EXECUTE);
	pWnd->SetWindowText("删除记录(&D)");
	return CPropertyPage::OnSetActive();
}

BOOL CPropPageDelete::Execute()
{
	CIMSDlg *pCIMDlg = (CIMSDlg *)(AfxGetApp( )->m_pMainWnd);
	CListBoxCtrl *pRecordset = &(pCIMDlg->m_lcRecordset);

	CString strRecordIdQuery;
	if( nItemIndex != -1 )
	{
		try {
			// open the database
			if ( ! daoRecordset . IsOpen () )
				daoRecordset . Open ();
			strRecordIdQuery = CString ( "[ID] = " ) +
							   CString ( pRecordset -> GetItemText ( nItemIndex, 0 ) ); // put the ID into the query string
			if ( daoRecordset . FindFirst ( strRecordIdQuery ) )
			{ 
				// looking for this ID in the database, ID is a unique 'autonumber'
				daoRecordset . Delete (); // delete the record
				daoRecordset . MoveFirst (); // move back to the first record
			}
			else 
			{
				AfxMessageBox ( "Internal failure\n\nCannot find selected repeater in database\nor database is corrupted", MB_ICONSTOP );
			}
			
			daoRecordset . Close (); // close the database
		
		}
		catch ( CDaoException* e ) { // yeah, yeah, same comments as all the other "catch" blocks.
			char szBuffer [ 256 ];
			CString strExceptDesc =
				CString ( "J数据库引擎发生错误:\n\n 错误号: " ) +
				CString ( ltoa ( e -> m_pErrorInfo -> m_lErrorCode, szBuffer, 10 ) ) +
				CString ( "\n描述: " ) +
				CString ( e -> m_pErrorInfo -> m_strDescription );
			AfxMessageBox ( strExceptDesc, MB_ICONEXCLAMATION );
			daoRecordset . Close ();
			return FALSE;
		}
	}
	else
		AfxMessageBox ( "请选择一条记录", MB_ICONEXCLAMATION );
	return TRUE;
}