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); }