티스토리 뷰
목표 : 대화상자 기반으로 ADO를 활용하여 DB와 연동하기
소주제 : ADO 사용하여 DB 연결 시 List Control 핸들하기(컬럼 개수파악해서 표시)
Visual Studio 2012
1. Flag용 변수 추가 및 초기화
// Dialog1.h
// CDialog1 대화 상자입니다.
class CDialog1 : public CDialogEx
{
...
private:
int m_ColumnIdx; //테이블 컬럼 인덱스
char m_ColumnName[10][100]; //테이블 컬럼명
BOOL isReadOnce; //처음 연결 Flag
...
}
// Dialog1.cpp : 구현 파일입니다.
//
//변수 초기화
CDialog1::CDialog1(CWnd* pParent /*=NULL*/)
: CDialogEx(CDialog1::IDD, pParent)
{
m_ColumnIdx=0;
isReadOnce=FALSE;
}
2. OnInitDialog()에 설정했던 m_ctrList.InsertColumn 구문 지우기.
3. DB컬럼 읽고 리스트 컨트롤에 컬럼 추가하는 함수 구현
void CDialog1::dbReadColumn(void)
{
//테이블 student 에 생성된 컬럼 명 읽기
m_Adodb.m_pComm->CommandText = "select COLUMN_NAME from information_schema.columns where table_name = 'student';";
try
{
m_Adodb.m_pRs = m_Adodb.m_pComm->Execute(NULL,NULL, adCmdText);
}
catch (...)
{
MessageBox("Column index 조회오류!", "ADO DB",MB_ICONSTOP);
return;
}
// 결과가 존재하지 않음
if (m_Adodb.m_pRs->adoEOF)
{
m_Adodb.m_pRs->Close(); // 레코드셋을 닫는다.(항상 레코드셋 오픈 후엔 닫아주는 작업을 수행해야 합니다.)
MessageBox("조회할 데이터가 없습니다", "ADO DB", MB_ICONINFORMATION);
return;
}
while(!m_Adodb.m_pRs->adoEOF)
{
//DB에서 해당 필드를 읽어들임
_variant_t Field_ColumnName = m_Adodb.m_pRs->Fields->GetItem("COLUMN_NAME")->GetValue();
// 저장된 variant변수를 조작이 편한 char변수에 복사합니다.
if(m_ColumnIdx<10) //컬럼 갯수는 10개로 제한
strcpy_s(m_ColumnName[m_ColumnIdx++], (char*)((_bstr_t)Field_ColumnName));
m_Adodb.m_pRs->MoveNext(); // 레코드셋을 다음으로 이동시킵니다.
}
//List Control에 컬럼 추가
for (int i=0; i < m_ColumnIdx; i++)
{
m_ctrList.InsertColumn(i,m_ColumnName[i], LVCFMT_LEFT, 50);
}
}
4. DB연결 버튼 클릭 함수 수정
void CDialog1::OnBnClickedBtnConnect()
{
// TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다.
if(m_Adodb.isConnected==false)
{
if(m_Adodb.InitDB("sa", "dbtest", "127.0.0.1","dbTest","1433") == FALSE)
{
MessageBox("디비접속에러","ADO DB",MB_ICONSTOP);
return;
}
else
{
MessageBox("연결 성공!");
//처음 연결 될 시에만 확인
if(isReadOnce==FALSE)
{
CDialog1::dbReadColumn();
isReadOnce=TRUE;
}
}
SetDlgItemText(IDC_BTN_CONNECT,"DB 연결 해제");
}
else
{
// db연결 해제
m_Adodb.ReleaseDB();
SetDlgItemText(IDC_BTN_CONNECT,"DB 연결");
m_ctrList.DeleteAllItems();
}
}* 테스트!
0
'Programming > MFC(C++)' 카테고리의 다른 글
| [MFC] SQLITE3 연동하기 (db 생성) (0) | 2018.07.05 |
|---|---|
| [MFC] 대화상자 기반 ADO 사용하기 - 4 (0) | 2018.07.04 |
| [MFC] 컨트롤 캡션 개행 방법 (0) | 2018.07.04 |
| [MFC] 다이얼로그 Style 속성 (Overlapped, Popup, Child) 차이 (0) | 2018.07.03 |
| [MFC] 대화상자 기반 ADO 사용하기 - 2 (5) | 2018.07.03 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- MXCOMPONENT
- MFC Modeless
- 모달리스 다이얼로그
- ADO
- SendMessage
- 프로세스이름변경
- 청년내일채움공제 만기신청
- 청년내일채움공제
- MSSQL
- sqlite3
- 전자신고파일설명서
- 법정동코드
- 전자신고변환
- 부가가치세
- 스쿠트항공 환불받기
- Modeless
- ADODB
- CMFCBUTTON
- 모달리스
- #자동업데이트
- c++
- 해외송금확인
- 부가가치세전산매체
- MFC ADO
- 소켓
- Sticky Notes Loading
- 스티커메모로드중
- 세금계산서합계표양식
- MFC
- 항공알파벳
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
글 보관함