ODBC를 사용해서 일반 메신저같이 로그인인증 프로그램을 짜보자!!
1.첫번째
우선 데이터베이스는 Microsoft Office Access 2007 기준으로 하겠다..2003 도 비슷비슷하다..
필자는 (*.mdb,*accdb)파일로 작성했다
초기화면에서 오른쪽하단에 파일이름을 정한다.
필드명 형식을 정하고(TEXT(문자열)), 데이터를 입력한다. Id,Pass
그후 저장하면서 테이블이름을 정한다.. 필자는 대충 Namecard로 했다
여기까지하면 DB의 테이블 작성은 끝났다.(너무 쉬워서 겁이날 정도다)
------------------------------------------------------------------------------------------
2번째
ODBC를 통해 데이터소스를 이용하려면 데이터소스를 시스템에 등록해야하는데,
제어판->관리도구->데이터원본 실행 또는 (윈도우+R키를 눌러서 odbcad32를 입력해서 엔터)
ODBC데이터 원본 관리자화면이 뜬다..
여기서 추가를 누르고, Microsoft ACCess Driver를 선택한다...맞는 확장자를 선택하라
마침버튼누르고, DataSourceName(데이터 원본이름)을 입력하고 필자는 또한 Namecard로 했다.
데이터원본이름 이란.. 파일이름이 아닌 Namecard라는 데이터소스이름으로 데이터소스에 접근가능하게된다.
Select(경로)눌러서 경로지정해서 확인한다..
------------------------------------------------------------------------------------------
3번째. 프로젝트를 만든다...(기존에 있는 프로젝트에 추가할경우 class Add 하면서 추가가능하다.)
이건 새로 프로젝트생성 하는부분(visual studio2005기준인데 6.0,2008도 똑같다)인데 여기서
윗화면처럼 Database view with file support를 선택하고 ODBC를 선택하고 Data source를 클릭한다.
Data source를 클릭하면 밑에 화면이 뜬다..
여기서 방금 등록한 데이터원본이름를 선택한다...아까전에 ODBC관리자에서 등록한 이름
선택하고 테이블선택하고 프로젝트을 생성하면된다..
기존 프로젝트같은경우도 project-> Add Class -> MFC ODBC Consumer시키고 Add버튼누르면
위와 비슷한 화면이 나온다.
------------------------------------------------------------------------------------------
4번째.파일이 생기는데 각종 ODBC연결에 관한 각종 코드가 자동삽입된다..
그전에 ODBC를 사용하기 위해서는 Stdafx.h헤더파일에 #include <afxdb.h>가 인클루드 돼어있지
않으면 안돼는데 만약 없으면 추가 시키자..
생성된 CRecordset 파생클래스에는 자동생성한 GetDeaultConncet()라든지 GetDefaultSQL()같은
DB연결과 관계된 각종 멤버함수가 등록돼있다...
이걸 사용해서 객체로 만들어서 실제 코딩을 해보자..
본자같은경우는 XXXAPP.cpp 에 InitInstance()에
m_pMainWnd->ShowWindow(SW_SHOW);
m_pMainWnd->UpdateWindow();
를 밑에처럼 수정했다..
m_pMainWnd->ShowWindow(SW_HIDE);
CloginDlg Dlg;
Dlg.DoModal();
를 추가했다.... (메인화면전에 로그인다이얼로그(로그인창)을 띄워서 로그인인증을 하기위해)
메인을 HIDE시켰다.....그후 모달로 로그인창을 객체생성후 호출했다...
------------------------------------------------------------------------------------------
5번째
로그인창에서
에디트창2개, 버튼창 하나만들어서 클릭이벤트를 추가한다.
거기 소스를 간략히 보자
void CloginDlg::OnBnClickedOk()
{
UpdateData(TRUE);
CloginDlg Dlg;
CWnd* m_pMainWnd;
m_pMainWnd = ::AfxGetMainWnd();
loginOdbc namecard;
namecard.Open(); //레코드셋 열기
CString id = m_idedit; //ID에디트창의 Value변수를 id에 저장
CString pass = m_pass; //Pass에디트창의 Value변수를 pass저장
if(namecard.IsBOF()) return; //현재 레코드가 처음보다 순서상으로 앞서는 검사
while(!namecard.IsEOF()){ //현재레코드가 빈레코드인지 검사
CString DBid = namecard.m_Id;
CString DBpass = namecard.m_Pass;
if(0 == id.GetLength()) //에디트창의 길이를 구해서 검사를 하는부분
{
AfxMessageBox(_T("ID를 입력해주세요"));
return;
}
else if(0 == pass.GetLength()) //에디트창의 길이를 구해서 검사를 하는부분
{
AfxMessageBox(_T("패스워드를 입력해주세요"));
return;
}
else if(DBid == id && DBpass == pass) //입력받은 id와pass를 DB의 id,pass와 비교한다
{
m_pMainWnd->ShowWindow(SW_SHOW); //만약 id,pass가 일치하면 메인화면을 띄운다.
m_pMainWnd->UpdateWindow();
m_pMainWnd->CenterWindow();
SendMessage(WM_CLOSE,0,0); //로그인창은 닫는다
return;
}
namecard.MoveNext(); //레코드포인터를 다음레코드로 이동
}
namecard.MoveLast(); //래코드포인터를 마지막레코드로 이동
AfxMessageBox(_T("ID 또는 패스워드가 틀렸습니다.")); //다 검사했는데 일치하는게없으니
//이걸 출력
}
ODBC배운사람들이면 굳이 자세한 설명이 필요가 없을꺼라 생각한다.. 간단한 주석은 달았다....
끝
크게정리하자면
DB데이블작성->윈도우ODBC관리자 등록->프로젝트생성 아니면 Add할시(DB Support를 선택)
->생성한 DB클래스 객체를 만들어서 멤버로 접근하면 바로 데이터를 뽑을수가 있다
'C & C++ > C & C++' 카테고리의 다른 글
다른 프로그램 제어하기 (1) (0) | 2011.11.17 |
---|---|
API함수를 이용한 해상도 조절하기 (0) | 2011.11.17 |
메모장을 API를 이용하여 주물럭 거려보자 (0) | 2011.11.02 |
파일 존재유무 파악 (0) | 2011.11.02 |
Dialog의 버튼 클릭 기능 SendMessage 보내기 - 프로그램으로 클릭하기 (0) | 2011.11.02 |
댓글