제12장 데이터베이스 프로그래밍
12.1 데이터베이스 프로그램의 개요
실습 12-1. ODBC를 이용한 학생관리 프로그램 만들기
데이터베이스 (Database)
•
많은 정보를 보관하는 창고•
대용량의 정보를 보관하고 쉽게 찾아볼 수 있 음 데이터베이스 관리 시스템(DBMS)
•
데이터베이스를 관리하는데 필요한 모든 일을 수행하는 시스템•
대표적인 회사 : Oracle, Microsoft, Sybase
데이터베이스 프로그래밍
데이터베이스 관리 언어
•
DBMS를 제어하기 위해서 DBMS에 명령을 내 릴 때 사용하는 언어•
데이터베이스에 저장될 데이터의 구조 정의, 데 이터의 추가, 변경 및 삭제 명령을 비롯하여 여 러 가지 다양한 방법을 통한 데이터 검색 등 데 이터베이스 관리에 필요한 명령을 포함•
대표적인 언어:SQL(Structured Query Language)데이터베이스 프로그래밍
데이터베이스
애플리케이션•
사용자 인터페이스를 통해 데이터베이스 관리 언어를 생성해서 이를 DBMS에 전달함으로써, 데이터베이스를 제어한다.•
즉 사용자는 복잡한 데이터베이스의 내부 엔진 은 몰라도 데이터베이스를 구성하고 데이터를 입력, 수정, 삭제 조회하는 명령만 알면 데이터 베이스를 사용할 수 있다.데이터베이스 프로그래밍
데이터베이스 접근 방식
•
ODBC를 이용하는 방법•
DAO를 이용하는 방법•
OLE DB를 이용하는 방법데이터베이스 프로그래밍
ODBC(Open Database Connectivity)
•
데이터베이스 애플리케이션과 DBMS를 연결시키 는 표준적인 인터페이스를 제공•
네트워크를 지원하며 다중 사용자가 데이터베이 스에 접속할 수 있다.•
특정한 DBMS를 사용하는 사람이 OBDC 드라이 버를 통하여 다른 DBMS를 사용할 수 있게 한다.•
여러분은 단지 ODBC드라이버 관리자를 호출하여 사용하려는 드라이버를 호출하면 된다.•
드라이버는 SQL을 사용하여 DMBS와 교신을 한다.데이터베이스 프로그래밍
ODBC의 구조
데이터베이스 프로그래밍
DAO(Data Access Object)
•
네트워크를 이용하여 데이터베이스에 접속할 수 없으며 한번에 한명의 사용자만이 데이터베 이스에 접근할 수 있다.•
ODBC보다 빠르게 작동하며 ODBC에서 지원 하지 않는 기능을 몇 가지 가지고 있다.데이터베이스 프로그래밍
OLE DB(Object Linking and Embedding)
•
OLE DB는 마이크로소프트사가 개발한 API로, 통 일된 방식으로 저장된 여러 종류의 데이터에 접근 하기 위해 만들어졌다.•
OLE DB는 개념적으로 소비자(consumer)와 제공 자(provider)로 구분되어 있다.•
소비자는 데이터에 접근해야 하는 응용 프로그램이 며 제공자는 인터페이스를 추가하는 소프트웨어 구 성 요소이다.•
제공자는 복잡한 데이터베이스를 통하여 이러한 단 순한 데이터 저장소를 제공해준다.•
데이터베이스 프로그래밍
OLE DB를 이용한 학생관리 프로그램 만들기
•
이번 실습에서 만들게 될 학생관리 데이터베 이스 프로그램은 학생들의 여러 신상정보를 입력 받아 데이터베이스에 저장하고, 데이터 를 추가, 수정, 삭제, 검색하는 기능이 있는 프 로그램이다.•
이번 실습을 통해 데이터베이스를 설계하고 생 성된 데이터베이스를 OLE DB로 등록하는 방 법과 데이터베이스에 데이터를 추가, 수정, 삭 제, 검색하는 방법 등을 배우게 된다.실습 12-1
실행 결과
실습 12-1
프로그램 작성 순서
1)
데이터베이스 소스를 작성한다.•
Microsoft Access 2007 프로그램을 사용하여 데이터베이스 소스를 작성한다.2)
SDI 프로젝트를 생성한다.•
[데이터베이스 지원] 단계에서 [헤더파일만]을 선택하고 [클라이언트 형식] 항목은 OLE DB를 선택한다.
•
마지막 단계에서 [기본 클래스] 항목을 CFormView 클래스로 선택한다.3)
폼에 컨트롤을 배치하고 속성을 설정한다.실습 12-1
4)
각 컨트롤들을 멤버 변수에 연결한다.5)
레코드 이동에 대한 메뉴와 툴바를 추가한다.6)
데이터베이스와 연결을 할 클래스를 추가한 다.7)
CDataSet클래스에 OLE DB로 데이터베이스 와 연동한다.8)
뷰 클래스에 필요한 멤버 변수를 추가한다.9)
프로그램 실행 시 데이터베이스를 연동해서 첫 번째 레코드를 출력한다.실습 12-1
10)
레코드 이동 함수를 작성한다.11)
폼에 레코드를 추가, 수정, 삭제, 검색 기능 을 하는 컨트롤을 추가한다.12)
레코드 [추가]버튼에 대한 기능을 구현한다.13)
레코드 [수정]버튼에 대한 기능을 구현한다.14)
레코드 [삭제]버튼에 대한 기능을 구현한다.15)
레코드 [검색]버튼에 대한 기능을 구현한다.16)
프로그램을 실행시킨다.실습 12-1
실습 12-1
실행결과
•
Access를 사용하여 매출 자료를 저장하기 위한 영업소, 품목, 매출 테이블을 가진 데이터베이 스를 작성하고, 년차별 해당 영업소의 매출내역 을 입력한다.•
사용자가 입력한 기간 내의 영업소별, 품목별 매출내역을 조회하고 총 매출액을 계산하여 출 력하는 프로그램을 작성하여라.연습문제 12-1OLE DB 데이터베이스 프로그램
실행 결과
연습문제 12-1
매출액 조회 결과의 예
CFormView::OnInitialUpdate();
GetParentFrame()->RecalcLayout();
ResizeParentToFit();
m_listSales.InsertColumn(0, _T("영업소"), LVCF_TEXT|LVCFMT_CENTER, 60);
m_listSales.InsertColumn(1, _T("회계년도"), LVCF_TEXT|LVCFMT_CENTER, 60);
m_listSales.InsertColumn(2, _T("냉장고"), LVCF_TEXT|LVCFMT_CENTER, 60);
m_listSales.InsertColumn(3, _T("컴퓨터"), LVCF_TEXT|LVCFMT_CENTER, 60);
m_listSales.InsertColumn(4, _T("TV"), LVCF_TEXT|LVCFMT_CENTER, 60);
m_listSales.InsertItem(0, _T("서울"));
m_listSales.SetItem(0, 1, LVIF_TEXT, _T("2007"), -1, -1, -1, -1, -1);
m_listSales.SetItem(0, 2, LVIF_TEXT, _T("20"), -1, -1, -1, -1, -1);
m_listSales.SetItem(0, 3, LVIF_TEXT, _T("40"), -1, -1, -1, -1, -1);
m_listSales.SetItem(0, 4, LVIF_TEXT, _T("50"), -1, -1, -1, -1, -1);
m_listSales.InsertItem(0, _T("대전"));
m_listSales.SetItem(0, 1, LVIF_TEXT, _T("2008"), -1, -1, -1, -1, -1);
m_listSales.SetItem(0, 2, LVIF_TEXT, _T("15"), -1, -1, -1, -1, -1);
m_listSales.SetItem(0, 3, LVIF_TEXT, _T("30"), -1, -1, -1, -1, -1);
m_listSales.SetItem(0, 4, LVIF_TEXT, _T("25"), -1, -1, -1, -1, -1);
void CExercise12_1View::OnInitialUpdate()
m_listSales.InsertItem(0, _T("서울"));
m_listSales.SetItem(0, 1, LVIF_TEXT, _T("2008"), -1, -1, -1, -1, -1);
m_listSales.SetItem(0, 2, LVIF_TEXT, _T("23"), -1, -1, -1, -1, -1);
m_listSales.SetItem(0, 3, LVIF_TEXT, _T("45"), -1, -1, -1, -1, -1);
m_listSales.SetItem(0, 4, LVIF_TEXT, _T("52"), -1, -1, -1, -1, -1);
m_listSales.InsertItem(0, _T("서울"));
m_listSales.SetItem(0, 1, LVIF_TEXT, _T("2009"), -1, -1, -1, -1, -1);
m_listSales.SetItem(0, 2, LVIF_TEXT, _T("25"), -1, -1, -1, -1, -1);
m_listSales.SetItem(0, 3, LVIF_TEXT, _T("42"), -1, -1, -1, -1, -1);
m_listSales.SetItem(0, 4, LVIF_TEXT, _T("58"), -1, -1, -1, -1, -1);
m_cbOffice2.AddString(_T("모든 영업소"));
m_cbProduct.AddString(_T("모든 품목"));
void CExercise12_1View::OnInitialUpdate()
{
ClientToScreen(&point);
OnContextMenu(this, point);
}
void CExercise12_1View::OnRButtonUp(UINT /* nFlags
*/, CPoint point)
연습문제 12-1OLE DB 데이터베이스 프로그램 결과