Programming/MFC

Example : ODBCEx1

부풍 2009. 8. 29. 11:39

Access를 이용한 테이블 생성

  • StudentTable(name 텍스트, grade 숫자) 테이블 생성
  • 이를 이용한 ODBC Connection 생성

Project 생성

  • SDI
  • Database view without file support 선택
  • View 클래스의 상위 클래스를 CRecordView로 설정

CODBCExDoc 클래스

class CODBCExDoc : public CDocument
{
protected: // create from serialization only
	CODBCExDoc();
	DECLARE_DYNCREATE(CODBCExDoc)
 
// Attributes
public:
	CODBCExSet m_oDBCExSet; /* 만들어져 있음 */

CODBCExView 클래스

ODBCExView.h

class CODBCExView : public CRecordView
{
protected: // create from serialization only
	CODBCExView();
	DECLARE_DYNCREATE(CODBCExView)
 
public:
	//{{AFX_DATA(CODBCExView)
	enum { IDD = IDD_ODBCEX_FORM };
	CODBCExSet* m_pSet; /* 생성되어 있음 */
	//}}AFX_DATA

ODBCExView.cpp

void CODBCExView::OnInitialUpdate()
{
	m_pSet = &GetDocument()->m_oDBCExSet; /* 값 설정 */
	CRecordView::OnInitialUpdate();
	GetParentFrame()->RecalcLayout();
	ResizeParentToFit();
}
 
void CODBCExView::DoDataExchange(CDataExchange* pDX)
{
	CRecordView::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CODBCExView)
	DDX_FieldText(pDX, IDC_NAME, m_pSet->m_name, m_pSet);    /* 설정 */
	DDX_FieldText(pDX, IDC_GRADE, m_pSet->m_grade, m_pSet);
	//}}AFX_DATA_MAP
}

레코드를 삽입하기 위한 다이얼로그 생성

  • IDD_INSERT
  • IDC_NAME, IDC_GRADE
  • DDX
    • IDC_NAME : CString m_Name
    • IDC_GRADE : long m_Grade

ID_RECORD_INSERT 메뉴

void CODBCExView::OnRecordInsert() 
{
	CInsertDlg dlg;	
	if (dlg.DoModal() == IDOK) {
		m_pSet->AddNew();
		m_pSet->m_name = dlg.m_Name;
		m_pSet->m_grade = dlg.m_Grade;
		TRY {
			m_pSet->Update();
		} CATCH(CDBException, e) {
			AfxMessageBox(e->m_strError);
			return;
		}
		END_CATCH;
		m_pSet->Requery();
		UpdateData(FALSE);
	}
}

ID_RECORD_DELETE 메뉴

void CODBCExView::OnRecordDelete() 
{
	m_pSet->Delete();
	m_pSet->MoveNext();
 
	if (m_pSet->IsEOF())
		m_pSet->MoveLast();
	if (m_pSet->IsBOF())
		m_pSet->SetFieldNull(NULL);
	UpdateData(FALSE);
}