레코드 집합(ODBC)
이 항목은 MFC ODBC 클래스에 적용됩니다.
CRecordset 개체는 데이터 소스에서 선택한 레코드 집합을 나타냅니다. 다음과 같은 데이터 소스에서 레코드를 선택할 수 있습니다.
테이블
쿼리
하나 이상의 테이블에 액세스하는 저장 프로시저
테이블을 기반으로 하는 레코드 집합의 예로 Customer 테이블에 액세스하는 "모든 고객"이라는 레코드 집합을 만들 수 있습니다. 쿼리의 예로는 "Joe Smith의 모든 구매서"가 있습니다. 미리 정의된 쿼리라고도 하는 저장 프로시저를 기반으로 하는 레코드 집합의 예로 백 엔드 데이터베이스의 저장 프로시저를 호출하는 "연체된 계정"을 만들 수 있습니다. 레코드 집합은 동일한 데이터 소스의 테이블을 두 개 이상 조인할 수 있지만 서로 다른 데이터 소스의 테이블을 조인할 수는 없습니다.
참고
마법사를 사용하여 레코드 집합 클래스를 파생시키는 방법은 MFC ODBC 소비자 추가 및 MFC 응용 프로그램 마법사, 데이터베이스 지원을 참조하십시오.
참고
일부 ODBC 드라이버는 데이터베이스 뷰를 지원합니다. 여기서 뷰는 원래 SQL CREATE VIEW 문으로 만든 쿼리를 말합니다. 현재 마법사에서는 뷰를 지원하지 않지만 뷰를 지원하도록 코드로 직접 작성할 수는 있습니다.
레코드 집합 기능
모든 레코드 집합 개체에 다음과 같은 기능이 있습니다.
데이터 소스가 읽기 전용이 아니면 레코드 집합을 업데이트, 추가 또는 읽기 전용으로 지정할 수 있습니다. 업데이트 가능한 레코드 집합인 경우 드라이버에서 적절한 잠금 지원 기능을 제공하면 비관적 또는 낙관적 잠금 방법을 사용할 수 있습니다. 데이터 소스가 읽기 전용이면 레코드 집합도 읽기 전용입니다.
멤버 함수를 호출하여 선택된 레코드를 스크롤할 수 있습니다.
레코드를 필터하여 사용 가능한 레코드에서 선택될 레코드를 제한할 수 있습니다.
하나 이상의 열에서 오름차순 또는 내림차순으로 레코드를 정렬할 수 있습니다.
레코드 집합을 매개 변수화하여 런타임에 선택될 레코드 집합을 제한할 수 있습니다.
스냅숏 및 다이너셋
스냅숏 및 다이너셋은 레코드 집합의 두 가지 기본 형식입니다. CRecordset 클래스는 두 유형을 모두 지원합니다. 이러한 유형은 모든 레코드 집합의 공통 특징을 공유하지만 각기 고유한 방식으로 공통 기능을 확장하기도 합니다. 스냅숏은 데이터의 정적 뷰를 제공하며 보고서 또는 특정 시간대의 데이터 뷰를 필요로 하는 경우에 유용합니다. 반면에 다이너셋은 레코드 집합을 다시 쿼리하거나 새로 고치지 않고 다른 사용자가 업데이트한 레코드 집합 내용을 표시하려는 경우에 유용합니다. 스냅숏과 다이너셋은 업데이트할 수 있거나 읽기 전용입니다. 다른 사용자가 추가하거나 삭제한 레코드를 반영하려면 CRecordset::Requery를 호출합니다.
또한 CRecordset에서는 동적 레코드 집합과 앞으로만 이동 가능한 레코드 집합 등 두 가지 레코드 집합을 사용할 수 있습니다. 동적 레코드 집합은 다이너셋과 유사하지만 CRecordset::Requery를 호출하지 않고 추가되거나 삭제된 모든 레코드를 반영합니다. 따라서 일반적으로 동적 레코드 집합은 DBMS에서 처리되는 시간이 길며 많은 ODBC 드라이버에서 지원되지 않습니다. 반면, 앞으로만 이동 가능한 레코드 집합을 사용하면 업데이트나 뒤로 스크롤할 필요가 없는 레코드 집합에서 가장 효율적으로 데이터에 액세스할 수 있습니다. 예를 들어, 데이터를 앞으로만 이동하는 데이터 소스 간에 데이터를 마이그레이션하는 데 앞으로만 이동 가능한 레코드 집합을 사용할 수 있습니다. 앞으로만 이동 가능한 레코드 집합을 사용하려면 다음과 같은 작업을 수행해야 합니다.
옵션 CRecordset::forwardOnly를 Open 멤버 함수의 nOpenType 매개 변수로 전달합니다.
Open의 dwOptions 매개 변수에 CRecordset::readOnly를 지정합니다.
참고
다이너셋 지원에 필요한 ODBC 드라이버 요구 사항에 대한 자세한 내용은 ODBC를 참조하십시오. 이 버전의 Visual C++에 포함된 ODBC 드라이버 목록 및 추가 드라이버를 얻는 방법에 대한 내용은 ODBC 드라이버 목록을 참조하십시오.
사용자 레코드 집합
액세스하려는 모든 개별 테이블, 뷰 또는 저장 프로시저에 대해 일반적으로 CRecordset에서 파생된 클래스를 정의합니다. 이 경우 레코드 집합 하나가 둘 이상의 테이블에 있는 열을 나타내는 데이터베이스 조인은 예외입니다. 레코드 집합 클래스를 파생시킬 때 DDX(대화 상자 데이터 교환) 메커니즘과 유사한 Bulk RFX(대량 레코드 필드 교환) 메커니즘이나 RFX(레코드 필드 교환) 메커니즘을 사용합니다. RFX 및 Bulk RFX 메커니즘을 사용하면 데이터 소스에서 레코드 집합으로 데이터를 간편하게 전송할 수 있습니다. RFX는 데이터를 레코드 집합에서 데이터 소스로 전송하는 기능도 제공합니다. 자세한 내용은 RFX 및 레코드 집합: 대량 레코드 페치를 참조하십시오.
레코드 집합 개체를 사용하여 모든 레코드에 액세스할 수 있도록 합니다. MoveNext, MovePrev 같은 CRecordset 멤버 함수를 사용하여 선택된 여러 레코드를 스크롤합니다. 또한 레코드 집합 개체는 선택된 레코드 중 하나, 즉 현재 레코드만을 나타냅니다. 데이터베이스 쿼리의 결과 테이블이나 레코드의 열에 해당하는 레코드 집합 클래스 멤버 변수를 선언하여 현재 레코드의 필드를 검사할 수 있습니다. 레코드 집합 데이터 멤버에 대한 자세한 내용은 레코드 집합: 아키텍처(ODBC)를 참조하십시오.
레코드 집합 개체의 사용법에 대한 자세한 내용은 다음 항목에서 설명합니다. 이 항목은 기능별 범주로 나뉘어 순서대로 읽을 수 있도록 찾기 순서에 따라 나열되어 있습니다.