티스토리 뷰
목표 : 대화상자 기반으로 ADO를 활용하여 DB와 연동하기
Visual Studio 2012
ADO?
- Active X Data Object
- 데이터를 다루는 객체, 데이터 처리 담당 기술
사용환경 조성
1. MYAdodb 파일 받기
https://github.com/jjj0214/MFC_Samples/tree/master/MyAdodb
- ADO 사용할 수 있도록 도와주는 라이브러리
2. 압축 푼 후, MyAdodb.c, MyAdodb.h 파일을 프로젝트에 추가
* 솔루션 탐색기 - 소스파일/헤더파일 - 마우스 우클릭 - 추가 - 기존항목
3. 사용할 대화상자 헤더파일에 Myadodb.h 포함
// Dialog1.h
#pragma once
...
#include "MyAdodb.h"
4. stdafx.h 에 ADO관련 DLL 추가
// stdafx.h
...
#import "C:\Program Files\Common Files\System\ado\msado15.dll" no_namespace rename("EOF", "adoEOF")
5. 문자 집합을 멀티 바이트로 설정
* 프로젝트 - 프로젝트 속성 - 구성속성 - 프로젝트 기본 값 - 문자 집합
DB 연결하기
- DB는 Windows Server 2014 Express로 미리 작업하여 테이블 구축 해 놓음
- DB명: dbTest 테이블 명: student, 속성: ID(int), NAME(text)
1. 테이블 연동 용 List Control/ DB 연결용 버튼 생성
* List Control 생성 후 속성 - 모양 - View - Report로 변경
* List Control 컨트롤 변수 추가 m_ctrList
2. CMyAdodb 변수 생성
// Dialog1.h
// CDialog1 대화 상자입니다.
class CDialog1 : public CDialogEx
{
...
private:
CMyAdodb m_Adodb;
};
2. List Control에 테이블 속성 추가
* Ex) ID, NAME
// CModelessDDlg 메시지 처리기
BOOL CModelessDDlg::OnInitDialog()
{
CDialogEx::OnInitDialog();
...
// TODO: 여기에 추가 초기화 작업을 추가합니다.
isDlgInit = TRUE;
m_dlg1 = new CDialog1;
m_dlg1->Create(IDD_DIALOG1);
m_dlg1->m_ctrList.InsertColumn(0,"ID",LVCFMT_LEFT, 50);
m_dlg1->m_ctrList.InsertColumn(1,"NAME",LVCFMT_LEFT, 80);
return TRUE; // 포커스를 컨트롤에 설정하지 않으면 TRUE를 반환합니다.
}
3. DB 연결 시 테이블 값 읽어오는 루틴 추가
* 헤더에 함수 원형 추가(void CDialog1::dbReadTable(void);)
void CDialog1::dbReadTable(void)
{
//리스트 컨트롤 초기화
m_ctrList.DeleteAllItems();
m_Adodb.m_pComm->CommandText = "select * from dbo.student";
try
{
m_Adodb.m_pRs = m_Adodb.m_pComm->Execute(NULL,NULL, adCmdText);
}
catch (...)
{
MessageBox("조회오류!", "SIMPLEDB",MB_ICONSTOP);
return;
}
// 결과가 존재하지 않음
if (m_Adodb.m_pRs->adoEOF)
{
m_Adodb.m_pRs->Close(); // 레코드셋을 닫는다.(항상 레코드셋 오픈 후엔 닫아주는 작업을 수행해야 합니다.)
MessageBox("조회할 데이터가 없습니다", "SIMPLEDB", MB_ICONINFORMATION);
return;
}
// 읽어들인 DB 필드를 문자열로 저장하는 변수
char szField_ID[100] = { '\0', }; // 필드명과 1:1대응하게 변수를 선언하십시요
char szField_NAME[100] = { '\0', };
// DB에서 얻은 값이 삽입될 리스트의 인덱스 입니다.
int iCount = 0;
// 조회된 레코드의 끝까지 루핑을 돌며 데이터를 확인합니다.
while (!m_Adodb.m_pRs->adoEOF)
{
// DB에서 해당 필드를 읽어들임
_variant_t Field_ID = m_Adodb.m_pRs->Fields->GetItem("ID")->GetValue();
_variant_t Field_NAME = m_Adodb.m_pRs->Fields->GetItem("NAME")->GetValue();
// 저장된 variant변수를 조작이 편한 char변수에 복사합니다.
strcpy_s(szField_ID, (char*)((_bstr_t)Field_ID));
strcpy_s(szField_NAME, (char*)((_bstr_t)Field_NAME));
// 가져온 값을 List control에 출력한다.
int Index = m_ctrList.InsertItem(iCount, szField_ID, 0);
m_ctrList.SetItemText(Index, 1, szField_NAME);
// 리스트 컨트롤을 추가하셨거나 화면에 출력하실 생각이 있으시다면
// 루핑을 돌리며 값을 채워넣는 작업을 이부분에서 하시면 됩니다.
m_Adodb.m_pRs->MoveNext(); // 레코드셋을 다음으로 이동시킵니다.
iCount++; // 다음 레코드를 읽어들일 때 다음 줄에 삽입 할 수 있도록 증가시킨다.
}
m_Adodb.m_pRs->Close(); // 레코드셋을 닫아줍니다.
}
4. 버튼 클릭시 DB 연결하고 테이블 값 읽어오는 루틴 추가
* m_Adodb.InitDB("유저","비밀번호","IP","DB이름","포트번호(기본값:1433)")
void CDialog1::OnBnClickedBtnConnect()
{
// TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다.
if(m_Adodb.isConnected==false)
{
if(m_Adodb.InitDB("sa", "dbtest", "127.0.0.1","dbTest","1433") == FALSE)
{
MessageBox("디비접속에러","SIMPLEDB",MB_ICONSTOP);
return;
}
else
{
MessageBox("연결 성공!");
CDialog1::dbReadTable();
}
SetDlgItemText(IDC_BTN_CONNECT,"DB 연결 해제");
}
else
{
// db연결 해제
m_Adodb.ReleaseDB();
SetDlgItemText(IDC_BTN_CONNECT,"DB 연결");
}
}
5. 컴파일 및 테스트
'Programming > MFC(C++)' 카테고리의 다른 글
[MFC] 다이얼로그 Style 속성 (Overlapped, Popup, Child) 차이 (0) | 2018.07.03 |
---|---|
[MFC] 대화상자 기반 ADO 사용하기 - 2 (5) | 2018.07.03 |
[MFC] 엔터키, ESC 입력 무시 (0) | 2018.07.03 |
[MFC] 모달리스 대화상자(Modeless Dialog) 생성 및 세팅 - 3 (2) | 2018.07.03 |
[MFC] 모달리스 대화상자(Modeless Dialog) 생성 및 세팅 - 2 (0) | 2018.07.02 |
- Total
- Today
- Yesterday
- MFC ADO
- ADO
- sqlite3
- 청년내일채움공제
- Sticky Notes Loading
- 부가가치세
- CMFCBUTTON
- 스티커메모로드중
- SendMessage
- ADODB
- Modeless
- 부가가치세전산매체
- MXCOMPONENT
- 청년내일채움공제 만기신청
- 세금계산서합계표양식
- c++
- MFC
- 전자신고변환
- #자동업데이트
- MFC Modeless
- 소켓
- 모달리스
- 전자신고파일설명서
- 항공알파벳
- 해외송금확인
- 스쿠트항공 환불받기
- MSSQL
- 모달리스 다이얼로그
- 프로세스이름변경
- 법정동코드
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |