2011. 12. 28. 03:56

<<odbc 연결할 때, 수정, 삭제가 가능하도록 하려면  Dyanaset으로 선택하고, 읽기만(select)하려면  Snapshot으로 선택을 하여야 합니다. >>

◆ Snapshot : 변경되지 않는 데이터를 볼 때 스냅샷을 이용합니다. 또한 DAO에서 스냅샷은 항상 읽기 전용입니다. 스냅샷으로 열었다면 절대 수정할 수 없습니다. ODBC라면 사용되는 드라이버에 따라 업데이트가 가능합니다.

◆ Dyanaset : 스냅샷과 반대의 개념입니다. 다른 사용자가 레코드, 즉 데이터베이스를 업데이트하면 즉시 읽고 있는 다른 사용자에게 알려줍니다. 그러나 누군가가 새로이 내용을 추가했다면 다시 질의(SELECT)할 때까지 변경사항을 볼 수 없습니다.

◆ Table : 레코드셋의 결과가 데이터베이스 내의 테이블 하나일 때(바로 지금과 같은 상황) 사용합니다. 다이나셋과 역할은 같지만 조금 더 빠릅니다. 하지만 실제 물리적인 테이블 하나이므로 레코드셋이 뷰(View)거나 저장 프로시저를 참조한다면 허용되지 않습니다.

 

MFC ODBC의 두개의 데이터 베이스 테이블 조인하기

대부분의 데이터베이스 프로그래머들은 조인(join)dl 2개 이상의 테이블에서 온 필드로 구성된 커다란 놀리적테이블이라는 것을 알고 있다. Student Registeration 데이터 베이스에서 Student 테이블을 Enrollent테이블과 조인하여 학생과 학생들이 등록된 수업의 목록을 얻을수 있다.

조인은 Visual c++를 사용하는 것이 쉽다. ClassWizard가 기존 레크드 집합에 테이블을 추가하게 해주기 때문이다. 약간의 추가 프로그래밍 작업이 필요할 뿐이다. 다음은 Enrollment테이블을 Student테이블과 조인하는 과정이다.

1.ClassWizard를 사용하여 Member Variables 탭의 CEx31aSet클래스에 엑세스한다. Update Columns버튼을 누른다음, Enrollment 테이블을 Student Registration 데이터베이스로부터 선택한다. 데이터 원본에 레코드 집합 클래스가 필요로 하는 모든 열이 들어있지 않음을 알리는 경고 메시지를 얻고 싶다면 Yes 버튼을 누르고 계속한다. 그 다음 Bina All버튼을 눌러 Enrollment필드에 대한 데이터 멤버를 추가한다.

2. 아래와 같이 CEx31aSet::GetDefaultSQl 함수를 수정하여 Student와 Enrollment테이블에 엑세스 한다.

CString Cex31aSet::GetDefaultSQL()

{

return _T("[Stuent],[enrollment]");

}

3. 이제 조인된 테이블에 2개의 StudentID필드가 있다. CEx31aSet::DoFieldExchange함수에서 StudentIID행을 수정하여 테이블 이름으로 필드에게 자격을 부여한다.

RFX_Long(pFX, _T("[Student].[StunedtID]"),m_StudentID);

4. CEx31aView::OnInitialUpdate 함수에서 레코드 집합의 m_strFiliter문자열을 다음과 같이 설정한다.

m_pSet->m_strFilter="[Student].[StudentID]=[Enrollment].pStudentID]";

5. CEx31aView::OnDraw 함수에서 코드를 추가하여 새 Enrollment 필드를 표시한다. 다음은 그 예 중의 하나이다.

pDC->TextOot(pText.x+500,pText.y,m_pSet->m_CurseID);




http://blog.naver.com/ktg0629?Redirect=Log&logNo=10125001792

'Windows Prog' 카테고리의 다른 글

뷰 크기 지정  (0) 2011.12.31
[MFC] 두개의 테이블을 데이터 베이스에 연결하기  (0) 2011.12.28
-  (0) 2011.12.24
[펌] 프린터 관련 함수  (0) 2011.11.10
그동안 건강에 너무도 소홀했다  (0) 2011.11.05
Posted by Triany