'ADO'에 해당되는 글 2건

  1. 2007/02/14 ADO 기초 (1)
  2. 2007/02/13 간략 ADO
sw2007/02/14 15:49
ADO를 공부하기 위해 샘플입니다. 아무런 기능도 없다. 찾고, 추가하는 기능 밖에 없습니다. 뭐 또 나중에는 기능을 추가할지도 모르지만…

사용자 삽입 이미지

1. import는 stdafx.h에서
#import “C:\\Program Files\\Common Files\\System\\ado\\msado15.dll” no_namespace rename(”EOF”, “adoEOF”)
해준다.

2. 초기화는
BOOL CDicharDlg::OnInitDialog()
{
…..
// TODO: Add extra initialization here
CoInitialize(NULL);

HRESULT hr = g_pConn.CreateInstance(__uuidof(Connection));

if(FAILED(hr))
{
AfxMessageBox(”연결객체를 생성하지 못하였습니다.”);
}

hr = g_pConn->Open(_bstr_t(”Provider = Microsoft.Jet.OLEDB.4.0;Data Source = Dic.MDB”), _bstr_t(”"), _bstr_t(”"), adModeUnknown);

if(FAILED(hr))
{
AfxMessageBox(”데이터 소스를 열지 못하였습니다.”);
}

return TRUE;
}

3. 컴포넌트 Release를 위한 작업
BOOL CDicharDlg::DestroyWindow()
{
// TODO: Add your specialized code here and/or call the base class
if((g_pConn->State & adStateOpen) == adStateOpen)
{
g_pConn->Close();
}
CoUninitialize();

return CDialog::DestroyWindow();
}

4. 찾기
void CDicharDlg::OnSearchButton()
{
// TODO: Add your control notification handler code here

try
{
_CommandPtr pCommand;

HRESULT hr = pCommand.CreateInstance(__uuidof(Command));

if(FAILED(hr))
{
AfxMessageBox(”명령객체 생성 실패”);
}

CString strCommand, temp;
strCommand = “Select * From Word WHERE word = ‘”;
m_ctrlSearchEdit.GetWindowText(temp);
temp += “‘”;
strCommand += temp;
pCommand->ActiveConnection = g_pConn;
pCommand->CommandText = (_bstr_t)strCommand;

_RecordsetPtr pRecordset;
hr = pRecordset.CreateInstance(__uuidof(Recordset));

if(FAILED(hr))
{
AfxMessageBox(”레코드셋객체 생성 실패”);
}

pRecordset->CursorLocation = adUseClient;
pRecordset->Open((IDispatch*)pCommand, vtMissing, adOpenForwardOnly, adLockReadOnly, adCmdUnknown);

CString strContents;
strContents = (char*)(_bstr_t)pRecordset->Fields->GetItem(”contents”)->Value;

pRecordset->Close();

m_ctrlContentsEdit.SetWindowText(strContents);

UpdateData(FALSE);
}
catch(_com_error &e)
{

TRACE(e.ErrorMessage());
AfxMessageBox(”해당하는 단어가 없습니다.”);
m_ctrlSearchEdit.SetWindowText(”");

}

}

5. 추가
void CAddDlg::OnOK()
{
// TODO: Add extra validation here

try
{
_CommandPtr pCommand;

HRESULT hr = pCommand.CreateInstance(__uuidof(Command));

if(FAILED(hr))
{
AfxMessageBox(”명령객체 생성에 실패하였습니다.”);
return;
}

CString strQuery, strWord, strContents;
m_ctrlWordEdit.GetWindowText(strWord);
m_ctrlContentsEdit.GetWindowText(strContents);
strQuery.Format(”INSERT INTO Word (word, contents) VALUES (’%s’, ‘%s’)”, strWord, strContents);

pCommand->ActiveConnection = g_pConn;
pCommand->CommandText = (_bstr_t)strQuery;

pCommand->Execute(NULL, NULL, adCmdText);
}
catch(_com_error &e)
{
TRACE(e.ErrorMessage());
AfxMessageBox(”추가에 실패 했습니다.”);
}

CDialog::OnOK();
}
Posted by redef
TAG ADO, C

댓글을 달아 주세요

  1. 안녕하세요 ...
    나는 또한 당신의 블로그를 읽고 ... 어떤 꿈을 와우!
    당신의 COM을 가져 주셔서 감사합니다
    우리의 새로운 모험에 대해 곧 당신을보고!

    2011/06/28 16:48 [ ADDR : EDIT/ DEL : REPLY ]

sw2007/02/13 11:15

Connection 객체
- 데이터 소스에 연결
- Execute 를 이용하여 Recordset객체를 반환

Command 객체
- 데이터 소스가 해석할수 있는 명령을 캡슐화
- 데이터 소스에 대한 연결을 개방, 명령 분류, 프로시저 수행, 예비문장 수행및 생성
- Command 객체는 선택적이다.

Error 객체
- 데이터 소스로 부터 반환된 에러의 캡슐화

Field 객체
- Recordset의 한열을 캡슐화, Field의 집합이 Recordset
- 열의 이름, 열의 값, 타입, 정밀도(Precision), 범위(Scale)열의 크기등에 접근
- Field 객체는 Recordset 객체로 부터만 접근가능

Parameter 객체
- 명령 파라미터의 캡슐화

Recordset 객체
- ADO의 심장부
- ADO 객체와는 독립적으로 생성가능

############ Connection 객체 ############
- Connection 메소드
# BeginTrans
# Close
# CommitTrans
# Execute
# Open
# RollbackTrans

- Open과 Close 메소드는 데이터 소스와의 연결만들기
# ADO 연결 문자열 파라미터
+ Provider= OLE DB 데이터 제공자의 이름
+ Data Source= 연결 데이터 소스의 이름
+ User= 데이터 소스에 접근할 사용자이름
+ Password= 데이터 소스에 접근할 패스워드
+ File Name= 연결 정보를 포함하고 있는 파일의 이름

- Execute 메소드
# Command형 옵션상수
+ adCmdText 이 명령어는 실제 쿼리 또는 데이터 정의문
+ adCmdTable 이 명령어는 테이블 이름
+ adCmdStoredProc 이 명령어는 서버 측면 저장 프로시저를 참조
+ adCmdUnknown 명령의 내용은 알려지지 않음

- BeginTrans, CommitTrans 와 RollbackTrans 메소드
# BeginTrans : 트랜잭션 시작
+ CommitTrns 버퍼에 저장된 변화들이 데이터 소스에 적용
+ RollbackTrans 버퍼의 변화가 무시

- Connection 프로퍼티
# Attributes (R/W) [Connection 객체 프로퍼티들]
+ adXactCommitRetaining CommitTrans 메소드가 호출되자마자 새로운 트랜잭션이 자동적으로 시작된다.
+ adXactAbortRetaining RollbackTrans 메소드가 호출되자마자 새로운 트랜잭션이 자동적으로 시작된다.

# Mode (R/W) [새로운 데이터 소스가 개방될때 공유모드]
+ adModeUnknown 모드 허가가 기술되어 있지 않음
+ adModeRead 데이터 소스는 읽기로 개방
+ adModeWrite 데이터 소스는 쓰기로 개방
+ adModeReadWrite 데이터 소스는 읽기/쓰기 개방
+ adModeShareDenyRead 데이터 소스는 공유모드로 개방(다른 사용자는 읽기위한 개방이 허용안됨)
+ adModeShareDenyWrite 데이터 소스는 공유모드로 개방(다른 사용자는 쓰기위한 개방이 허용안됨)
+ adModeExclusive 데이터 소스는 공유모드로 개방(다른 사용자는 읽기/쓰기 개방 허용안됨)
+ adModeShareDenyNone 데이터 소스는 배타적 사용에만 개방

# ISolationLevel (R/W) [Connection 객체의 트랜잭션 처리방법]
+ adXactUnspecified 잠금 레벨이 명시되어 있지 않음
+ adXactChaos 고수준 트랜잭션에서 변화가 일어났다면, 분리의 고수준을 적용하는 다른 트랜잭션에서 덮어쓸 수 있다.
+ adXactBrowse 다른 트랜잭션들에서 데이터 소스에 넘길 수 없는 변화가 보여질 수 있다.
+ adXactReadUncommitted adXactBrowse와 같다.
+ adXacCursortStability 데이터 소스에 넘겨진 변화가 보여진다.
+ adXactReadCommitted adXacCursortStability와 같다.
+ adXactRepeatableRead 단지 현재 트랜잭션에 의한 변화만이 보여질수 있다. 다른 트랜잭션에 의한 변화는 다시 쿼리 되었을 때 보여질 수 있다.
+ adXactIsolated 복잡한 분리에서 변화될 수 있다.
+ adXactSerializable adXactIsolated와 같다.

############ Recordset 객체 ############
- Recordset 메소드
# AddNew
# CancelBatch
# CancelUpdate
# Clone
# Close
# Delete
# GetRows
# Move
# MoveFirst
# MoveLast
# MoveNext
# MovePrevious
# NextRecordset
# Open
# Requery
# Supports
# Update
# UpdateBatch

- Open과 Close 메소드
Recordset의 특정 연결을 개방하고 닫는다.

- Addnew와 Delete 메소드
# 레코드들을 추가 삭제
# Addnew는 Update나 UpdateBatch가 호출될때 버퍼에 저장되는 경우도 있다.
# Delete 메소드의 AffectRecConstant 파라미터
+ adAffectCurrent 단지 현재 레코드만을 삭제(기본값)
+ adAffectGroup 현재 적용되는 필터에 상응되는 모든 레코드들을 삭제
+ adAffectAll Recordset에서 모든 레코드들을 삭제

- Clone 메소드
# 현재 Recordset 객체를 참조하는 것이 아니라 복제하여 새로운 Recordset 객체를 반환한다.

- GetRows 메소드
# Recordset에 포함되어 있는 데이터를 반환한다.

- Move, MoveFirst, MoveLast, MoveNext와 MovePrevious 메소드
# 현재 레코드에 대한 포인터를 갖는다.
# Recordset을 개방할 때, 포인터가 첫번째 레코드에 위치

- NextRecordset 메소드
# 쿼리나 다중 Recordset을 반환하는 저장된 프로시저의 다음 Recordset을 반환

- Requery 메소드
# 원래 Recordset을 생성한 쿼리나 저장된 프로시저들을 다시 수행함으로써 Reocrdset의 내용을 새롭게 한다.

- Supports 메소드
# Recordset 객체가 특정 메소드나 프로퍼티를 지원할 것인지를 결정
# 리턴되는 값이 true이면 지원되는것, false이면 지원되지 않는다.
# CursorOptionEnum형 상수
+ adAddNew AddNew 메소드가 지원되는지를 확인
+ adApproxPosition AbsolutePosition과 AbsolutePage 프로퍼티가 지원되는지를 확인
+ adBookmark 북마크가 지원되는지 확인
+ adDelete Delete 메소드가 지원되는지를 확인
+ adHoleRecords 트랜잭션이 끝나기 전에 다른 레코드들이 검색될 수 있는지 확인
+ adMovePrevious Recordset의 뒤로 돌아갈 수 있는지 확인
+ adResync Recordset이 가장 최근 데이터 소스 데이터로 갱신될 수 있는지를 확인
+ adUpdate Update 메소드가 지원되는지 확인
+ adUpdateBate UpdateBatch 메소드가 지원되는지 확인

- Update, CancelUpdate, UpdateBatch와 CancelBatch 메소드
# Update, UpdateBatch 는 AddNew 호출후에 레코드나 레코드들의 Batch들이 만든 어떤 변화를 저장
# CancelUpdate, CancelBatch AddNew 호출후에 변화를 취소

by Redef( http://www.redef.pe.kr )

Posted by redef
TAG ADO

댓글을 달아 주세요