다음을 통해 공유


CRecordset::Open

테이블을 검색 하거나 레코드 집합을 나타내는 쿼리를 수행 하 여 레코드 집합을 엽니다.

virtual BOOL Open( 
   UINT nOpenType = AFX_DB_USE_DEFAULT_TYPE, 
   LPCTSTR lpszSQL = NULL, 
   DWORD dwOptions = none  
);

매개 변수

  • nOpenType
    기본값을 그대로 AFX_DB_USE_DEFAULT_TYPE, 또는 사용 값에서 다음 중 하나를 열거형 OpenType:

    • CRecordset::dynaset 양방향 스크롤링을 사용 레코드 집합입니다.구성원 및 주문 레코드를 레코드 집합을 열 때 다른 사용자가 데이터 값을 변경한 다음 반입 작업 표시 됩니다 결정 됩니다.다이너셋은 레코드 집합 키 집합 구동 라고도 합니다.

    • CRecordset::snapshot 양방향 스크롤을 정적 레코드 집합입니다.레코드 집합이 열릴 때 구성원 및 레코드의 순서가 결정 됩니다. 레코드가 반입 될 때 데이터 값이 결정 됩니다.레코드 집합을 닫은 후 다시 열 때까지 다른 사용자가 변경한 내용이 표시 되지 않습니다.

    • CRecordset::dynamic 양방향 스크롤링을 사용 레코드 집합입니다.다른 사용자가 멤버 자격, 순서 및 데이터 값을 변경한 다음 반입 작업 볼 수 있습니다.참고가이 형식 레코드 집합의 여러 ODBC 드라이버 지원 하지 않습니다.

    • CRecordset::forwardOnly 읽기 전용 recordset을 앞 으로만 스크롤할.

      에 대 한 CRecordset, 기본값은 CRecordset::snapshot.기본값은 메커니즘 모두 ODBC와 상호 작용 하는 Visual C++ 마법사가 있습니다 CRecordset 및 DAO CDaoRecordset에 있는 다른 기본값.

    이러한 레코드 집합 형식에 대 한 자세한 내용은 레코드 집합 (ODBC).관련 기사 "를 사용 하 여 블록 및 스크롤형 커서"의 내용은 Windows SDK.

    주의 정보주의

    요청 된 형식을 지원 하지 않습니다 경우 프레임 워크 예외를 throw 합니다.

  • lpszSQL
    다음 중 하나를 포함 하는 문자열 포인터.

    • A NULL 포인터.

    • 테이블의 이름입니다.

    • SQL는 선택 문 (옵션으로 SQL 또는 ORDER BY 절).

    • A 전화 문은 미리 정의 된 쿼리 (저장된 프로시저)의 이름을 지정 합니다.중괄호 사이 공백을 삽입 하지 않을 수 있으므로 주의 해야 하는 전화 키워드.

    이 문자열에 대 한 자세한 내용은 테이블 및 클래스 마법사의 역할 설명 아래 설명은 참조 하십시오.

    [!참고]

    결과 집합의 열 순서는 RFX의 순서와 일치 해야 또는 대량 RFX 함수를 호출 하면 DoFieldExchange 또는 DoBulkFieldExchange 재정의 함수.

  • dwOptions
    아래 나열 된 값의 조합을 지정할 수 있는 비트 마스크입니다.몇 가지 상호 배타적입니다.기본값은 none입니다.

    • CRecordset::none 옵션을 설정 합니다.이 매개 변수 값을 다른 값으로 상호 배타적입니다.기본적으로 레코드 집합을 업데이트할 수 있습니다 편집 또는 삭제 와 함께 새 레코드를 추가할 수 있습니다 AddNew.업데이트 데이터 소스에도 그에 따라는 nOpenType 옵션을 지정 합니다.대량 추가 대 한 최적화를 사용할 수 없습니다.대량 행 페치가 구현 되지 않습니다.삭제 된 레코드 레코드 집합 탐색 중 건너뛸 수 없습니다.책갈피를 사용할 수 없습니다.더티 필드 자동 확인이 구현 됩니다.

    • CRecordset::appendOnly편집 또는 삭제 레코드 집합에 있습니다.허용 AddNew 만.이 옵션을 상호 배타적 수 CRecordset::readOnly.

    • CRecordset::readOnly 레코드 집합을 읽기 전용으로 엽니다.이 옵션을 상호 배타적 수 CRecordset::appendOnly.

    • CRecordset::optimizeBulkAdd SQL 준비 된 문을 사용 하 여 최적화 한 번에 여러 레코드를 추가 합니다.ODBC API 함수를 사용 한다고만 하면 적용 SQLSetPos 레코드 집합을 업데이트 합니다.첫 번째 업데이트가 커밋되지 않은 데이터 필드 표시를 결정 합니다.이 옵션을 상호 배타적 수 CRecordset::useMultiRowFetch.

    • CRecordset::useMultiRowFetch여러 행을 단일 반입 작업에서 검색할 수 있도록 대량을 행 페치를 구현 합니다.이 성능을 개선 하도록 설계 된 고급 기능입니다. 그러나 대량 레코드 필드 교환 클래스 마법사에서 지원 되지 않습니다.이 옵션을 상호 배타적 수 CRecordset::optimizeBulkAdd.사용자가 지정 하는 경우 CRecordset::useMultiRowFetch, 다음 옵션 CRecordset::noDirtyFieldCheck 자동으로 켜 집니다 (이중 버퍼링 사용할 수 없습니다). 앞 으로만 이동 가능한 레코드 집합을 옵션에서 CRecordset::useExtendedFetch 자동으로 켜 집니다.대량 행 페칭 (fetching) 하는 방법에 대 한 자세한 내용은 레코드 집합: 레코드 페치 대량 (ODBC).

    • CRecordset::skipDeletedRecords 레코드 집합을 탐색할 때 삭제 된 모든 레코드를 건너뜁니다.이 특정 관련 패치에서 성능이 느려집니다.이 옵션은 앞 으로만 이동 가능한 레코드 집합에 올바르지 않습니다.호출 하는 경우 이동 에 nRows 매개 변수를 0으로 설정 하는 CRecordset::skipDeletedRecords 옵션 집합을 이동 어설션 합니다.이때 CRecordset::skipDeletedRecords 유사 합니다 드라이버 압축, 행 삭제 의미는 레코드 집합에서 제거 됩니다.그러나 레코드 드라이버를 압축 하는 경우 다음 삭제할 레코드만 생략 됩니다. 레코드 집합이 열려 있는 동안 다른 사용자가 삭제 한 레코드를 건너뛸 없습니다 합니다.CRecordset::skipDeletedRecords 다른 사용자가 삭제 한 행을 건너뜁니다.

    • CRecordset::useBookmarks 책갈피는 레코드 집합에서 지원 되는 경우를 사용할 수 있습니다.책갈피 데이터 검색이 느려지지만 데이터 탐색에 대 한 성능 향상.앞 으로만 이동 가능한 레코드 집합에 사용할 수 없습니다.자세한 내용은 레코드 집합: 책갈피와 절대 위치 (ODBC).

    • CRecordset::noDirtyFieldCheck 더티 필드 자동 검사 (이중 버퍼링 해제)을 설정 합니다.이렇게 하면 성능이 향상 됩니다. 그러나 수동으로 필드는 커밋되지 않은 데이터를 호출 하 여 표시 하면 해야는 SetFieldDirtySetFieldNull 멤버 함수입니다.참고 해당 클래스에서 이중 버퍼링 CRecordset 클래스에 이중 버퍼링을 유사 CDaoRecordset.그러나 CRecordset, 개별 필드에; 이중 버퍼링을 사용할 수 없습니다 모든 필드에 대해 사용 하도록 설정 또는 모든 필드에 대해 사용 하지 않도록 설정 합니다.옵션을 지정 하는 경우 CRecordset::useMultiRowFetch, 다음 CRecordset::noDirtyFieldCheck ; 켜 집니다 그러나 SetFieldDirtySetFieldNull 대량 행 페치를 구현 하는 레코드 집합에 사용할 수 없습니다.

    • CRecordset::executeDirect SQL 준비 된 문을 사용 하지 마십시오.성능이 개선된 하는 경우이 옵션을 지정 된 Requery 멤버 함수를 호출 하지 것입니다.

    • CRecordset::useExtendedFetch 구현 SQLExtendedFetch 대신 SQLFetch.이 대량 앞 으로만 이동 가능한 레코드 집합에 행 페치를 구현 하기 위해 설계 되었습니다.옵션을 지정 하면 CRecordset::useMultiRowFetch 는 앞 으로만 이동 가능한 레코드 다음에 CRecordset::useExtendedFetch 자동으로 켜 집니다.

    • CRecordset::userAllocMultiRowBuffers 사용자 데이터에 대 한 저장소 버퍼를 할당 합니다.이 옵션을 사용 하 여 함께에서 CRecordset::useMultiRowFetch 저장소; 할당 하려는 경우 그렇지 않으면 프레임 워크는 자동으로 필요한 저장소를 할당 합니다.자세한 내용은 레코드 집합: 레코드 페치 대량 (ODBC).참고 지정 하는 CRecordset::userAllocMultiRowBuffers 를 지정 하지 않고 CRecordset::useMultiRowFetch 의 경우 실패 한 어설션이 발생 합니다.

반환 값

0이 아닌 경우는 CRecordset 개체를 성공적으로 된 열입니다. 그렇지 않으면 0 CDatabase::Open (있는 경우) 0을 반환 합니다.

설명

레코드 집합에서 정의 된 쿼리를 실행 하려면이 멤버 함수를 호출 해야 합니다.호출 하기 전에 열려, 레코드 집합 개체를 생성 해야 합니다.

이 레코드 집합은 데이터 원본이 연결을 호출 하기 전에 레코드 집합의 구성 방법에 따라 열려.전달 하는 경우는 CDatabase 개체는 데이터 원본에 연결 되지 않은 레코드 집합 생성자에이 멤버 함수를 사용 하 여 GetDefaultConnect 데이터베이스 개체를 열려고 시도 합니다.전달 하는 경우 NULL 레코드 집합 생성자에는 생성자를 생성 한 CDatabase 개체를 및 열려 데이터베이스 개체에 연결 하려고 시도.이러한 다양 한 상황에서 연결 및 레코드 집합 닫기에 대 한 자세한 내용은 닫기.

[!참고]

액세스를 통해 데이터 원본에는 CRecordset 개체를 항상 공유 합니다.달리는 CDaoRecordset 클래스를 사용할 수 없습니다는 CRecordset 개체 데이터 소스를 단독으로 엽니다.

호출 하면 열려, SQL에 일반적으로 쿼리를 선택 문을 다음 표의 기준에 따라 레코드를 선택 합니다.

LpszSQL 매개 변수 값

레코드 선택에 의해 결정 됩니다.

예제

NULL

반환 문자열 GetDefaultSQL.

 

SQL 테이블 이름

테이블 목록에서 모든 열 DoFieldExchange 또는 DoBulkFieldExchange.

"Customer"

미리 정의 된 쿼리 (저장된 프로시저) 이름

쿼리가 반환할 정의 된 열입니다.

"{call OverDueAccts}"

선택 열 목록 FROM 테이블 목록

지정 된 테이블에서 지정 된 열입니다.

"SELECT CustId, CustName FROM

Customer"

주의 정보주의

추가 공백이 SQL 문자열에 삽입 됩니다.예를 들어, 여는 중괄호 사이 공백이 삽입 및 전화 키워드, MFC SQL 문자열 테이블 이름으로 잘못 해석 하 고 통합할 합니다는 선택 문을 예외가 throw 됩니다.출력 매개 변수를 미리 정의 된 쿼리를 사용 하는 경우 마찬가지로 중괄호 사이 공백을 넣지 마십시오 및 '?' 기호입니다.공백 앞에 중괄호를 삽입 해야 마지막으로 호출 문 이전에 선택 키워드에는 선택 문.

전달 하는 것이 일반적인 절차 NULL열려. 이 경우 열려 전화 GetDefaultSQL.파생 사용 하는 경우 CRecordset 클래스를 GetDefualtSQL 클래스 마법사에서 지정 된 테이블 이름을 제공 합니다.대신에 다른 정보를 지정할 수 있습니다에서 lpszSQL 매개 변수.

어떤 전달, 열려 쿼리의 최종 SQL 문자열을 만듭니다 (문자열 SQL 있을 수 있습니다 위치ORDER BY 절을 추가 하는 lpszSQL 문자열을 전달 하면) 다음 쿼리를 실행 하 고.호출 하 여 생성 된 문자열을 검사할 수 있습니다 GetSQL 호출 열려.레코드 집합 SQL 문을 생성 및 레코드를 선택 하는 방법에 대 한 자세한 내용은 문서 레코드 집합: 레코드 선택 방법 (ODBC).

레코드 집합 클래스의 필드 데이터 멤버를 선택 하는 데이터의 열에 바인딩됩니다.모든 레코드를 반환 하는 경우 첫 번째 레코드가 현재 레코드가 됩니다.

필터 또는 정렬, 레코드 집합에 대 한 옵션을 설정 하려는 경우 이러한 레코드 집합 개체를 생성 한 후에 호출 하기 전에 지정 열려.원하면 후 레코드 집합에 레코드를 새로 고치려면 레코드 집합이 이미 열려, 호출 Requery.

추가 예제를 비롯 한 자세한 내용은 문서를 참조 하십시오. 레코드 집합 (ODBC), 레코드 집합: 레코드 선택 방법 (ODBC), 및 레코드 집합: 만들기 및 닫기 레코드 집합 (ODBC).

예외

이 메서드가 형식의 예외를 throw 할 수 있습니다 CDBException *CMemoryException*.

예제

다음 코드 예제에서는 여러 가지 형태의 표시는 열려 호출 합니다.

// rsSnap, rsLName, and rsDefault are CRecordset or CRecordset-derived 
// objects

// Open rs using the default SQL statement, implement bookmarks, and turn 
// off automatic dirty field checking
rsSnap.Open(CRecordset::snapshot, NULL, CRecordset::useBookmarks | 
   CRecordset::noDirtyFieldCheck);

// Pass a complete SELECT statement and open as a dynaset
rsLName.Open(CRecordset::dynaset, _T("Select L_Name from Customer"));

// Accept all defaults
rsDefault.Open();

요구 사항

헤더: afxdb.h

참고 항목

참조

CRecordset 클래스

계층 구조 차트

CRecordset::CRecordset

CRecordset::Close

CRecordset::GetDefaultSQL

CRecordset::GetSQL

CRecordset::m_strFilter

CRecordset::m_strSort

CRecordset::Requery