티스토리 뷰
목표 : 대화상자 기반으로 ADO를 활용하여 DB와 연동하기
소주제 : List Control과 DB Table 연동
Visual Studio 2012
- 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] 컨트롤 캡션 개행 방법 (0) | 2018.07.04 |
---|---|
[MFC] 다이얼로그 Style 속성 (Overlapped, Popup, Child) 차이 (0) | 2018.07.03 |
[MFC] 대화상자 기반 ADO 사용하기 (0) | 2018.07.03 |
[MFC] 엔터키, ESC 입력 무시 (0) | 2018.07.03 |
[MFC] 모달리스 대화상자(Modeless Dialog) 생성 및 세팅 - 3 (2) | 2018.07.03 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 전자신고파일설명서
- MXCOMPONENT
- 모달리스 다이얼로그
- MFC ADO
- 스쿠트항공 환불받기
- 모달리스
- CMFCBUTTON
- 소켓
- 법정동코드
- Modeless
- 부가가치세전산매체
- ADODB
- sqlite3
- MFC Modeless
- 항공알파벳
- ADO
- 해외송금확인
- 청년내일채움공제 만기신청
- c++
- Sticky Notes Loading
- 전자신고변환
- 청년내일채움공제
- 스티커메모로드중
- #자동업데이트
- SendMessage
- 세금계산서합계표양식
- 부가가치세
- 프로세스이름변경
- MFC
- 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 |
글 보관함