다이너셋
이 항목에서는 다이나셋에 대해 설명하고 해당 가용성에 대해 설명합니다.
참고 항목
이 항목은 CRecordset을 포함하여 MFC ODBC 클래스에 적용됩니다. DAO 클래스의 다이내셋에 대한 자세한 내용은 CDaoRecordset을 참조하세요. DAO를 사용하면 다이나셋 형식 레코드 집합을 열 수 있습니다.
다이내셋은 동적 속성이 있는 레코드 집합입니다. 수명 동안 다이나셋 모드(일반적으로 다이나셋이라고 함)의 레코드 집합 개체는 다음과 같은 방식으로 데이터 원본과 동기화된 상태로 유지됩니다. 다중 사용자 환경에서 다른 사용자는 다이너셋에 있는 레코드를 편집하거나 삭제하거나 다이너셋이 나타내는 테이블에 레코드를 추가할 수 있습니다. 애플리케이션이 레코드 집합에 추가하거나 삭제한 레코드가 다이나셋에 반영됩니다. 다른 사용자가 테이블에 추가하는 레코드는 해당 멤버 함수를 호출 Requery
하여 다이내셋을 다시 작성할 때까지 다이나셋에 반영되지 않습니다. 다른 사용자가 레코드를 삭제하면 MFC 코드가 레코드 집합의 삭제를 건너뜁니다. 영향을 받는 레코드로 스크롤하는 즉시 다른 사용자의 기존 레코드 편집 변경 내용이 다이나셋에 반영됩니다.
마찬가지로 다이나셋의 레코드에 대한 편집 내용은 다른 사용자가 사용 중인 다이나셋에 반영됩니다. 추가한 레코드는 해당 다이너셋을 다시 쿼리할 때까지 다른 사용자의 다이너셋에 반영되지 않습니다. 삭제한 레코드는 다른 사용자의 레코드 집합에서 "삭제됨"으로 표시됩니다. 동일한 데이터베이스(여러 CDatabase
개체)에 여러 개의 연결이 있는 경우 해당 연결과 연결된 레코드 집합은 다른 사용자의 레코드 집합과 동일한 상태를 갖습니다.
다이나셋은 항공사 예약 시스템에서처럼 데이터가 동적이어야 하는 경우에 가장 유용합니다.
참고 항목
다이너셋을 사용하려면 다이너셋을 지원하는 데이터 원본에 대한 ODBC 드라이버가 있어야 하며 ODBC 커서 라이브러리를 로드하지 않아야 합니다. 자세한 내용은 Dynasets의 가용성을 참조 하세요.
레코드 집합이 다이나셋임을 지정하려면 레코드 집합 개체의 멤버 함수에 Open
첫 번째 매개 변수로 전달 CRecordset::dynaset
합니다.
참고 항목
업데이트할 수 있는 다이내셋의 경우 ODBC 드라이버는 위치가 지정된 업데이트 문 또는 ODBC API 함수를 ::SQLSetPos
지원해야 합니다. 둘 다 지원되는 경우 MFC는 효율성을 위해 사용합니다 ::SQLSetPos
.
Dynasets의 가용성
다음 요구 사항이 충족되는 경우 MFC 데이터베이스 클래스는 다이나셋을 지원합니다.
이 데이터 원본에는 ODBC 커서 라이브러리 DLL을 사용하지 않아야 합니다.
커서 라이브러리를 사용하는 경우 다이너셋 지원에 필요한 기본 ODBC 드라이버의 일부 기능을 마스킹합니다. 다이너셋을 사용하려는 경우(이 섹션의 나머지 부분에서 설명한 대로 ODBC 드라이버에 다이너셋에 필요한 기능이 있음) 개체를 만들
CDatabase
때 MFC가 커서 라이브러리를 로드하지 않도록 할 수 있습니다. 자세한 내용은 ODBC 및 클래스의 OpenEx 또는 Open 멤버 함수를 참조하세요CDatabase
.ODBC 용어에서 다이너셋 및 스냅샷을 커서라고 합니다. 커서는 레코드 집합에서 해당 위치를 추적하는 데 사용되는 메커니즘입니다.
데이터 원본에 대한 ODBC 드라이버는 키 집합 기반 커서를 지원해야 합니다.
키 집합 기반 커서는 키 집합을 가져오고 저장하여 테이블의 데이터를 관리합니다. 키는 사용자가 특정 레코드로 스크롤할 때 테이블에서 현재 데이터를 가져오는 데 사용됩니다. 드라이버가 이 지원을 제공하는지 여부를 확인하려면 SQL_SCROLL_OPTIONS 매개 변수를 사용하여 ODBC API 함수를 호출
::SQLGetInfo
합니다.키 집합 지원 없이 다이내셋을 열려고 하면
CDBException
반환 코드 값이 AFX_SQL_ERROR_DYNASET_NOT_SUPPORTED.데이터 원본에 대한 ODBC 드라이버는 확장 페치를 지원해야 합니다.
확장 인출은 SQL 쿼리의 결과 레코드를 뒤로 스크롤하고 앞으로 스크롤하는 기능입니다. 드라이버가 이 기능을 지원하는지 여부를 확인하려면 SQL_API_SQLEXTENDEDFETCH 매개 변수를 사용하여 ODBC API 함수를 호출
::SQLGetFunctions
합니다.
업데이트 가능한 다이내셋(또는 해당 문제에 대한 스냅샷)을 원하는 경우 ODBC 드라이버도 ODBC API 함수 또는 위치가 지정된 업데이트를 지원 ::SQLSetPos
해야 합니다. 이 ::SQLSetPos
함수를 사용하면 MFC가 SQL 문을 보내지 않고 데이터 원본을 업데이트할 수 있습니다. 이 지원을 사용할 수 있는 경우 MFC는 SQL을 사용하여 업데이트를 만드는 데 기본 설정으로 사용합니다. 드라이버가 지원하는지 여부를 확인하려면 SQL_POS_OPERATIONS 매개 변수를 사용하여 호출 ::SQLGetInfo
합니다::SQLSetPos
.
위치 지정된 업데이트는 SQL 구문(WHERE CURRENT OF<cursorname> 형식)을 사용하여 데이터 원본의 테이블에서 특정 행을 식별합니다. 드라이버가 위치 지정된 업데이트를 지원하는지 여부를 확인하려면 SQL_POSITIONED_STATEMENTS 매개 변수를 사용하여 호출 ::SQLGetInfo
합니다.
일반적으로 MFC 다이내셋(정방향 전용 레코드 집합은 아님)에는 수준 2 API 규격이 있는 ODBC 드라이버가 필요합니다. 데이터 원본에 대한 드라이버가 수준 1 API 집합을 준수하는 경우 업데이트 가능한 스냅샷과 읽기 전용 스냅샷 및 전달 전용 레코드 집합을 모두 사용할 수 있지만 다이내셋은 사용할 수 없습니다. 그러나 수준 1 드라이버는 확장 페치 및 키 집합 기반 커서를 지원하는 경우 다이너셋을 지원할 수 있습니다. ODBC 규칙 수준에 대한 자세한 내용은 ODBC를 참조하세요.
참고 항목
스냅샷과 다이내셋을 모두 사용하려면 두 개의 서로 다른 개체(서로 다른 CDatabase
두 연결)를 기반으로 해야 합니다.
ODBC 커서 라이브러리에서 유지 관리하는 중간 스토리지를 사용하는 스냅샷과 달리 다이너셋은 스크롤하는 즉시 데이터 원본에서 직접 레코드를 가져옵니다. 이렇게 하면 데이터 원본과 동기화된 다이나셋에서 원래 선택한 레코드가 유지됩니다.
이 버전의 Visual C++에 포함된 ODBC 드라이버 목록과 추가 드라이버를 가져오는 방법에 대한 자세한 내용은 ODBC 드라이버 목록을 참조하세요.