다음을 통해 공유


CRecordset 클래스

데이터 소스에서 선택한 레코드 집합을 나타냅니다.

구문

class CRecordset : public CObject

멤버

Public 생성자

속성 설명
CRecordset::CRecordset CRecordset 개체를 생성합니다. 파생 클래스는 이 클래스를 호출하는 생성자를 제공해야 합니다.

공용 메서드

이름 설명
CRecordset::AddNew 새 레코드 추가를 준비합니다. 추가를 완료하려면 호출 Update 합니다.
CRecordset::CanAppend 멤버 함수를 통해 레코드 집합에 새 레코드를 추가할 수 있으면 0이 아닌 값을 AddNew 반환합니다.
CRecordset::CanBookmark 레코드 집합이 책갈피를 지원하는 경우 0이 아닌 값을 반환합니다.
CRecordset::Cancel 두 번째 스레드에서 비동기 작업 또는 프로세스를 취소합니다.
CRecordset::CancelUpdate 작업 Edit 으로 인해 AddNew 보류 중인 업데이트를 취소합니다.
CRecordset::CanRestart 레코드 집합의 쿼리를 다시 실행하기 위해 호출할 수 있는 경우 Requery 0이 아닌 값을 반환합니다.
CRecordset::CanScroll 레코드를 스크롤할 수 있으면 0이 아닌 값을 반환합니다.
CRecordset::CanTransact 데이터 원본이 트랜잭션을 지원하는 경우 0이 아닌 값을 반환합니다.
CRecordset::CanUpdate 레코드 집합을 업데이트할 수 있으면 0이 아닌 값을 반환합니다(레코드를 추가, 업데이트 또는 삭제할 수 있습니다).
CRecordset::CheckRowsetError 레코드를 가져오는 동안 생성된 오류를 처리하기 위해 호출됩니다.
CRecordset::Close 레코드 집합과 연결된 ODBC HSTMT 를 닫습니다.
CRecordset::Delete 레코드 집합에서 현재 레코드를 삭제합니다. 삭제 후 다른 레코드로 명시적으로 스크롤해야 합니다.
CRecordset::DoBulkFieldExchange 데이터 원본에서 레코드 집합으로 대량 데이터 행을 교환하기 위해 호출됩니다. 대량 레코드 필드 교환(Bulk RFX)을 구현합니다.
CRecordset::DoFieldExchange 레코드 집합의 필드 데이터 멤버와 데이터 원본의 해당 레코드 간에 양방향으로 데이터를 교환하기 위해 호출됩니다. RFX(레코드 필드 교환)를 구현합니다.
CRecordset::Edit 현재 레코드의 변경 내용을 준비합니다. 편집을 완료하려면 호출 Update 합니다.
CRecordset::FlushResultSet 미리 정의된 쿼리를 사용할 때 검색할 다른 결과 집합이 있는 경우 0이 아닌 값을 반환합니다.
CRecordset::GetBookmark 매개 변수 개체에 레코드의 책갈피 값을 할당합니다.
CRecordset::GetDefaultConnect 기본 연결 문자열 가져오기 위해 호출됩니다.
CRecordset::GetDefaultSQL 실행할 기본 SQL 문자열을 가져오기 위해 호출됩니다.
CRecordset::GetFieldValue 레코드 집합에 있는 필드의 값을 반환합니다.
CRecordset::GetODBCFieldCount 레코드 집합의 필드 수를 반환합니다.
CRecordset::GetODBCFieldInfo 레코드 집합의 필드에 대한 특정 종류의 정보를 반환합니다.
CRecordset::GetRecordCount 레코드 집합의 레코드 수를 반환합니다.
CRecordset::GetRowsetSize 단일 인출 중에 검색하려는 레코드 수를 반환합니다.
CRecordset::GetRowsFetched 인출하는 동안 검색된 실제 행 수를 반환합니다.
CRecordset::GetRowStatus 인출 후 행의 상태를 반환합니다.
CRecordset::GetSQL 레코드 집합에 대한 레코드를 선택하는 데 사용되는 SQL 문자열을 가져옵니다.
CRecordset::GetStatus 레코드 집합의 상태( 현재 레코드의 인덱스 및 레코드의 최종 개수를 얻었는지 여부)를 가져옵니다.
CRecordset::GetTableName 레코드 집합의 기반이 되는 테이블의 이름을 가져옵니다.
CRecordset::IsBOF 레코드 집합이 첫 번째 레코드 앞에 배치된 경우 0이 아닌 값을 반환합니다. 현재 레코드가 없습니다.
CRecordset::IsDeleted 레코드 집합이 삭제된 레코드에 배치된 경우 0이 아닌 값을 반환합니다.
CRecordset::IsEOF 레코드 집합이 마지막 레코드 뒤의 위치에 있으면 0이 아닌 값을 반환합니다. 현재 레코드가 없습니다.
CRecordset::IsFieldDirty 현재 레코드의 지정된 필드가 변경된 경우 0이 아닌 값을 반환합니다.
CRecordset::IsFieldNull 현재 레코드의 지정된 필드가 null(값 없음)이면 0이 아닌 값을 반환합니다.
CRecordset::IsFieldNullable 현재 레코드의 지정된 필드를 null(값 없음)로 설정할 수 있으면 0이 아닌 값을 반환합니다.
CRecordset::IsOpen 이전에 호출된 경우 Open 0이 아닌 값을 반환합니다.
CRecordset::Move 레코드 집합을 현재 레코드에서 지정된 수의 레코드로 어느 방향으로든 배치합니다.
CRecordset::MoveFirst 레코드 집합의 첫 번째 레코드에 현재 레코드를 배치합니다. 먼저 테스트합니다 IsBOF .
CRecordset::MoveLast 마지막 레코드 또는 마지막 행 집합에 현재 레코드를 배치합니다. 먼저 테스트합니다 IsEOF .
CRecordset::MoveNext 현재 레코드를 다음 레코드 또는 다음 행 집합에 배치합니다. 먼저 테스트합니다 IsEOF .
CRecordset::MovePrev 이전 레코드 또는 이전 행 집합에 현재 레코드를 배치합니다. 먼저 테스트합니다 IsBOF .
CRecordset::OnSetOptions 지정된 ODBC 문에 대한 옵션(선택 시 사용)을 설정하기 위해 호출됩니다.
CRecordset::OnSetUpdateOptions 지정된 ODBC 문에 대한 옵션(업데이트 시 사용)을 설정하기 위해 호출됩니다.
CRecordset::Open 테이블을 검색하거나 레코드 집합이 나타내는 쿼리를 수행하여 레코드 집합을 엽니다.
CRecordset::RefreshRowset 지정된 행의 데이터와 상태를 새로 고칩니다.
CRecordset::Requery 레코드 집합의 쿼리를 다시 실행하여 선택한 레코드를 새로 고칩니다.
CRecordset::SetAbsolutePosition 레코드 집합을 지정된 레코드 번호에 해당하는 레코드에 배치합니다.
CRecordset::SetBookmark 책갈피로 지정된 레코드에 레코드 집합을 배치합니다.
CRecordset::SetFieldDirty 현재 레코드의 지정된 필드를 변경된 것으로 표시합니다.
CRecordset::SetFieldNull 현재 레코드에서 지정된 필드의 값을 null(값 없음)로 설정합니다.
CRecordset::SetLockingMode 잠금 모드를 "낙관적" 잠금(기본값) 또는 "비관적" 잠금으로 설정합니다. 업데이트를 위해 레코드가 잠기는 방법을 결정합니다.
CRecordset::SetParamNull 지정된 매개 변수를 null로 설정합니다(값 없음).
CRecordset::SetRowsetCursorPosition 행 집합 내의 지정된 행에 커서를 놓습니다.
CRecordset::SetRowsetSize 인출하는 동안 검색할 레코드 수를 지정합니다.
CRecordset::Update 데이터 원본에 AddNew 새 데이터 또는 편집된 데이터를 저장하여 또는 Edit 작업을 완료합니다.

공용 데이터 멤버

속성 설명
CRecordset::m_hstmt 레코드 집합에 대한 ODBC 문 핸들을 포함합니다. HSTMT.
CRecordset::m_nFields 레코드 집합의 필드 데이터 멤버 수를 포함합니다. UINT.
CRecordset::m_nParams 레코드 집합의 매개 변수 데이터 멤버 수를 포함합니다. UINT.
CRecordset::m_pDatabase 레코드 집합이 데이터 원본에 CDatabase 연결된 개체에 대한 포인터를 포함합니다.
CRecordset::m_strFilter CString SQL(구조적 쿼리 언어) WHERE 절을 지정하는 a를 포함합니다. 필터로 사용하여 특정 조건을 충족하는 레코드만 선택합니다.
CRecordset::m_strSort SQL ORDER BY 절을 CString 지정하는 a를 포함합니다. 레코드 정렬 방법을 제어하는 데 사용됩니다.

설명

"레코드 집합"이라고 CRecordset 하는 개체는 일반적으로 다이나셋과 스냅샷의 두 가지 형태로 사용됩니다. 다이내셋은 다른 사용자가 수행한 데이터 업데이트와 동기화된 상태로 유지됩니다. 스냅샷은 데이터의 정적 뷰입니다. 각 양식은 레코드 집합이 열릴 때 고정된 레코드 집합을 나타냅니다. 다이나셋의 레코드로 스크롤하면 다른 사용자 또는 애플리케이션의 다른 레코드 집합에 의해 레코드가 변경된 내용이 반영됩니다.

참고 항목

ODBC(Open Database Connectivity) 클래스 대신 DAO(Data Access Objects) 클래스를 사용하는 경우 대신 클래스 CDaoRecordset 를 사용합니다. 자세한 내용은 개요: 데이터베이스 프로그래밍을 참조 하세요.

두 종류의 레코드 집합을 사용하려면 일반적으로 애플리케이션별 레코드 집합 클래스 CRecordset를 파생합니다. 레코드 집합은 데이터 원본에서 레코드를 선택하고 다음을 수행할 수 있습니다.

  • 레코드를 스크롤합니다.

  • 레코드를 업데이트하고 잠금 모드를 지정합니다.

  • 데이터 원본에서 사용할 수 있는 레코드 중에서 선택한 레코드를 제한하도록 레코드 집합을 필터링합니다.

  • 레코드 집합을 정렬합니다.

  • 레코드 집합을 매개 변수화하여 런타임까지 알려지지 않은 정보를 사용하여 선택 항목을 사용자 지정합니다.

클래스를 사용하려면 데이터베이스를 열고 레코드 집합 개체를 생성하여 생성자에 포인터를 개체에 CDatabase 전달합니다. 그런 다음, 개체가 다이너셋인지 스냅샷인지 지정할 수 있는 레코드 집합의 Open 멤버 함수를 호출합니다. 호출 Open 은 데이터 원본에서 데이터를 선택합니다. 레코드 집합 개체를 연 후 해당 멤버 함수 및 데이터 멤버를 사용하여 레코드를 스크롤하고 해당 함수에서 작동합니다. 사용 가능한 작업은 개체가 다이너셋인지 스냅샷인지, 업데이트 가능한지 읽기 전용인지 여부(ODBC(Open Database Connectivity) 데이터 원본의 기능에 따라 달라지거나 대량 행 가져오기를 구현했는지 여부에 따라 달라집니다. 호출 후 변경되거나 추가되었을 수 있는 레코드를 Open 새로 고치려면 개체의 Requery 멤버 함수를 호출합니다. 개체의 Close 멤버 함수를 호출하고 완료하면 개체를 삭제합니다.

파생 CRecordset 클래스에서 레코드 필드 교환(RFX) 또는 대량 레코드 필드 교환(Bulk RFX)은 레코드 필드 읽기 및 업데이트를 지원하는 데 사용됩니다.

레코드 집합 및 레코드 필드 교환에 대한 자세한 내용은 개요: 데이터베이스 프로그래밍, 레코드 집합(ODBC), 레코드 집합: 대량 레코드 가져오기(ODBC) 및 RFX(레코드 필드 교환) 문서를 참조하세요. 다이내셋 및 스냅샷에 대한 포커스는 Dynaset스냅샷 문서를 참조하세요.

상속 계층

CObject

CRecordset

요구 사항

머리글: afxdb.h

CRecordset::AddNew

테이블에 새 레코드를 추가할 준비를 합니다.

virtual void AddNew();

설명

새로 추가된 레코드를 Requery 보려면 멤버 함수를 호출해야 합니다. 레코드의 필드는 처음에 Null입니다. (데이터베이스 용어에서 Null은 "값 없음"을 의미하며 C++의 NULL과 동일하지 않습니다. 작업을 완료하려면 멤버 함수를 Update 호출해야 합니다. Update 는 변경 내용을 데이터 원본에 저장합니다.

참고 항목

대량 행 페치를 구현한 경우 호출 AddNew할 수 없습니다. 이로 인해 어설션이 실패합니다. 클래스 CRecordset 는 대량 데이터 행을 업데이트하는 메커니즘을 제공하지 않지만 ODBC API SQLSetPos함수를 사용하여 고유한 함수를 작성할 수 있습니다. 대량 행 페치 에 대한 자세한 내용은 레코드 집합: 대량 레코드 가져오기(ODBC)를 참조하세요.

AddNew 는 레코드 집합의 필드 데이터 멤버를 사용하여 비어 있는 새 레코드를 준비합니다. 호출 AddNew한 후 레코드 집합의 필드 데이터 멤버에서 원하는 값을 설정합니다. (다음을 호출 할 필요가 없습니다.이 용도로 멤버 함수를 편집 합니다. 기존 레코드에만 사용합니다 Edit .) 호출 Update하면 필드 데이터 멤버의 변경된 값이 데이터 원본에 저장됩니다.

주의

호출 Update하기 전에 새 레코드로 스크롤하면 새 레코드가 손실되고 경고가 표시되지 않습니다.

데이터 원본이 트랜잭션을 지원하는 경우 호출을 트랜잭션의 일부로 만들 AddNew 수 있습니다. 트랜잭션에 대한 자세한 내용은 클래스를 참조하세요 CDatabase. 를 호출하기 전에 호출 CDatabase::BeginTrans AddNew합니다.

참고 항목

다이내셋의 경우 새 레코드가 마지막 레코드로 레코드 집합에 추가됩니다. 추가된 레코드는 스냅샷에 추가되지 않습니다. 레코드 집합을 새로 고치려면 호출 Requery 해야 합니다.

멤버 함수가 호출되지 않은 레코드 집합 Open 을 호출 AddNew 하는 것은 불법입니다. 추가할 수 없는 레코드 집합을 호출 AddNew 하면 A CDBException 가 throw됩니다. 를 호출 CanAppend하여 레코드 집합을 업다이트할 수 있는지 여부를 확인할 수 있습니다.

자세한 내용은 레코드 집합: 레코드 집합 ODBC(레코드 집합 업데이트) 방법, 레코드 집합: 레코드 추가, 업데이트 및 삭제(ODBC) 및 트랜잭션(ODBC)을 참조하세요.

예시

참조 트랜잭션: 레코드 집합에서 트랜잭션 수행(ODBC).

CRecordset::CanAppend

이전에 연 레코드 집합에서 새 레코드를 추가할 수 있는지 여부를 결정합니다.

BOOL CanAppend() const;

반환 값

레코드 집합에서 새 레코드를 추가할 수 있는 경우 0이 아닌 경우 그렇지 않으면 0입니다. CanAppend 는 레코드 집합을 읽기 전용으로 연 경우 0을 반환합니다.

CRecordset::CanBookmark

레코드 집합에서 책갈피를 사용하여 레코드를 표시할 수 있는지 여부를 결정합니다.

BOOL CanBookmark() const;

반환 값

레코드 집합이 책갈피를 지원하는 경우 0이 아닌 경우 그렇지 않으면 0입니다.

설명

이 함수는 멤버 함수의 매개 변수에 있는 dwOptions 옵션과 Open 독립적 CRecordset::useBookmarks 입니다. CanBookmark 는 지정된 ODBC 드라이버 및 커서 유형이 책갈피를 지원하는지 여부를 나타냅니다. CRecordset::useBookmarks 은 지원되는 경우 책갈피를 사용할 수 있는지 여부를 나타냅니다.

참고 항목

책갈피는 전달 전용 레코드 집합에서 지원되지 않습니다.

책갈피 및 레코드 집합 탐색에 대한 자세한 내용은 Recordset: ODBC(책갈피 및 절대 위치) 및 레코드 집합: 스크롤(ODBC) 문서를 참조하세요.

CRecordset::Cancel

데이터 원본이 진행 중인 비동기 작업 또는 두 번째 스레드의 프로세스를 취소할 것을 요청합니다.

void Cancel();

설명

MFC ODBC 클래스는 더 이상 비동기 처리를 사용하지 않습니다. 비동기 작업을 수행하려면 ODBC API 함수 SQLSetConnectOption를 직접 호출해야 합니다. 자세한 내용은 ODBC SDK 프로그래머 가이드의 "함수 비동기 실행"을 참조하세요.

CRecordset::CancelUpdate

호출되기 전에 Update 작업 또는 AddNew 작업으로 인해 Edit 보류 중인 업데이트를 취소합니다.

void CancelUpdate();

설명

참고 항목

이러한 레코드 집합을 호출EditAddNew할 수 없으므로 대량 행 가져오기를 사용하는 레코드 집합에는 Update이 멤버 함수를 적용할 수 없습니다. 대량 행 페치 에 대한 자세한 내용은 레코드 집합: 대량 레코드 가져오기(ODBC)를 참조하세요.

자동 더티 필드 검사를 사용하는 CancelUpdate 경우 멤버 변수를 이전 Edit 또는 AddNew 호출된 값으로 복원합니다. 그렇지 않으면 값 변경 내용이 유지됩니다. 기본적으로 레코드 집합을 열 때 자동 필드 검사가 활성화됩니다. 사용하지 않도록 설정하려면 Open 멤버 함수의 dwOptions 매개 변수에서 지정 CRecordset::noDirtyFieldCheck 해야 합니다.

데이터 업데이트에 대한 자세한 내용은 레코드 집합: 레코드 추가, 업데이트 및 삭제(ODBC)를 참조하세요.

CRecordset::CanRestart

레코드 집합에서 멤버 함수를 호출 Requery 하여 쿼리를 다시 시작할 수 있는지(레코드를 새로 고칠 수 있는지) 여부를 결정합니다.

BOOL CanRestart() const;

반환 값

다시 쿼리가 허용되는 경우 0이 아닌 경우 그렇지 않으면 0입니다.

CRecordset::CanScroll

레코드 집합에서 스크롤을 허용하는지 여부를 결정합니다.

BOOL CanScroll() const;

반환 값

레코드 집합에서 스크롤을 허용하는 경우 0이 아닌 경우 그렇지 않으면 0입니다.

설명

스크롤 에 대한 자세한 내용은 레코드 집합: 스크롤(ODBC)을 참조하세요.

CRecordset::CanTransact

레코드 집합에서 트랜잭션을 허용하는지 여부를 결정합니다.

BOOL CanTransact() const;

반환 값

레코드 집합에서 트랜잭션을 허용하는 경우 0이 아닌 경우 그렇지 않으면 0입니다.

설명

자세한 내용은 트랜잭션(ODBC)을 참조하세요.

CRecordset::CanUpdate

레코드 집합을 업데이트할 수 있는지 여부를 결정합니다.

BOOL CanUpdate() const;

반환 값

레코드 집합을 업데이트할 수 있는 경우 0이 아닌 경우 그렇지 않으면 0입니다.

설명

기본 데이터 원본이 읽기 전용이거나 레코드 집합을 열 때 매개 변수에 dwOptions 지정한 CRecordset::readOnly 경우 레코드 집합은 읽기 전용일 수 있습니다.

CRecordset::CheckRowsetError

레코드를 가져오는 동안 생성된 오류를 처리하기 위해 호출됩니다.

virtual void CheckRowsetError(RETCODE nRetCode);

매개 변수

nRetCode
ODBC API 함수는 코드를 반환합니다. 자세한 내용은 설명을 참조하세요.

설명

이 가상 멤버 함수는 레코드를 가져올 때 발생하는 오류를 처리하며 대량 행을 가져오는 동안 유용합니다. 사용자 고유의 오류 처리를 구현하도록 재정의하는 CheckRowsetError 것이 좋습니다.

CheckRowsetError 는 커서 탐색 작업(예: Open또는 Requery모든 Move 작업)에서 자동으로 호출됩니다. ODBC API 함수 SQLExtendedFetch의 반환 값이 전달됩니다. 다음 표에서는 매개 변수에 사용할 수 있는 값을 나열합니다 nRetCode .

nRetCode 설명
SQL_SUCCESS 함수가 성공적으로 완료되었습니다. 사용할 수 있는 추가 정보가 없습니다.
SQL_SUCCESS_WITH_INFO 함수가 성공적으로 완료되었으며 심각하지 않은 오류가 있을 수 있습니다. 를 호출 SQLError하여 추가 정보를 가져올 수 있습니다.
SQL_NO_DATA_FOUND 결과 집합의 모든 행을 가져왔습니다.
SQL_ERROR 함수가 실패했습니다. 를 호출 SQLError하여 추가 정보를 가져올 수 있습니다.
SQL_INVALID_HANDLE 잘못된 환경 핸들, 연결 핸들 또는 문 핸들로 인해 함수가 실패했습니다. 이는 프로그래밍 오류를 나타냅니다. 에서 SQLError사용할 수 있는 추가 정보는 없습니다.
SQL_STILL_EXECUTING 비동기적으로 시작된 함수는 여전히 실행 중입니다. 기본적으로 MFC는 이 값을 ;에 CheckRowsetError전달하지 않습니다. MFC는 더 이상 반환되지 않을 때까지 계속 호출 SQLExtendedFetch 합니다 SQL_STILL_EXECUTING.

자세한 내용은 SQLErrorWindows SDK를 참조하세요. 대량 행 페치 에 대한 자세한 내용은 레코드 집합: 대량 레코드 가져오기(ODBC)를 참조하세요.

CRecordset::Close

레코드 집합을 닫습니다.

virtual void Close();

설명

레코드 집합에 할당된 ODBC HSTMT 및 모든 메모리는 할당 취소됩니다. 일반적으로 호출 Close한 후에는 C++ 레코드 집합 개체가 할당된 new경우 삭제합니다.

를 호출한 후 다시 호출 Open Close할 수 있습니다. 이렇게 하면 레코드 집합 개체를 다시 사용할 수 있습니다. 대안은 호출 Requery하는 것입니다.

예시

// Construct a snapshot object
CCustomer rsCustSet(NULL);

if (!rsCustSet.Open())
return;

// Use the snapshot ...

// Close the snapshot
rsCustSet.Close();

// Destructor is called when the function exits

CRecordset::CRecordset

CRecordset 개체를 생성합니다.

CRecordset(CDatabase* pDatabase = NULL);

매개 변수

pDatabase
개체 또는 값NULL에 대한 CDatabase 포인터를 포함합니다. 그렇지 않은 NULL CDatabase 경우 개체의 Open 멤버 함수를 호출하여 데이터 원본에 연결하지 않은 경우 레코드 집합은 자체 Open 호출 중에 해당 함수를 열려고 시도합니다. 전달 NULLCDatabase 하면 ClassWizard를 사용하여 레코드 집합 클래스를 파생할 때 지정한 데이터 원본 정보를 사용하여 개체가 생성되고 연결됩니다.

설명

직접 사용 CRecordset 하거나 애플리케이션별 클래스 CRecordset를 파생시킬 수 있습니다. ClassWizard를 사용하여 레코드 집합 클래스를 파생시킬 수 있습니다.

참고 항목

파생 클래스 는 자체 생성자를 제공해야 합니다 . 파생 클래스의 생성자에서 생성자를 CRecordset::CRecordset호출하여 적절한 매개 변수를 전달합니다.

자동으로 개체를 생성하고 연결하도록 CDatabase 레코드 집합 생성자에 전달 NULL 합니다. 레코드 집합을 생성하기 전에 개체를 생성하고 연결할 CDatabase 필요가 없는 유용한 약식입니다.

예시

자세한 내용은 Recordset: Table에 대한 클래스 선언(ODBC)을 참조하세요.

CRecordset::Delete

현재 레코드를 삭제합니다.

virtual void Delete();

설명

성공적으로 삭제되면 레코드 집합의 필드 데이터 멤버가 Null 값으로 설정되고 삭제된 레코드에서 벗어나려면 함수 중 Move 하나를 명시적으로 호출해야 합니다. 삭제된 레코드에서 이동한 후에는 레코드로 돌아갈 수 없습니다. 데이터 원본이 트랜잭션을 지원하는 경우 트랜잭션의 호출 부분을 만들 Delete 수 있습니다. 자세한 내용은 트랜잭션(ODBC)을 참조하세요.

참고 항목

대량 행 페치를 구현한 경우 호출 Delete할 수 없습니다. 이로 인해 어설션이 실패합니다. 클래스 CRecordset 는 대량 데이터 행을 업데이트하는 메커니즘을 제공하지 않지만 ODBC API SQLSetPos함수를 사용하여 고유한 함수를 작성할 수 있습니다. 대량 행 페치 에 대한 자세한 내용은 레코드 집합: 대량 레코드 가져오기(ODBC)를 참조하세요.

주의

레코드 집합은 업데이터 가능해야 하며 호출 Delete할 때 레코드 집합에 유효한 레코드가 있어야 합니다. 그렇지 않으면 오류가 발생합니다. 예를 들어 레코드를 삭제하지만 다시 Delete 호출 Delete 하기 전에 새 레코드로 스크롤하지 않으면 CDBExceptionthrow됩니다.

Edit달리 AddNew 호출 뒤에는 호출 DeleteUpdate수행되지 않습니다. 호출이 Delete 실패하면 필드 데이터 멤버는 변경되지 않은 상태로 유지됩니다.

예시

이 예제에서는 함수 프레임에서 만든 레코드 집합을 보여 줍니다. 이 예제에서는 데이터 원본에 이미 연결된 형식 CDatabase 의 멤버 변수인 가 있다고 m_dbCust가정합니다.

// Create a derived CRecordset object
CCustomer rsCustSet(&m_dbCust);
rsCustSet.Open();

if (rsCustSet.IsEOF() || !rsCustSet.CanUpdate() ||
   !rsCustSet.CanTransact())
{
   return;
}

m_dbCust.BeginTrans();

// Perhaps scroll to a new record...
// Delete the current record
rsCustSet.Delete();

// Finished commands for this transaction
if (IDYES == AfxMessageBox(_T("Commit transaction?"), MB_YESNO))
m_dbCust.CommitTrans();
else // User changed mind
m_dbCust.Rollback();

CRecordset::DoBulkFieldExchange

데이터 원본에서 레코드 집합으로 대량 데이터 행을 교환하기 위해 호출됩니다. 대량 레코드 필드 교환(Bulk RFX)을 구현합니다.

virtual void DoBulkFieldExchange(CFieldExchange* pFX);

매개 변수

pFX
CFieldExchange 개체에 대한 포인터입니다. 프레임워크는 필드 교환 작업에 대한 컨텍스트를 지정하도록 이 개체를 이미 설정했습니다.

설명

대량 행 페칭이 구현되면 프레임워크는 이 멤버 함수를 호출하여 데이터 원본에서 레코드 집합 개체로 데이터를 자동으로 전송합니다. DoBulkFieldExchange 또한 매개 변수 데이터 멤버(있는 경우)를 레코드 집합 선택에 대한 SQL 문 문자열의 매개 변수 자리 표시자에 바인딩합니다.

대량 행 가져오기가 구현되지 않으면 프레임워크에서 호출 DoFieldExchange합니다. 대량 행 페치를 구현하려면 멤버 함수에서 CRecordset::useMultiRowFetch dwOptions 매개 변수 Open 의 옵션을 지정해야 합니다.

참고 항목

DoBulkFieldExchange 에서 파생된 CRecordset클래스를 사용하는 경우에만 사용할 수 있습니다. 레코드 집합 개체를 직접 CRecordset만든 경우 멤버 함수를 GetFieldValue 호출하여 데이터를 검색해야 합니다.

대량 레코드 필드 교환(Bulk RFX)은 RFX(레코드 필드 교환)와 유사합니다. 데이터는 데이터 원본에서 레코드 집합 개체로 자동으로 전송됩니다. 그러나 변경 내용을 호출AddNewEditDelete하거나 Update 데이터 원본으로 다시 전송할 수는 없습니다. 클래스 CRecordset 는 현재 대량 데이터 행을 업데이트하는 메커니즘을 제공하지 않지만 ODBC API 함수 SQLSetPos를 사용하여 고유한 함수를 작성할 수 있습니다.

ClassWizard는 대량 레코드 필드 교환을 지원하지 않습니다. 따라서 대량 RFX 함수에 대한 호출을 작성하여 수동으로 재정 DoBulkFieldExchange 의해야 합니다. 이러한 함수에 대한 자세한 내용은 레코드 필드 교환 함수를 참조 하세요.

대량 행 페치 에 대한 자세한 내용은 레코드 집합: 대량 레코드 가져오기(ODBC)를 참조하세요. 관련 정보는 RFX(레코드 필드 교환)를 참조하세요.

CRecordset::DoFieldExchange

레코드 집합의 필드 데이터 멤버와 데이터 원본의 해당 레코드 간에 양방향으로 데이터를 교환하기 위해 호출됩니다. RFX(레코드 필드 교환)를 구현합니다.

virtual void DoFieldExchange(CFieldExchange* pFX);

매개 변수

pFX
CFieldExchange 개체에 대한 포인터입니다. 프레임워크는 필드 교환 작업에 대한 컨텍스트를 지정하도록 이 개체를 이미 설정했습니다.

설명

대량 행 가져오기가 구현되지 않은 경우 프레임워크는 이 멤버 함수를 호출하여 레코드 집합 개체의 필드 데이터 멤버와 데이터 원본에 있는 현재 레코드의 해당 열 간에 데이터를 자동으로 교환합니다. DoFieldExchange 또한 매개 변수 데이터 멤버(있는 경우)를 레코드 집합 선택에 대한 SQL 문 문자열의 매개 변수 자리 표시자에 바인딩합니다.

대량 행 페칭이 구현되면 프레임워크는 .를 호출합니다 DoBulkFieldExchange. 대량 행 페치를 구현하려면 멤버 함수에서 CRecordset::useMultiRowFetch dwOptions Open 매개 변수 옵션을 지정해야 합니다.

참고 항목

DoFieldExchange 에서 파생된 CRecordset클래스를 사용하는 경우에만 사용할 수 있습니다. 레코드 집합 개체를 직접 CRecordset만든 경우 GetFieldValue 멤버 함수를 호출하여 데이터를 검색해야 합니다.

RFX(레코드 필드 교환)라고 하는 필드 데이터 교환은 레코드 집합 개체의 필드 데이터 멤버에서 데이터 원본의 레코드 필드, 데이터 원본의 레코드에서 레코드 집합 개체까지 양방향으로 작동합니다.

파생 레코드 집합 클래스에 대해 일반적으로 구현 DoFieldExchange 하기 위해 수행해야 하는 유일한 작업은 ClassWizard를 사용하여 클래스를 만들고 필드 데이터 멤버의 이름과 데이터 형식을 지정하는 것입니다. ClassWizard가 작성하는 코드에 코드를 추가하여 매개 변수 데이터 멤버를 지정하거나 동적으로 바인딩하는 열을 처리할 수도 있습니다. 자세한 내용은 레코드 집합: 데이터 열 동적 바인딩(ODBC)을 참조하세요.

ClassWizard를 사용하여 파생 레코드 집합 클래스를 선언하면 마법사는 다음 예제와 유사한 재정의 DoFieldExchange 를 작성합니다.

void CCustomer::DoFieldExchange(CFieldExchange* pFX)
{
   pFX->SetFieldType(CFieldExchange::outputColumn);
   // Macros such as RFX_Text() and RFX_Int() are dependent on the
   // type of the member variable, not the type of the field in the database.
   // ODBC will try to automatically convert the column value to the requested type
   RFX_Long(pFX, _T("[CustomerID]"), m_CustomerID);
   RFX_Text(pFX, _T("[ContactFirstName]"), m_ContactFirstName);
   RFX_Text(pFX, _T("[PostalCode]"), m_PostalCode);
   RFX_Text(pFX, _T("[L_Name]"), m_L_Name);
   RFX_Long(pFX, _T("[BillingID]"), m_BillingID);

   pFX->SetFieldType(CFieldExchange::inputParam);
   RFX_Text(pFX, _T("Param"), m_strParam);
}

RFX 함수에 대한 자세한 내용은 레코드 필드 교환 함수를 참조 하세요.

자세한 예제 및 자세한 내용은 DoFieldExchange레코드 필드 교환: RFX 작동 방식을 참조 하세요. RFX에 대한 일반적인 내용은 레코드 필드 교환을 참조 하세요.

CRecordset::Edit

현재 레코드를 변경할 수 있습니다.

virtual void Edit();

설명

호출 Edit한 후 해당 값을 직접 다시 설정하여 필드 데이터 멤버를 변경할 수 있습니다. 멤버 함수를 호출하여 데이터 원본에 Update 변경 내용을 저장할 때 작업이 완료됩니다.

참고 항목

대량 행 페치를 구현한 경우 호출 Edit할 수 없습니다. 이로 인해 어설션이 실패합니다. 클래스 CRecordset 는 대량 데이터 행을 업데이트하는 메커니즘을 제공하지 않지만 ODBC API SQLSetPos함수를 사용하여 고유한 함수를 작성할 수 있습니다. 대량 행 페치 에 대한 자세한 내용은 레코드 집합: 대량 레코드 가져오기(ODBC)를 참조하세요.

Edit 는 레코드 집합의 데이터 멤버 값을 저장합니다. 호출 Edit하고 변경한 다음 다시 호출 Edit 하면 레코드의 값이 첫 번째 Edit 호출 이전 값으로 복원됩니다.

경우에 따라 열이 Null(데이터 없음)으로 만들어 열을 업데이트할 수 있습니다. 이렇게 하려면 TRUE 매개 변수를 사용하여 Null SetFieldNull 필드를 표시합니다. 이렇게 하면 열도 업데이트됩니다. 값이 변경되지 않았더라도 필드를 데이터 원본에 쓰려면 TRUE 매개 변수를 사용하여 호출 SetFieldDirty 합니다. 필드에 Null 값이 있는 경우에도 작동합니다.

데이터 원본이 트랜잭션을 지원하는 경우 트랜잭션의 호출 부분을 만들 Edit 수 있습니다. 호출하기 전과 레코드 집합이 열린 후 호출 CDatabase::BeginTrans Edit 합니다. 또한 호출 CDatabase::CommitTrans 은 작업을 완료하기 위해 호출 Update 하는 대신 사용할 수 Edit 없습니다. 트랜잭션에 대한 자세한 내용은 클래스를 참조하세요 CDatabase.

현재 잠금 모드에 따라 다른 레코드를 호출 Update 하거나 스크롤할 때까지 업데이트되는 레코드가 Edit 잠기거나 호출 중에 Edit 만 잠글 수 있습니다. 로 잠금 모드 SetLockingMode를 변경할 수 있습니다.

호출 Update하기 전에 새 레코드로 스크롤하면 현재 레코드의 이전 값이 복원됩니다. 업데이트할 수 없는 레코드 집합을 호출 Edit 하거나 현재 레코드가 없는 경우 A CDBException 가 throw됩니다.

자세한 내용은 ODBC(Transaction)Recordset: Locking Records(ODBC) 문서를 참조하세요.

예시

// To edit a record, first set up the edit buffer
rsCustSet.Edit();

// Then edit field data members for the record
rsCustSet.m_BillingID = 2795;
rsCustSet.m_ContactFirstName = _T("Jones Mfg");

// Finally, complete the operation
if (!rsCustSet.Update())
{
   // Handle the failure to update
   AfxMessageBox(_T("Couldn't update record!"));
}

CRecordset::FlushResultSet

여러 결과 집합이 있는 경우 미리 정의된 쿼리(저장 프로시저)의 다음 결과 집합을 검색합니다.

BOOL FlushResultSet();

반환 값

검색할 결과 집합이 더 있는 경우 0이 아닌 경우 그렇지 않으면 0입니다.

설명

현재 결과 집합에서 커서를 완료한 경우에만 호출 FlushResultSet 해야 합니다. 호출FlushResultSet하여 다음 결과 집합을 검색하는 경우 해당 결과 집합에서 커서가 유효하지 않습니다. 호출 FlushResultSet후 멤버 함수를 MoveNext 호출해야 합니다.

미리 정의된 쿼리에서 출력 매개 변수 또는 입력/출력 매개 변수를 사용하는 경우 이러한 매개 변수 값을 얻으려면 반환FALSE될 때까지 호출 FlushResultSet 해야 합니다(값 0).

FlushResultSet 는 ODBC API 함수 SQLMoreResults를 호출합니다. 반환 SQL_ERROR 하거나 SQL_INVALID_HANDLE반환 FlushResultSet 하면 SQLMoreResults 예외가 throw됩니다. 자세한 내용은 SQLMoreResultsWindows SDK를 참조하세요.

를 호출 FlushResultSet하려면 저장 프로시저에 바인딩된 필드가 있어야 합니다.

예시

다음 코드에서는 CRecordset입력 매개 변수와 출력 매개 변수가 있는 미리 정의된 쿼리를 기반으로 하며 여러 결과 집합이 있는 -derived 개체라고 가정 COutParamRecordset 합니다. 재정의의 구조를 확인 DoFieldExchange 합니다.

// DoFieldExchange override
//
// Only necessary to handle parameter bindings.
// Don't use CRecordset-derived class with bound
// fields unless all result sets have same schema
// OR there is conditional binding code.
void CCourses::DoFieldExchange(CFieldExchange* pFX)
{
   pFX->SetFieldType(CFieldExchange::outputParam);
   RFX_Long(pFX, _T("Param1"), m_nCountParam);
   // The "Param1" name here is a dummy name 
   // that is never used

   pFX->SetFieldType(CFieldExchange::inputParam);
   RFX_Text(pFX, _T("Param2"), m_strNameParam);
   // The "Param2" name here is a dummy name 
   // that is never used
}

 

// Assume db is an already open CDatabase object
CCourses rs(&m_dbCust);
rs.m_strNameParam = _T("History");

// Get the first result set
// NOTE: SQL Server requires forwardOnly cursor 
//       type for multiple rowset returning stored 
//       procedures
rs.Open(CRecordset::forwardOnly,
   _T("{? = CALL GetCourses( ? )}"),
   CRecordset::readOnly);

// Loop through all the data in the first result set
while (!rs.IsEOF())
{
   CString strFieldValue;
   for (short nIndex = 0; nIndex < rs.GetODBCFieldCount(); nIndex++)
   {
      rs.GetFieldValue(nIndex, strFieldValue);

      // TO DO: Use field value string.
   }
   rs.MoveNext();
}

// Retrieve other result sets...
while (rs.FlushResultSet())
{
   // must call MoveNext because cursor is invalid
   rs.MoveNext();

   while (!rs.IsEOF())
   {
      CString strFieldValue;
      for (short nIndex = 0; nIndex < rs.GetODBCFieldCount(); nIndex++)
      {
         rs.GetFieldValue(nIndex, strFieldValue);

         // TO DO: Use field value string.
      }
      rs.MoveNext();
   }
}


// All result sets have been flushed. Cannot
// use the cursor, but the output parameter,
// m_nCountParam, has now been written.
// Note that m_nCountParam is not valid until
// CRecordset::FlushResultSet has returned FALSE,
// indicating no more result sets will be returned.

// TO DO: Use m_nCountParam

// Cleanup
rs.Close();

CRecordset::GetBookmark

현재 레코드의 책갈피 값을 가져옵니다.

void GetBookmark(CDBVariant& varBookmark);

매개 변수

varBookmark
현재 레코드의 CDBVariant 책갈피를 나타내는 개체에 대한 참조입니다.

설명

레코드 집합에서 책갈피가 지원되는지 확인하려면 .를 호출 CanBookmark합니다. 지원되는 경우 책갈피를 사용할 수 있도록 하려면 멤버 함수의 Open 매개 변수에서 dwOptions 옵션을 설정 CRecordset::useBookmarks 해야 합니다.

참고 항목

책갈피가 지원되지 않거나 사용할 수 없는 경우 호출 GetBookmark 하면 예외가 throw됩니다. 책갈피는 전달 전용 레코드 집합에서 지원되지 않습니다.

GetBookmark 는 현재 레코드의 책갈피 값을 개체에 CDBVariant 할당합니다. 다른 레코드로 이동한 후 언제든지 해당 레코드로 돌아가려면 해당 CDBVariant 개체를 호출 SetBookmark 합니다.

참고 항목

특정 레코드 집합 작업 후에는 책갈피가 더 이상 유효하지 않을 수 있습니다. 예를 들어 다음에 Requery호출 GetBookmark 하는 경우 .를 사용하여 레코드SetBookmark로 돌아가지 못할 수 있습니다. 호출 CDatabase::GetBookmarkPersistence 하여 안전하게 호출 SetBookmark할 수 있는지 확인합니다.

책갈피 및 레코드 집합 탐색에 대한 자세한 내용은 Recordset: ODBC(책갈피 및 절대 위치) 및 레코드 집합: 스크롤(ODBC) 문서를 참조하세요.

CRecordset::GetDefaultConnect

기본 연결 문자열 가져오기 위해 호출됩니다.

virtual CString GetDefaultConnect();

반환 값

기본 연결 문자열 포함하는 A CString 입니다.

설명

프레임워크는 이 멤버 함수를 호출하여 레코드 집합의 기반이 되는 데이터 원본에 대한 기본 연결 문자열 가져옵니다. ClassWizard 는 테이블 및 열에 대한 정보를 가져오는 데 사용하는 ClassWizard 것과 동일한 데이터 원본을 식별하여 이 함수를 구현합니다. 애플리케이션을 개발하는 동안 이 기본 연결을 사용하는 것이 편리할 것입니다. 그러나 기본 연결은 애플리케이션 사용자에게 적합하지 않을 수 있습니다. 이 경우 이 함수를 다시 설치하여 ClassWizard'의 버전을 삭제해야 합니다. 연결 문자열 대한 자세한 내용은 ODBC(데이터 원본)를 참조하세요.

CRecordset::GetDefaultSQL

실행할 기본 SQL 문자열을 가져오기 위해 호출됩니다.

virtual CString GetDefaultSQL();

반환 값

기본 SQL 문을 포함하는 A CString 입니다.

설명

프레임워크는 이 멤버 함수를 호출하여 레코드 집합의 기반이 되는 기본 SQL 문을 가져옵니다. 테이블 이름 또는 SQL SELECT 문일 수 있습니다.

레코드 집합 클래스 ClassWizard를 사용하여 선언하여 기본 SQL 문을 간접적으로 정의하고 ClassWizard 이 작업을 수행합니다.

고유한 용도로 SQL 문 문자열이 필요한 경우 레코드 집합이 열릴 때 레코드 집합의 레코드를 선택하는 데 사용되는 SQL 문을 반환하는 호출 GetSQL입니다. 클래스의 재정 GetDefaultSQL의에서 기본 SQL 문자열을 편집할 수 있습니다. 예를 들어 문을 사용하여 미리 정의된 쿼리에 대한 호출을 지정할 수 있습니다 CALL . 그러나 편집 GetDefaultSQL하는 경우 데이터 원본의 열 수와 일치하도록 수정 m_nFields 해야 합니다.

자세한 내용은 Recordset: Table에 대한 클래스 선언(ODBC)을 참조하세요.

주의

프레임워크에서 테이블 이름을 식별할 수 없거나, 여러 테이블 이름을 제공했거나, 문을 해석할 수 없는 경우 CALL 테이블 이름은 비어 있습니다. 문을 사용하는 CALL 경우 중괄호와 키워드 사이에 공백을 CALL 삽입하거나 중괄호 앞이나 문에서 키워드 앞에 SELECT 공백을 SELECT 삽입하지 마세요.

CRecordset::GetFieldValue

현재 레코드에서 필드 데이터를 검색합니다.

void GetFieldValue(
    LPCTSTR lpszName,
    CDBVariant& varValue,
    short nFieldType = DEFAULT_FIELD_TYPE);

void GetFieldValue(
    LPCTSTR lpszName,
    CStringA& strValue
);

void GetFieldValue(
    LPCTSTR lpszName,
    CStringW& strValue
);

void GetFieldValue(
    short nIndex,
    CDBVariant& varValue,
    short nFieldType = DEFAULT_FIELD_TYPE);

void GetFieldValue(
    short nIndex,
    CStringA& strValue);

void GetFieldValue(
    short nIndex,
    CStringW& strValue);

매개 변수

lpszName
필드의 이름입니다.

varValue 필드 값을 저장할 개체에 대한 참조 CDBVariant 입니다.

nFieldType
필드의 ODBC C 데이터 형식입니다. 기본값 DEFAULT_FIELD_TYPE을 사용하여 다음 표에 따라 SQL 데이터 형식에서 C 데이터 형식을 결정합니다 GetFieldValue . 그렇지 않으면 데이터 형식을 직접 지정하거나 호환되는 데이터 형식을 선택할 수 있습니다. 예를 들어 모든 데이터 형식을 .에 SQL_C_CHAR저장할 수 있습니다.

C 데이터 형식 SQL 데이터 형식
SQL_C_BIT SQL_BIT
SQL_C_UTINYINT SQL_TINYINT
SQL_C_SSHORT SQL_SMALLINT
SQL_C_SLONG SQL_INTEGER
SQL_C_FLOAT SQL_REAL
SQL_C_DOUBLE SQL_FLOATSQL_DOUBLE
SQL_C_TIMESTAMP SQL_DATESQL_TIMESQL_TIMESTAMP
SQL_C_CHAR SQL_NUMERICSQL_DECIMALSQL_BIGINTSQL_CHARSQL_VARCHARSQL_LONGVARCHAR
SQL_C_BINARY SQL_BINARYSQL_VARBINARYSQL_LONGVARBINARY

ODBC 데이터 형식에 대한 자세한 내용은 Windows SDK 부록 D의 "SQL 데이터 형식" 및 "C 데이터 형식" 항목을 참조하세요.

nIndex
필드의 인덱스(0부터 시작하는 인덱스)입니다.

strValue
필드의 데이터 형식에 CString 관계없이 텍스트로 변환된 필드 값을 저장할 개체에 대한 참조입니다.

설명

이름 또는 인덱스로 필드를 조회할 수 있습니다. 개체 또는 CString 개체에 CDBVariant 필드 값을 저장할 수 있습니다.

대량 행 가져오기를 구현한 경우 현재 레코드는 항상 행 집합의 첫 번째 레코드에 배치됩니다. 지정된 행 집합 내의 레코드에서 사용 GetFieldValue 하려면 먼저 멤버 함수를 호출 SetRowsetCursorPosition 하여 커서를 해당 행 집합 내의 원하는 행으로 이동해야 합니다. 그런 다음 해당 행을 호출 GetFieldValue 합니다. 대량 행 페치를 구현하려면 멤버 함수에서 CRecordset::useMultiRowFetch dwOptions Open 매개 변수 옵션을 지정해야 합니다.

디자인 타임에 정적으로 바인딩하는 대신 런타임에 필드를 동적으로 가져오는 데 사용할 GetFieldValue 수 있습니다. 예를 들어 레코드 집합 개체를 직접 CRecordset선언한 경우 필드 데이터를 검색하는 데 사용해야 GetFieldValue 합니다. RFX(레코드 필드 교환) 또는 대량 레코드 필드 교환(Bulk RFX)은 구현되지 않습니다.

참고 항목

파생되지 않고 레코드 집합 개체를 선언하는 CRecordset경우 ODBC 커서 라이브러리가 로드되지 않습니다. 커서 라이브러리를 사용하려면 레코드 집합에 하나 이상의 바인딩된 열이 있어야 합니다. 그러나 직접 사용하는 CRecordset 경우 열이 바인딩되지 않습니다. 멤버 함수는 CDatabase::OpenEx CDatabase::Open 커서 라이브러리를 로드할지 여부를 제어합니다.

GetFieldValue 는 ODBC API 함수 SQLGetData를 호출합니다. 드라이버가 필드 값의 실제 길이에 대한 SQL_NO_TOTAL 값을 GetFieldValue 출력하는 경우 예외를 throw합니다. 자세한 내용은 SQLGetDataWindows SDK를 참조하세요.

예시

다음 샘플 코드에서는 .에서 CRecordset직접 선언된 레코드 집합 개체에 대한 호출 GetFieldValue 을 보여 줍니다.

// Create and open a database object;
// do not load the cursor library
CDatabase db;
db.OpenEx(NULL, CDatabase::forceOdbcDialog);

// Create and open a recordset object
// directly from CRecordset. Note that a
// table must exist in a connected database.
// Use forwardOnly type recordset for best
// performance, since only MoveNext is required
CRecordset rs(&db);
rs.Open(CRecordset::forwardOnly, _T("SELECT * FROM Customer"));

// Create a CDBVariant object to
// store field data
CDBVariant varValue;

// Loop through the recordset,
// using GetFieldValue and
// GetODBCFieldCount to retrieve
// data in all columns
short nFields = rs.GetODBCFieldCount();
while (!rs.IsEOF())
{
   for (short index = 0; index < nFields; index++)
   {
      rs.GetFieldValue(index, varValue);
      // do something with varValue
   }
   rs.MoveNext();
}

rs.Close();
db.Close();

참고 항목

DAO 클래스 CDaoRecordsetCRecordset 와 달리 멤버 함수는 SetFieldValue 없습니다. 개체를 직접 CRecordset만드는 경우 사실상 읽기 전용입니다.

대량 행 페치 에 대한 자세한 내용은 레코드 집합: 대량 레코드 가져오기(ODBC)를 참조하세요.

CRecordset::GetODBCFieldCount

레코드 집합 개체의 총 필드 수를 검색합니다.

short GetODBCFieldCount() const;

반환 값

레코드 집합의 필드 수입니다.

설명

레코드 집합을 만드는 방법에 대한 자세한 내용은 레코드 집합 : ODBC(레코드 집합 만들기 및 닫기)를 참조하세요.

CRecordset::GetODBCFieldInfo

레코드 집합의 필드에 대한 정보를 가져옵니다.

void GetODBCFieldInfo(
    LPCTSTR lpszName,
    CODBCFieldInfo& fieldinfo);

void GetODBCFieldInfo(
    short nIndex,
    CODBCFieldInfo& fieldinfo);

매개 변수

lpszName
필드의 이름입니다.

fieldinfo
구조체에 대한 참조입니다 CODBCFieldInfo .

nIndex
필드의 인덱스(0부터 시작하는 인덱스)입니다.

설명

함수의 한 버전을 사용하면 이름으로 필드를 조회할 수 있습니다. 다른 버전을 사용하면 인덱스별로 필드를 조회할 수 있습니다.

반환된 정보에 대한 설명은 구조를 참조하세요 CODBCFieldInfo .

레코드 집합을 만드는 방법에 대한 자세한 내용은 레코드 집합 : ODBC(레코드 집합 만들기 및 닫기)를 참조하세요.

CRecordset::GetRecordCount

레코드 집합의 크기를 결정합니다.

long GetRecordCount() const;

반환 값

레코드 집합의 레코드 수입니다. 레코드 집합에 레코드가 없으면 0입니다. 레코드 수를 확인할 수 없는 경우 -1입니다.

설명

주의

레코드 수는 사용자가 레코드를 통해 이동할 때 볼 수 있는 가장 높은 번호 레코드인 "높은 워터 마크"로 유지됩니다. 총 레코드 수는 사용자가 마지막 레코드를 넘어 이동한 후에만 알 수 있습니다. 성능상의 이유로 호출 MoveLast할 때 개수가 업데이트되지 않습니다. 레코드를 직접 계산하려면 0이 아닌 값을 반환할 때까지 IsEOF 반복적으로 호출 MoveNext 합니다. 레코드를 통해 CRecordset:AddNew Update 추가하고 개수를 증가합니다. 레코드를 통해 CRecordset::Delete 삭제하면 개수가 줄어듭니다.

CRecordset::GetRowsetSize

지정된 인출 중에 검색하려는 행 수에 대한 현재 설정을 가져옵니다.

DWORD GetRowsetSize() const;

반환 값

지정된 인출 중에 검색할 행 수입니다.

설명

대량 행 가져오기를 사용하는 경우 레코드 집합이 열릴 때 기본 행 집합 크기는 25입니다. 그렇지 않으면 1입니다.

대량 행 페치를 구현하려면 멤버 함수의 Open 매개 변수에 dwOptions 옵션을 지정 CRecordset::useMultiRowFetch 해야 합니다. 행 집합 크기에 대한 설정을 변경하려면 .를 호출합니다 SetRowsetSize.

대량 행 페치 에 대한 자세한 내용은 레코드 집합: 대량 레코드 가져오기(ODBC)를 참조하세요.

CRecordset::GetRowsFetched

인출 후 검색된 레코드 수를 결정합니다.

DWORD GetRowsFetched() const;

반환 값

지정된 인출 후 데이터 원본에서 검색된 행 수입니다.

설명

이는 대량 행 페치를 구현한 경우에 유용합니다. 행 집합 크기는 일반적으로 페치에서 검색되는 행 수를 나타냅니다. 그러나 레코드 집합의 총 행 수는 행 집합에서 검색되는 행 수에도 영향을 줍니다. 예를 들어 레코드 집합에 행 집합 크기 설정이 4인 10개의 레코드가 있는 경우 호출 MoveNext 을 통해 레코드 집합을 반복하면 마지막 행 집합에 두 개의 레코드만 포함됩니다.

대량 행 페치를 구현하려면 멤버 함수의 CRecordset::useMultiRowFetch dwOptions 매개 변수 Open 에 옵션을 지정해야 합니다. 행 집합 크기를 지정하려면 SetRowsetSize를 호출 합니다.

대량 행 페치 에 대한 자세한 내용은 레코드 집합: 대량 레코드 가져오기(ODBC)를 참조하세요.

예시

CMultiCustomer rs(&m_dbCust);

// Set the rowset size
rs.SetRowsetSize(5);

// Open the recordset
rs.Open(CRecordset::dynaset, NULL, CRecordset::useMultiRowFetch);

// loop through the recordset by rowsets
while (!rs.IsEOF())
{
   for (int rowCount = 0; rowCount < (int)rs.GetRowsFetched(); rowCount++)
   {
      // do something
   }

   rs.MoveNext();
}

rs.Close();

CRecordset::GetRowStatus

현재 행 집합의 행 상태를 가져옵니다.

WORD GetRowStatus(WORD wRow) const;

매개 변수

wRow
현재 행 집합에 있는 행의 1부터 시작하는 위치입니다. 이 값의 범위는 1에서 행 집합의 크기까지입니다.

반환 값

행의 상태 값입니다. 자세한 내용은 설명을 참조하세요.

설명

GetRowStatus 는 데이터 원본에서 마지막으로 검색된 이후의 행 상태가 변경되었거나 해당 행이 페치되지 않음을 나타내는 값을 반환합니다 wRow . 다음 표에서는 가능한 반환 값을 보여 줍니다.

상태 값 설명
SQL_ROW_SUCCESS 행은 변경되지 않습니다.
SQL_ROW_UPDATED 행이 업데이트되었습니다.
SQL_ROW_DELETED 행이 삭제되었습니다.
SQL_ROW_ADDED 행이 추가되었습니다.
SQL_ROW_ERROR 오류로 인해 행을 복구할 수 없습니다.
SQL_ROW_NOROW 에 해당하는 행이 wRow없습니다.

자세한 내용은 Windows SDK의 ODBC API 함수 SQLExtendedFetch 를 참조하세요.

CRecordset::GetStatus

레코드 집합에서 현재 레코드의 인덱스와 마지막 레코드가 표시되었는지 여부를 결정합니다.

void GetStatus(CRecordsetStatus& rStatus) const;

매개 변수

rStatus
CRecordsetStatus 개체에 대한 참조입니다. 자세한 내용은 설명을 참조하세요.

설명

CRecordset 는 인덱스를 추적하려고 시도하지만 일부 상황에서는 불가능할 수 있습니다. 설명은 참조 GetRecordCount 하세요.

구조체 CRecordsetStatus 의 형식은 다음과 같습니다.

struct CRecordsetStatus
{
    long m_lCurrentRecord;
    BOOL m_bRecordCountFinal;
};

두 멤버의 CRecordsetStatus 의미는 다음과 같습니다.

  • m_lCurrentRecord 알려진 경우 레코드 집합에 있는 현재 레코드의 인덱스(0부터 시작하는 인덱스)를 포함합니다. 인덱스를 확인할 수 없는 경우 이 멤버에는 (-2)가 포함됩니다 AFX_CURRENT_RECORD_UNDEFINED . TRUE(빈 레코드 집합 또는 첫 번째 레코드 앞 스크롤 시도)m_lCurrentRecord이면 IsBOF (-1)로 설정 AFX_CURRENT_RECORD_BOF 됩니다. 첫 번째 레코드에 있는 경우 0, 두 번째 레코드 1 등으로 설정됩니다.

  • m_bRecordCountFinal 레코드 집합의 총 레코드 수가 결정된 경우 0이 아닌 경우 일반적으로 레코드 집합의 시작 부분에서 시작하여 0이 아닌 값을 반환할 때까지 IsEOF 호출 MoveNext 하여 수행해야 합니다. 이 멤버가 0이면 -1이 아닌 경우 반환된 GetRecordCount레코드 수는 레코드의 "높은 워터 마크" 개수에 불과합니다.

CRecordset::GetSQL

이 멤버 함수를 호출하여 레코드 집합이 열릴 때 레코드 집합의 레코드를 선택하는 데 사용된 SQL 문을 가져옵니다.

const CString& GetSQL() const;

반환 값

const CString SQL 문을 포함하는 참조입니다.

설명

일반적으로 SQL SELECT 문입니다. 반환된 GetSQL 문자열은 읽기 전용입니다.

반환된 GetSQL 문자열은 일반적으로 매개 변수의 레코드 집합에 멤버 함수에 전달했을 수 있는 lpszSQL 문자열과 Open 다릅니다. 레코드 집합은 전달한 내용, 지정한 항목, 데이터 멤버 및 m_strSort 지정ClassWizardOpen매개 변수에 m_strFilter 따라 전체 SQL 문을 생성하기 때문입니다. 레코드 집합이 이 SQL 문을 생성하는 방법에 대한 자세한 내용은 Recordset: Recordsets에서 레코드를 선택하는 방법(ODBC)을 참조하세요.

참고 항목

를 호출한 후에만 이 멤버 함수를 호출합니다 Open.

CRecordset::GetTableName

레코드 집합의 쿼리를 기반으로 하는 SQL 테이블의 이름을 가져옵니다.

const CString& GetTableName() const;

반환 값

const 레코드 집합이 테이블을 기반으로 하는 CString 경우 테이블 이름을 포함하는 참조이고, 그렇지 않으면 빈 문자열입니다.

설명

GetTableName 는 레코드 집합이 여러 테이블의 조인이나 미리 정의된 쿼리(저장 프로시저)가 아니라 테이블을 기반으로 하는 경우에만 유효합니다. 이름은 읽기 전용입니다.

참고 항목

를 호출한 후에만 이 멤버 함수를 호출합니다 Open.

CRecordset::IsBOF

레코드 집합이 첫 번째 레코드 앞에 배치된 경우 0이 아닌 값을 반환합니다. 현재 레코드가 없습니다.

BOOL IsBOF() const;

반환 값

레코드 집합에 레코드가 없거나 첫 번째 레코드 앞에서 뒤로 스크롤한 경우 0이 아닙니다. 그렇지 않으면 0입니다.

설명

레코드에서 레코드로 스크롤하기 전에 이 멤버 함수를 호출하여 레코드 집합의 첫 번째 레코드 앞에 갔는지 여부를 알아봅니다. 레코드 집합에 레코드가 포함되어 있는지 아니면 비어 있는지를 확인하는 데 함께 IsEOF 사용할 IsBOF 수도 있습니다. 호출 Open직후 레코드 집합에 레코드가 없으면 0이 아닌 IsBOF 값을 반환합니다. 레코드가 하나 이상 있는 레코드 집합을 열면 첫 번째 레코드는 현재 레코드이고 IsBOF 0을 반환합니다.

첫 번째 레코드가 현재 레코드이고 호출 MovePrevIsBOF 하는 경우 0이 아닌 레코드를 반환합니다. 0이 아닌 값을 반환하고 호출MovePrev하면 IsBOF 오류가 발생합니다. 0이 아닌 레코드를 반환하면 IsBOF 현재 레코드가 정의되지 않으며 현재 레코드가 필요한 모든 작업에 오류가 발생합니다.

예시

이 예제에서는 코드가 양방향으로 레코드 집합을 스크롤할 때 레코드 집합의 제한을 사용하고 IsBOF IsEOF 검색합니다.

// Open a recordset; first record is current
// Open a recordset; first record is current
CCustomer rsCustSet(&m_dbCust);
rsCustSet.Open();

if(rsCustSet.IsBOF())
   return;
   // The recordset is empty

// Scroll to the end of the recordset, past
// the last record, so no record is current
while (!rsCustSet.IsEOF())
   rsCustSet.MoveNext();

// Move to the last record
rsCustSet.MoveLast();

// Scroll to beginning of the recordset, before
// the first record, so no record is current
while(!rsCustSet.IsBOF())
   rsCustSet.MovePrev();

// First record is current again
rsCustSet.MoveFirst();

CRecordset::IsDeleted

현재 레코드가 삭제되었는지 여부를 확인합니다.

BOOL IsDeleted() const;

반환 값

레코드 집합이 삭제된 레코드에 배치된 경우 0이 아닌 경우 그렇지 않으면 0입니다.

설명

레코드로 스크롤하여 IsDeleted 반환 TRUE 하는 경우(0이 아닌 경우) 다른 레코드 집합 작업을 수행하려면 먼저 다른 레코드로 스크롤해야 합니다.

결과는 IsDeleted 레코드 집합 유형, 레코드 집합을 업데이트할 수 있는지 여부, 레코드 집합을 열 때 옵션을 지정 CRecordset::skipDeletedRecords 했는지 여부, 드라이버 팩이 레코드를 삭제했는지 여부 및 여러 사용자가 있는지 여부와 같은 여러 요인에 따라 달라집니다.

드라이버 압축에 대한 CRecordset::skipDeletedRecords 자세한 내용은 Open 멤버 함수를 참조하세요.

참고 항목

대량 행 페치를 구현한 경우 호출 IsDeleted하면 안 됩니다. 대신 GetRowStatus 멤버 함수를 호출합니다. 대량 행 페치 에 대한 자세한 내용은 레코드 집합: 대량 레코드 가져오기(ODBC)를 참조하세요.

CRecordset::IsEOF

레코드 집합이 마지막 레코드 뒤의 위치에 있으면 0이 아닌 값을 반환합니다. 현재 레코드가 없습니다.

BOOL IsEOF() const;

반환 값

레코드 집합에 레코드가 없거나 마지막 레코드를 넘어 스크롤한 경우 0이 아닙니다. 그렇지 않으면 0입니다.

설명

레코드에서 레코드로 스크롤할 때 이 멤버 함수를 호출하여 레코드 집합의 마지막 레코드를 초과했는지 여부를 알아봅니다. 레코드 집합에 레코드가 포함되어 있는지 아니면 비어 있는지 확인하는 데 사용할 IsEOF 수도 있습니다. 호출 Open직후 레코드 집합에 레코드가 없으면 0이 아닌 IsEOF 값을 반환합니다. 레코드가 하나 이상 있는 레코드 집합을 열면 첫 번째 레코드는 현재 레코드이고 IsEOF 0을 반환합니다.

호출 MoveNext할 때 마지막 레코드가 현재 레코드이면 0이 IsEOF 아닌 레코드가 반환됩니다. 0이 아닌 값을 반환하고 호출MoveNext하면 IsEOF 오류가 발생합니다. 0이 아닌 레코드를 반환하면 IsEOF 현재 레코드가 정의되지 않으며 현재 레코드가 필요한 모든 작업에 오류가 발생합니다.

예시

IsBOF에 대한 예를 참조하세요.

CRecordset::IsFieldDirty

지정된 필드 데이터 멤버가 변경 Edit 되었거나 AddNew 호출되었는지 여부를 확인합니다.

BOOL IsFieldDirty(void* pv);

매개 변수

pv
상태를 확인하려는 필드 데이터 멤버에 대한 포인터이거나 NULL 필드가 더티인지 여부를 확인하는 포인터입니다.

반환 값

호출 AddNew 후 지정된 필드 데이터 멤버가 변경되었거나 Edit, 그렇지 않으면 0이면 0이 아닌 경우

설명

모든 더티 필드 데이터 멤버의 데이터는 현재 레코드가 호출 또는 AddNew호출에 따라 멤버 함수에 대한 호출에 Update 의해 업데이트될 때 데이터 원본의 CRecordset 레코드로 Edit 전송됩니다.

참고 항목

이 멤버 함수는 대량 행 페치를 사용하는 레코드 집합에는 적용되지 않습니다. 대량 행 페치를 구현한 경우 항상 FALSE를 IsFieldDirty 반환하고 어설션이 실패합니다. 대량 행 페치 에 대한 자세한 내용은 레코드 집합: 대량 레코드 가져오기(ODBC)를 참조하세요.

호출 IsFieldDirty 하면 필드의 더티 상태가 다시 평가되므로 SetFieldDirty에 대한 이전 호출의 효과가 다시 설정됩니다. 이 AddNew 경우 현재 필드 값이 의사 null 값과 다른 경우 필드 상태가 더티로 설정됩니다. 이 Edit 경우 필드 값이 캐시된 값과 다른 경우 필드 상태가 더티로 설정됩니다.

IsFieldDirty 는 .를 통해 DoFieldExchange구현됩니다.

더티 플래그 에 대한 자세한 내용은 레코드 집합: 레코드 집합에서 레코드를 선택하는 방법(ODBC)을 참조하세요.

CRecordset::IsFieldNull

현재 레코드의 지정된 필드가 Null(값 없음)이면 0이 아닌 값을 반환합니다.

BOOL IsFieldNull(void* pv);

매개 변수

pv
상태를 확인 NULL 하거나 필드 중 Null인지 여부를 확인할 필드 데이터 멤버에 대한 포인터입니다.

반환 값

지정된 필드 데이터 멤버에 Null로 플래그가 지정된 경우 0이 아닌 경우 그렇지 않으면 0입니다.

설명

이 멤버 함수를 호출하여 레코드 집합의 지정된 필드 데이터 멤버가 Null로 플래그가 지정되었는지 여부를 확인합니다. (데이터베이스 용어에서 Null은 "값이 없음"을 의미하며 C++와 동일하지 않습니다 NULL .) 필드 데이터 멤버에 Null로 플래그가 지정되면 값이 없는 현재 레코드의 열로 해석됩니다.

참고 항목

이 멤버 함수는 대량 행 페치를 사용하는 레코드 집합에는 적용되지 않습니다. 대량 행 페치를 IsFieldNull 구현한 경우 항상 반환 FALSE 되고 어설션이 실패합니다. 대량 행 페치 에 대한 자세한 내용은 레코드 집합: 대량 레코드 가져오기(ODBC)를 참조하세요.

IsFieldNull 는 .를 통해 DoFieldExchange구현됩니다.

CRecordset::IsFieldNullable

현재 레코드의 지정된 필드를 Null로 설정할 수 있으면 0이 아닌 값을 반환합니다(값 없음).

BOOL IsFieldNullable(void* pv);

매개 변수

pv
상태를 확인하려는 필드 데이터 멤버에 대한 포인터이거나 NULL 필드를 Null 값으로 설정할 수 있는지 확인합니다.

설명

이 멤버 함수를 호출하여 지정된 필드 데이터 멤버가 "nullable"인지 여부를 확인합니다(Null 값으로 설정할 수 있음; C++ NULL 는 Null과 동일하지 않습니다. 즉, 데이터베이스 용어에서 "값 없음"을 의미합니다.)

참고 항목

대량 행 페치를 구현한 경우 호출 IsFieldNullable할 수 없습니다. 대신 멤버 함수를 GetODBCFieldInfo 호출하여 필드를 Null 값으로 설정할 수 있는지 여부를 확인합니다. 대량 행 페치를 구현했는지 여부에 관계없이 항상 호출 GetODBCFieldInfo할 수 있습니다. 대량 행 페치 에 대한 자세한 내용은 레코드 집합: 대량 레코드 가져오기(ODBC)를 참조하세요.

Null일 수 없는 필드에는 값이 있어야 합니다. 레코드를 추가하거나 업데이트할 때 이러한 필드를 Null로 설정하려고 하면 데이터 원본은 추가 또는 업데이트를 Update 거부하고 예외를 throw합니다. 호출할 때가 아니라 호출 Update할 때 예외가 SetFieldNull발생합니다.

함수의 첫 번째 인수에 사용하면 NULL 필드가 아닌 param 필드에만 함수가 outputColumn 적용됩니다. 예를 들어 호출

SetFieldNull(NULL);

은 필드만 outputColumn 을 설정하며 param NULL, 필드는 영향을 받지 않습니다.

필드에서 작업 param 하려면 다음과 같이 작업하려는 개인의 param 실제 주소를 제공해야 합니다.

SetFieldNull(&m_strParam);

즉, 필드와 outputColumn 마찬가지로 모든 param 필드를 NULL설정할 수 없습니다.

IsFieldNullable는 DoFieldExchange를 통해 구현됩니다.

CRecordset::IsOpen

레코드 집합이 이미 열려 있는지 확인합니다.

BOOL IsOpen() const;

반환 값

레코드 집합 개체 Open 또는 Requery 멤버 함수가 이전에 호출되었고 레코드 집합이 닫혀 있지 않은 경우 0이 아니고, 그렇지 않으면 0입니다.

CRecordset::m_hstmt

레코드 집합과 연결된 형식 HSTMT의 ODBC 문 데이터 구조에 대한 핸들을 포함합니다.

설명

ODBC 데이터 원본에 대한 각 쿼리는 HSTMT.

주의

호출되기 전에는 Open 사용하지 m_hstmt 마세요.

일반적으로 직접 액세스할 HSTMT 필요는 없지만 SQL 문을 직접 실행하는 데 필요할 수 있습니다. 클래스 CDatabase 의 멤버 함수는 ExecuteSQL .를 사용하는 m_hstmt예제를 제공합니다.

CRecordset::m_nFields

레코드 집합 클래스의 필드 데이터 멤버 수를 포함합니다. 즉, 데이터 원본에서 레코드 집합에서 선택한 열 수입니다.

설명

레코드 집합 클래스의 생성자는 올바른 숫자로 초기화 m_nFields 해야 합니다. 대량 행 페치를 구현하지 않은 경우 레코드 집합 클래스를 선언하는 ClassWizard 데 사용할 때 이 초기화를 작성합니다. 수동으로 작성할 수도 있습니다.

프레임워크는 이 숫자를 사용하여 필드 데이터 멤버와 데이터 원본에 있는 현재 레코드의 해당 열 간의 상호 작용을 관리합니다.

주의

이 숫자는 매개 변수CFieldExchange::outputColumn를 사용하여 호출하거나 DoBulkFieldExchange 호출한 DoFieldExchange 후에 등록된 "출력 열" 수에 SetFieldType 해당해야 합니다.

"Recordset: 동적으로 데이터 열 바인딩" 문서에 설명된 대로 열을 동적으로 바인딩할 수 있습니다. 이렇게 하는 경우 동적으로 바인딩된 열에 m_nFields 대한 멤버 함수의 RFX 또는 Bulk RFX 함수 호출 DoFieldExchange DoBulkFieldExchange 수를 반영하려면 개수를 늘려야 합니다.

자세한 내용은 레코드 집합: ODBC(동적 바인딩 데이터 열)레코드 집합: 대량 레코드 가져오기(ODBC) 문서를 참조하세요.

예시

RFX 사용: 레코드 필드 교환을 참조하세요.

CRecordset::m_nParams

레코드 집합 클래스의 매개 변수 데이터 멤버 수를 포함합니다. 즉, 레코드 집합의 쿼리와 함께 전달된 매개 변수의 수입니다.

설명

레코드 집합 클래스에 매개 변수 데이터 멤버가 있는 경우 클래스의 생성자는 올바른 숫자로 초기화 m_nParams 해야 합니다. 기본값 m_nParams 은 0입니다. 수동으로 수행해야 하는 매개 변수 데이터 멤버를 추가하는 경우 매개 변수 수를 반영하기 위해 클래스 생성자에서 초기화를 수동으로 추가해야 합니다(사용자 또는 m_strSort 문자열의 '' 자리 표시자 m_strFilter 수만큼 커야 함).

프레임워크는 레코드 집합의 쿼리를 매개 변수화할 때 이 숫자를 사용합니다.

주의

이 번호는 매개 변수 값CFieldExchange::inputParamCFieldExchange::paramCFieldExchange::outputParam, 또는 CFieldExchange::inoutParam.인 호출 후 SetFieldType 등록된 DoFieldExchange DoBulkFieldExchange "params" 수에 해당해야 합니다.

예시

레코드 집합: 레코드 집합 매개 변수화(ODBC)레코드 필드 교환: RFX 사용 문서를 참조하세요.

CRecordset::m_pDatabase

레코드 집합이 데이터 원본에 CDatabase 연결된 개체에 대한 포인터를 포함합니다.

설명

이 변수는 두 가지 방법으로 설정됩니다. 일반적으로 레코드 집합 개체를 생성할 때 이미 연결된 CDatabase 개체에 포인터를 전달합니다. 대신 CRecordset 전달하는 NULL 경우 개체를 CDatabase 만들어 연결합니다. 두 경우 CRecordset 모두 이 변수에 포인터를 저장합니다.

일반적으로 에 저장된 m_pDatabase포인터를 직접 사용할 필요가 없습니다. 그러나 고유한 확장을 CRecordset작성하는 경우 포인터를 사용해야 할 수 있습니다. 예를 들어 고유한 CDBException포인터를 throw하는 경우 포인터가 필요할 수 있습니다. 또는 트랜잭션 실행, 시간 제한 설정 또는 클래스 CDatabase 의 멤버 함수를 호출 ExecuteSQL 하여 SQL 문을 직접 실행하는 것과 같은 동일한 CDatabase 개체를 사용하여 작업을 수행해야 하는 경우 필요할 수 있습니다.

CRecordset::m_strFilter

레코드 집합 개체를 생성한 후 해당 멤버 함수를 Open 호출하기 전에 이 데이터 멤버를 사용하여 포함하는 SQL WHERE 절을 저장 CString 합니다.

설명

레코드 집합은 이 문자열을 사용하여 호출 중에 Open Requery 선택한 레코드를 제한하거나 필터링합니다. 이는 "캘리포니아에 본사를 둔 모든 영업 사원"("state = CA")과 같은 레코드의 하위 집합을 선택하는 데 유용합니다. 절에 대한 ODBC SQL 구문은 다음과 같습니다 WHERE .

WHERE search-condition

문자열에 키워드를 WHERE 포함하지 마세요. 프레임워크에서 제공합니다.

'' 자리 표시자를 배치하고, 각 자리 표시자에 대해 클래스에 매개 변수 데이터 멤버를 선언하고, 런타임에 레코드 집합에 매개 변수를 전달하여 필터 문자열을 매개 변수화할 수도 있습니다. 이렇게 하면 런타임에 필터를 생성할 수 있습니다. 자세한 내용은 Recordset: Recordset 매개 변수화(ODBC)를 참조하세요.

SQL 절에 대한 자세한 내용은 SQLWHERE을 참조하세요. 레코드 선택 및 필터링에 대한 자세한 내용은 레코드 집합: 레코드 필터링(ODBC)을 참조하세요.

예시

CCustomer rsCustSet(&m_dbCust);

// Set the filter
rsCustSet.m_strFilter = _T("L_Name = 'Flanders'");

// Run the filtered query
rsCustSet.Open(CRecordset::snapshot, _T("Customer"));

CRecordset::m_strSort

레코드 집합 개체를 생성한 후 해당 멤버 함수를 Open 호출하기 전에 이 데이터 멤버를 사용하여 포함하는 SQL ORDER BY 절을 저장 CString 합니다.

설명

레코드 집합은 이 문자열을 사용하여 호출하는 동안 선택한 레코드를 Open Requery 정렬합니다. 이 기능을 사용하여 하나 이상의 열에서 레코드 집합을 정렬할 수 있습니다. 절에 대한 ODBC SQL 구문은 다음과 같습니다 ORDER BY .

ORDER BY sort-specification [, sort-specification]...

여기서 정렬 사양은 정수 또는 열 이름입니다. 정렬 문자열의 열 목록에 "ASC" 또는 "DESC"를 추가하여 오름차순 또는 내림차순(순서는 기본적으로 오름차순)을 지정할 수도 있습니다. 선택한 레코드는 먼저 나열된 첫 번째 열에 따라 정렬되고 두 번째 열은 정렬됩니다. 예를 들어 성, 이름 순으로 "Customers" 레코드 집합을 주문할 수 있습니다. 나열할 수 있는 열 수는 데이터 원본에 따라 달라집니다. 자세한 내용은 Windows SDK를 참조하세요.

문자열에 키워드를 ORDER BY 포함하지 마세요. 프레임워크에서 제공합니다.

SQL 절에 대한 자세한 내용은 SQL을 참조하세요. 레코드 정렬에 대한 자세한 내용은 레코드 집합: 레코드 정렬(ODBC)을 참조하세요.

예시

CCustomer rsCustSet(&m_dbCust);

// Set the sort string
rsCustSet.m_strSort = _T("L_Name, ContactFirstName");

// Run the sorted query
rsCustSet.Open(CRecordset::snapshot, _T("Customer"));

CRecordset::Move

레코드 집합 내에서 현재 레코드 포인터를 앞으로 또는 뒤로 이동합니다.

virtual void Move(
    long nRows,
    WORD wFetchType = SQL_FETCH_RELATIVE);

매개 변수

nRows
앞으로 또는 뒤로 이동할 행 수입니다. 양수 값은 레코드 집합의 끝쪽으로 앞으로 이동합니다. 음수 값은 시작 부분으로 뒤로 이동합니다.

wFetchType
가져올 행 집합을 Move 결정합니다. 자세한 내용은 설명을 참조하세요.

설명

값 0을 nRowsMove 전달하면 현재 레코드 Move 를 새로 고치고, 현재 AddNew 또는 Edit 모드를 종료하고, 호출되기 전이나 Edit 호출되기 전에 AddNew 현재 레코드의 값을 복원합니다.

참고 항목

레코드 집합을 통해 이동하는 경우 삭제된 레코드를 건너뛸 수 없습니다. 자세한 내용은 CRecordset::IsDeleted를 참조하세요. 옵션 집합 Move 을 사용하여 CRecordset skipDeletedRecords 열면 매개 변수가 0인지 nRows 어설션합니다. 이 동작은 동일한 데이터를 사용하여 다른 클라이언트 애플리케이션에서 삭제한 행의 새로 고침을 방지합니다. 에 대한 설명skipDeletedRecordsdwOption 매개 변수 Open 를 참조하세요.

Move 행 집합별로 레코드 집합의 위치를 변경합니다. 및 값 nRows wFetchTypeMove 에 따라 적절한 행 집합을 가져온 다음 해당 행 집합의 첫 번째 레코드를 현재 레코드로 만듭니다. 대량 행 가져오기를 구현하지 않은 경우 행 집합 크기는 항상 1입니다. 행 집합 Move 을 페치할 때 멤버 함수를 CheckRowsetError 직접 호출하여 페치로 인한 오류를 처리합니다.

전달하는 Move 값에 따라 다른 CRecordset 멤버 함수와 동일합니다. 특히 값 wFetchType 은 보다 직관적이며 현재 레코드를 이동하기 위한 기본 메서드인 멤버 함수를 나타낼 수 있습니다.

다음 표에는 가능한 값wFetchType, 기반 wFetchType 및 기반으로 가져올 행 집합 MovenRows해당하는 모든 해당 멤버 함수가 나열되어 있습니다wFetchType.

wFetchType 가져온 행 집합 동등한 멤버 함수
SQL_FETCH_RELATIVE (기본값) 현재 행 집합의 첫 번째 행에서 행을 시작하는 nRows 행 집합입니다.
SQL_FETCH_NEXT 다음 행 집합입니다. nRows 는 무시됩니다. MoveNext
SQL_FETCH_PRIOR 이전 행 집합; nRows 는 무시됩니다. MovePrev
SQL_FETCH_FIRST 레코드 집합의 첫 번째 행 집합입니다. nRows 는 무시됩니다. MoveFirst
SQL_FETCH_LAST 레코드 집합의 마지막 전체 행 집합입니다. nRows 는 무시됩니다. MoveLast
SQL_FETCH_ABSOLUTE 0이면 nRows> 레코드 집합의 시작 부분에서 행을 시작하는 nRows 행 집합입니다. 0이면 nRows< 레코드 집합의 끝에서 행을 시작하는 nRows 행 집합입니다. = 0이면 nRows BOF(파일 시작) 조건이 반환됩니다. SetAbsolutePosition
SQL_FETCH_BOOKMARK 책갈피 값이 해당하는 행에서 시작하는 행 집합입니다 nRows. SetBookmark

참고 항목

전달 전용 레코드 집합 Move 의 경우 에 대한 wFetchTypeSQL_FETCH_NEXT 으로만 유효합니다.

주의

레코드 집합에 레코드가 없는 경우 호출 Move 은 예외를 throw합니다. 레코드 집합에 레코드가 있는지 여부를 확인하려면 호출 IsBOF 하고 IsEOF.

참고 항목

레코드 집합IsBOF 의 시작 또는 끝을 지나 스크롤하거나 IsEOF 0이 아닌 값을 반환하는 경우 함수를 Move 호출하면 throw될 수 있습니다 CDBException. 예를 들어 IsEOF 0이 아닌 값을 반환하고 IsBOF 반환하지 MoveNext 않으면 예외가 throw되지만 MovePrev 그렇지 않습니다.

참고 항목

현재 레코드가 업데이트되거나 추가되는 동안 호출 Move 하는 경우 경고 없이 업데이트가 손실됩니다.

레코드 집합 탐색에 대한 자세한 내용은 레코드 집합: 스크롤(ODBC)레코드 집합: 책갈피 및 절대 위치(ODBC) 문서를 참조하세요. 대량 행 페치 에 대한 자세한 내용은 레코드 집합: 대량 레코드 가져오기(ODBC)를 참조하세요. 관련 정보는 Windows SDK의 ODBC API 함수 SQLExtendedFetch 를 참조하세요.

예시

// rs is a CRecordset or a CRecordset-derived object

// Change the rowset size to 5
rs.SetRowsetSize(5);

// Open the recordset
rs.Open(CRecordset::dynaset, NULL, CRecordset::useMultiRowFetch);

// Move to the first record in the recordset
rs.MoveFirst();

// Move to the sixth record
rs.Move(5);
// Other equivalent ways to move to the sixth record:
rs.Move(6, SQL_FETCH_ABSOLUTE);
rs.SetAbsolutePosition(6);
// In this case, the sixth record is the first record in the next rowset,
// so the following are also equivalent:
rs.MoveFirst();
rs.Move(1, SQL_FETCH_NEXT);

rs.MoveFirst();
rs.MoveNext();

CRecordset::MoveFirst

첫 번째 행 집합의 첫 번째 레코드를 현재 레코드로 만듭니다.

void MoveFirst();

설명

대량 행 가져오기가 구현되었는지 여부에 관계없이 항상 레코드 집합의 첫 번째 레코드가 됩니다.

레코드 집합을 연 직후에 호출 MoveFirst 할 필요가 없습니다. 이때 첫 번째 레코드(있는 경우)는 자동으로 현재 레코드입니다.

참고 항목

이 멤버 함수는 정방향 전용 레코드 집합에 유효하지 않습니다.

참고 항목

레코드 집합을 통해 이동하는 경우 삭제된 레코드를 건너뛸 수 없습니다. IsDeleted 자세한 내용은 멤버 함수를 참조하세요.

주의

레코드 집합에 레코드가 Move 없는 경우 함수를 호출하면 예외가 throw됩니다. 레코드 집합에 레코드가 있는지 여부를 확인하려면 호출 IsBOF 하고 IsEOF.

참고 항목

현재 레코드가 Move 업데이트되거나 추가되는 동안 함수를 호출하면 경고 없이 업데이트가 손실됩니다.

레코드 집합 탐색에 대한 자세한 내용은 레코드 집합: 스크롤(ODBC)레코드 집합: 책갈피 및 절대 위치(ODBC) 문서를 참조하세요. 대량 행 페치 에 대한 자세한 내용은 레코드 집합: 대량 레코드 가져오기(ODBC)를 참조하세요.

예시

IsBOF에 대한 예를 참조하세요.

CRecordset::MoveLast

마지막 전체 행 집합의 첫 번째 레코드를 현재 레코드로 만듭니다.

void MoveLast();

설명

대량 행 가져오기를 구현하지 않은 경우 레코드 집합의 행 집합 크기가 1이므로 MoveLast 레코드 집합의 마지막 레코드로 이동합니다.

참고 항목

이 멤버 함수는 정방향 전용 레코드 집합에 유효하지 않습니다.

참고 항목

레코드 집합을 통해 이동하는 경우 삭제된 레코드를 건너뛸 수 없습니다. IsDeleted 자세한 내용은 멤버 함수를 참조하세요.

주의

레코드 집합에 레코드가 Move 없는 경우 함수를 호출하면 예외가 throw됩니다. 레코드 집합에 레코드가 있는지 여부를 확인하려면 호출 IsBOF 하고 IsEOF.

참고 항목

현재 레코드가 Move 업데이트되거나 추가되는 동안 함수를 호출하면 경고 없이 업데이트가 손실됩니다.

레코드 집합 탐색에 대한 자세한 내용은 레코드 집합: 스크롤(ODBC)레코드 집합: 책갈피 및 절대 위치(ODBC) 문서를 참조하세요. 대량 행 페치 에 대한 자세한 내용은 레코드 집합: 대량 레코드 가져오기(ODBC)를 참조하세요.

예시

IsBOF에 대한 예를 참조하세요.

CRecordset::MoveNext

다음 행 집합의 첫 번째 레코드를 현재 레코드로 만듭니다.

void MoveNext();

설명

대량 행 가져오기를 구현하지 않은 경우 레코드 집합의 행 집합 크기가 1이므로 MoveNext 다음 레코드로 이동합니다.

참고 항목

레코드 집합을 통해 이동하는 경우 삭제된 레코드를 건너뛸 수 없습니다. IsDeleted 자세한 내용은 멤버 함수를 참조하세요.

주의

레코드 집합에 레코드가 Move 없는 경우 함수를 호출하면 예외가 throw됩니다. 레코드 집합에 레코드가 있는지 여부를 확인하려면 호출 IsBOF 하고 IsEOF.

참고 항목

또한 호출MoveNext하기 전에 호출 IsEOF 하는 것이 좋습니다. 예를 들어 레코드 집합 IsEOF 의 끝을 지나 스크롤한 경우 0이 아닌 값을 반환합니다. 후속 호출은 예외를 MoveNext throw합니다.

참고 항목

현재 레코드가 Move 업데이트되거나 추가되는 동안 함수를 호출하면 경고 없이 업데이트가 손실됩니다.

레코드 집합 탐색에 대한 자세한 내용은 레코드 집합: 스크롤(ODBC)레코드 집합: 책갈피 및 절대 위치(ODBC) 문서를 참조하세요. 대량 행 페치 에 대한 자세한 내용은 레코드 집합: 대량 레코드 가져오기(ODBC)를 참조하세요.

예시

IsBOF에 대한 예를 참조하세요.

CRecordset::MovePrev

이전 행 집합의 첫 번째 레코드를 현재 레코드로 만듭니다.

void MovePrev();

설명

대량 행 가져오기를 구현하지 않은 경우 레코드 집합의 행 집합 크기가 1이므로 MovePrev 이전 레코드로 이동합니다.

참고 항목

이 멤버 함수는 정방향 전용 레코드 집합에 유효하지 않습니다.

참고 항목

레코드 집합을 통해 이동하는 경우 삭제된 레코드를 건너뛸 수 없습니다. IsDeleted 자세한 내용은 멤버 함수를 참조하세요.

주의

레코드 집합에 레코드가 Move 없는 경우 함수를 호출하면 예외가 throw됩니다. 레코드 집합에 레코드가 있는지 여부를 확인하려면 호출 IsBOF 하고 IsEOF.

참고 항목

또한 호출MovePrev하기 전에 호출 IsBOF 하는 것이 좋습니다. 예를 들어 레코드 집합 IsBOF 의 시작 부분보다 먼저 스크롤한 경우 0이 아닌 값을 반환합니다. 후속 호출은 예외를 MovePrev throw합니다.

참고 항목

현재 레코드가 Move 업데이트되거나 추가되는 동안 함수를 호출하면 경고 없이 업데이트가 손실됩니다.

레코드 집합 탐색에 대한 자세한 내용은 레코드 집합: 스크롤(ODBC)레코드 집합: 책갈피 및 절대 위치(ODBC) 문서를 참조하세요. 대량 행 페치 에 대한 자세한 내용은 레코드 집합: 대량 레코드 가져오기(ODBC)를 참조하세요.

예시

IsBOF에 대한 예를 참조하세요.

CRecordset::OnSetOptions

지정된 ODBC 문에 대한 옵션(선택 시 사용)을 설정하기 위해 호출됩니다.

virtual void OnSetOptions(HSTMT hstmt);

매개 변수

hstmt
HSTMT 옵션을 설정할 ODBC 문의 값입니다.

설명

지정된 ODBC 문에 대한 옵션(선택 시 사용)을 설정하기 위한 호출 OnSetOptions 입니다. 프레임워크는 이 멤버 함수를 호출하여 레코드 집합에 대한 초기 옵션을 설정합니다. OnSetOptions 는 스크롤 가능한 커서 및 커서 동시성에 대한 데이터 원본의 지원을 결정하고 그에 따라 레코드 집합의 옵션을 설정합니다. 선택 작업에는 사용되지만 OnSetOptions 업데이트 작업에 OnSetUpdateOptions 는 사용됩니다.

드라이버 또는 데이터 원본과 관련된 옵션을 설정하려면 재정 OnSetOptions 의합니다. 예를 들어 데이터 원본이 단독 액세스를 위해 열기를 지원하는 경우 해당 기능을 활용하도록 재정 OnSetOptions 의할 수 있습니다.

커서에 대한 자세한 내용은 ODBC를 참조하세요.

CRecordset::OnSetUpdateOptions

지정된 ODBC 문에 대한 옵션(업데이트 시 사용)을 설정하기 위해 호출됩니다.

virtual void OnSetUpdateOptions(HSTMT hstmt);

매개 변수

hstmt
HSTMT 옵션을 설정할 ODBC 문의 값입니다.

설명

지정된 ODBC 문에 대한 옵션(업데이트 시 사용)을 설정하기 위한 호출 OnSetUpdateOptions 입니다. 프레임워크는 레코드 집합에서 레코드를 HSTMT 업데이트하기 위해 만든 후 이 멤버 함수를 호출합니다. 선택 작업에 OnSetUpdateOptions 는 사용되지만 OnSetOptions 업데이트 작업에는 사용됩니다. OnSetUpdateOptions 스크롤 가능한 커서 및 커서 동시성에 대한 데이터 원본의 지원을 결정하고 그에 따라 레코드 집합의 옵션을 설정합니다.

해당 문이 데이터베이스에 액세스하는 데 사용되기 전에 ODBC 문의 옵션을 설정하려면 재정 OnSetUpdateOptions 의합니다.

커서에 대한 자세한 내용은 ODBC를 참조하세요.

CRecordset::Open

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

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

매개 변수

nOpenType
기본값 AFX_DB_USE_DEFAULT_TYPE을 적용하거나 다음 값 enum OpenType중 하나를 사용합니다.

  • CRecordset::dynaset 양방향 스크롤이 있는 레코드 집합입니다. 레코드 집합을 열면 레코드의 멤버 자격과 순서가 결정되지만 다른 사용자가 데이터 값으로 변경한 내용은 페치 작업 후에 표시됩니다. 다이나셋은 키 집합 기반 레코드 집합이라고도 합니다.

  • CRecordset::snapshot 양방향 스크롤이 있는 정적 레코드 집합입니다. 레코드 집합을 열면 레코드의 멤버 자격 및 순서가 결정됩니다. 레코드를 페치하면 데이터 값이 결정됩니다. 다른 사용자가 변경한 내용은 레코드 집합을 닫은 다음 다시 열 때까지 표시되지 않습니다.

  • CRecordset::dynamic 양방향 스크롤이 있는 레코드 집합입니다. 다른 사용자가 멤버 자격, 순서 지정 및 데이터 값에 대한 변경 내용을 페치 작업 후에 볼 수 있습니다. 많은 ODBC 드라이버는 이러한 유형의 레코드 집합을 지원하지 않습니다.

  • CRecordset::forwardOnly 앞으로 스크롤만 있는 읽기 전용 레코드 집합입니다.

    의 경우 CRecordset기본값은 .입니다 CRecordset::snapshot. 기본값 메커니즘을 사용하면 Visual C++ 마법사가 기본값이 다른 ODBC CRecordset 및 DAO CDaoRecordset와 상호 작용할 수 있습니다.

이러한 레코드 집합 형식에 대한 자세한 내용은 레코드 집합(ODBC)을 참조하세요. 관련 정보는 Windows SDK에서 "블록 및 스크롤 가능한 커서 사용"을 참조하세요.

주의

요청된 형식이 지원되지 않으면 프레임워크에서 예외를 throw합니다.

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

  • 포인터입니다 NULL .

  • 테이블의 이름입니다.

  • SQL SELECT 문(선택적으로 SQL WHERE 또는 ORDER BY 절 포함)입니다.

  • CALL 미리 정의된 쿼리(저장 프로시저)의 이름을 지정하는 문입니다. 중괄호와 CALL 키워드 사이에 공백을 삽입하지 않도록 주의하세요.

이 문자열에 대한 자세한 내용은 설명 섹션에서 ClassWizard의 역할에 대한 테이블 및 설명을 참조하세요 .

참고 항목

결과 집합의 열 순서는 사용자 또는 DoBulkFieldExchange 함수 재정의의 RFX 또는 Bulk RFX 함수 호출 순서와 DoFieldExchange 일치해야 합니다.

dwOptions
아래에 나열된 값의 조합을 지정할 수 있는 비트 마스크입니다. 이들 중 일부는 상호 배타적입니다. 기본값은 none입니다.

  • CRecordset::none 옵션이 설정되지 않았습니다. 이 매개 변수 값은 다른 모든 값과 함께 사용할 수 없습니다. 기본적으로 레코드 집합을 업데이트 Edit 하거나 Delete 새 레코드 AddNew를 추가하도록 허용합니다. 호환성은 데이터 원본 및 지정한 옵션에 nOpenType 따라 달라집니다. 대량 추가에 대한 최적화는 사용할 수 없습니다. 대량 행 가져오기는 구현되지 않습니다. 삭제된 레코드는 레코드 집합 탐색 중에 건너뛰지 않습니다. 책갈피는 사용할 수 없습니다. 자동 더티 필드 검사가 구현됩니다.

  • CRecordset::appendOnly 레코드 집합을 허용 Edit 하거나 Delete 허용하지 않습니다. 허용만 허용 AddNew 합니다. 이 옵션은 .와 CRecordset::readOnly함께 사용할 수 없습니다.

  • CRecordset::readOnly 레코드 집합을 읽기 전용으로 엽니다. 이 옵션은 .와 CRecordset::appendOnly함께 사용할 수 없습니다.

  • CRecordset::optimizeBulkAdd 준비된 SQL 문을 사용하여 한 번에 많은 레코드 추가를 최적화합니다. ODBC API 함수 SQLSetPos 를 사용하여 레코드 집합을 업데이트하지 않는 경우에만 적용됩니다. 첫 번째 업데이트는 더티로 표시된 필드를 결정합니다. 이 옵션은 .와 CRecordset::useMultiRowFetch함께 사용할 수 없습니다.

  • CRecordset::useMultiRowFetch 단일 페치 작업에서 여러 행을 검색할 수 있도록 대량 행 페치를 구현합니다. 이 기능은 성능을 향상하도록 설계된 고급 기능입니다. 그러나 대량 레코드 필드 교환은 .에서 지원 ClassWizard되지 않습니다. 이 옵션은 .와 CRecordset::optimizeBulkAdd함께 사용할 수 없습니다. 지정 CRecordset::useMultiRowFetch하면 옵션이 CRecordset::noDirtyFieldCheck 자동으로 켜집니다(이중 버퍼링을 사용할 수 없음). 정방향 전용 레코드 집합에서는 옵션이 CRecordset::useExtendedFetch 자동으로 켜집니다. 대량 행 페치 에 대한 자세한 내용은 레코드 집합: 대량 레코드 가져오기(ODBC)를 참조하세요.

  • CRecordset::skipDeletedRecords 레코드 집합을 탐색할 때 삭제된 모든 레코드를 건너뜁니다. 이렇게 하면 특정 상대 페치의 성능이 저하됩니다. 이 옵션은 전달 전용 레코드 집합에서 유효하지 않습니다. nRows 매개 변수를 0 CRecordset::skipDeletedRecords 으로 설정하고 옵션 집합 Move 을 사용하여 호출 Move 하면 어설션됩니다. CRecordset::skipDeletedRecords는 드라이버 압축과 유사합니다. 즉, 삭제된 행이 레코드 집합에서 제거됩니다. 그러나 드라이버가 레코드를 압축하는 경우 삭제한 레코드만 건너뜁니다. 레코드 집합이 열려 있는 동안 다른 사용자가 삭제한 레코드는 건너뛰지 않습니다. CRecordset::skipDeletedRecords 는 다른 사용자가 삭제한 행을 건너뜁니다.

  • CRecordset::useBookmarks 지원되는 경우 레코드 집합에서 책갈피를 사용할 수 있습니다. 책갈피는 데이터 검색 속도가 느리지만 데이터 탐색 성능을 향상시킵니다. 전달 전용 레코드 집합에서는 유효하지 않습니다. 자세한 내용은 레코드 집합: 책갈피 및 절대 위치(ODBC)를 참조하세요.

  • CRecordset::noDirtyFieldCheck 자동 더티 필드 확인(이중 버퍼링)을 끕니다. 이렇게 하면 성능이 향상됩니다. 그러나 필드와 SetFieldNull 멤버 함수를 호출 SetFieldDirty 하여 필드를 더티로 수동으로 표시해야 합니다. 클래스의 이중 버퍼링은 클래스 CRecordset CDaoRecordset의 이중 버퍼링과 유사합니다. 그러나 개별 CRecordset필드에는 이중 버퍼링을 사용하도록 설정할 수 없습니다. 모든 필드에 대해 이중 버퍼링을 사용하도록 설정하거나 모든 필드에 대해 사용하지 않도록 설정할 수 있습니다. 옵션을 CRecordset::useMultiRowFetchCRecordset::noDirtyFieldCheck 지정하면 자동으로 SetFieldDirty SetFieldNull 설정되지만 대량 행 가져오기를 구현하는 레코드 집합에는 사용할 수 없습니다.

  • CRecordset::executeDirect 준비된 SQL 문을 사용하지 마세요. 성능 향상을 위해 멤버 함수가 Requery 호출되지 않는 경우 이 옵션을 지정합니다.

  • CRecordset::useExtendedFetch 대신 구현 SQLExtendedFetch 합니다 SQLFetch. 이는 앞으로 전용 레코드 집합에서 대량 행 페치를 구현하기 위해 설계되었습니다. 정방향 전용 레코드 집합 CRecordset::useExtendedFetch 에 옵션을 CRecordset::useMultiRowFetch 지정하면 자동으로 설정됩니다.

  • CRecordset::userAllocMultiRowBuffers 사용자는 데이터에 대한 스토리지 버퍼를 할당합니다. 사용자 고유의 스토리지를 할당하려는 경우 이 옵션을 CRecordset::useMultiRowFetch 사용합니다. 그렇지 않으면 프레임워크에서 필요한 스토리지를 자동으로 할당합니다. 자세한 내용은 레코드 집합: 대량으로 레코드 가져오기(ODBC)를 참조하세요. CRecordset::userAllocMultiRowBuffers 실패한 어설션에서 결과를 지정하지 않고 지정합니다CRecordset::useMultiRowFetch.

반환 값

개체를 CRecordset 성공적으로 열면 0이 아니고, 호출된 경우 CDatabase::Open 0이면 0이 반환됩니다.

설명

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

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

참고 항목

개체를 통해 데이터 원본에 대한 CRecordset 액세스는 항상 공유됩니다. 클래스와 CDaoRecordset 달리 개체를 CRecordset 사용하여 전용 액세스 권한이 있는 데이터 원본을 열 수 없습니다.

일반적으로 SQL SELECT 문인 쿼리를 호출Open할 때 다음 표에 표시된 조건에 따라 레코드를 선택합니다.

lpszSQL 매개 변수의 값 선택한 레코드는 다음을 통해 결정됩니다. 예시
NULL 에 의해 반환된 GetDefaultSQL문자열입니다.
SQL 테이블 이름 테이블 목록의 모든 열 또는 DoFieldExchange DoBulkFieldExchange "Customer"
미리 정의된 쿼리(저장 프로시저) 이름 쿼리가 반환하도록 정의된 열입니다. "{call OverDueAccts}"
SELECT column-list FROM table-list 지정한 테이블의 지정된 열입니다. "SELECT CustId, CustName FROM

Customer"

주의

SQL 문자열에 추가 공백을 삽입하지 마세요. 예를 들어 중괄호와 CALL 키워드 사이에 공백을 삽입하면 MFC는 SQL 문자열을 테이블 이름으로 잘못 해석하고 문에 SELECT 통합하여 예외가 throw됩니다. 마찬가지로 미리 정의된 쿼리에서 출력 매개 변수를 사용하는 경우 중괄호와 '' 기호 사이에 공백을 삽입하지 마세요. 마지막으로 문에서 중괄호 CALL 앞에 공백을 삽입하거나 문의 키워드 SELECT 앞에 공백을 SELECT 삽입하면 안 됩니다.

일반적인 절차는 전달 NULL 하는 것입니다Open. 이 경우 Open GetDefaultSQL을 호출합니다. 파생 CRecordset 클래스 GetDefaultSQL 를 사용하는 경우 지정 ClassWizard한 테이블 이름을 지정합니다. 대신 매개 변수에 lpszSQL 다른 정보를 지정할 수 있습니다.

전달하는 Open 것이 무엇이든 간에 쿼리에 대한 최종 SQL 문자열을 생성하고(문자열에 전달한 문자열에 SQL WHEREORDER BY 절이 추가될 lpszSQL 수 있음) 쿼리를 실행합니다. 호출Open한 후 호출 GetSQL 하여 생성된 문자열을 검사할 수 있습니다. 레코드 집합이 SQL 문을 생성하고 레코드를 선택하는 방법에 대한 자세한 내용은 레코드 집합: 레코드 집합에서 레코드를 선택하는 방법(ODBC)을 참조하세요.

레코드 집합 클래스의 필드 데이터 멤버는 선택한 데이터의 열에 바인딩됩니다. 레코드가 반환되면 첫 번째 레코드가 현재 레코드가 됩니다.

필터 또는 정렬과 같은 레코드 집합에 대한 옵션을 설정하려면 레코드 집합 개체를 생성한 후 호출 Open하기 전에 이를 지정합니다. 레코드 집합이 이미 열려 있는 후 레코드 집합의 레코드를 새로 고치려면 다음을 호출합니다 Requery.

자세한 내용은 레코드 집합(ODBC), 레코드 집합: 레코드 집합이 레코드를 선택하는 방법(ODBC) 및 레코드 집합: ODBC(레코드 집합 만들기 및 닫기)를 참조하세요.

예시

다음 코드 예제에서는 다른 형태의 호출을 보여 줍니다 Open .

// 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();

CRecordset::RefreshRowset

현재 행 집합의 행에 대한 데이터 및 상태를 업데이트합니다.

void RefreshRowset(
    WORD wRow,
    WORD wLockType = SQL_LOCK_NO_CHANGE);

매개 변수

wRow
현재 행 집합에 있는 행의 1부터 시작하는 위치입니다. 이 값은 0부터 행 집합의 크기까지 다양할 수 있습니다.

wLockType
행을 새로 고친 후 잠그는 방법을 나타내는 값입니다. 자세한 내용은 설명을 참조하세요.

설명

값을 0 wRow으로 전달하면 행 집합의 모든 행이 새로 고쳐집니다.

사용RefreshRowset하려면 멤버 함수에서 옵션을 Open 지정하여 대량 행 페치를 CRecordset::useMulitRowFetch 구현해야 합니다.

RefreshRowset 는 ODBC API 함수 SQLSetPos를 호출합니다. 매개 변수는 wLockType 실행 후 SQLSetPos 행의 잠금 상태를 지정합니다. 다음 표에서는 에 대한 가능한 값을 설명합니다 wLockType.

wLockType 설명
SQL_LOCK_NO_CHANGE (기본값) 드라이버 또는 데이터 원본은 행이 호출되기 전 RefreshRowset 과 동일한 잠금 또는 잠금 해제 상태인지 확인합니다.
SQL_LOCK_EXCLUSIVE 드라이버 또는 데이터 원본은 행을 단독으로 잠급 수 있습니다. 모든 데이터 원본이 이러한 유형의 잠금을 지원하는 것은 아닙니다.
SQL_LOCK_UNLOCK 드라이버 또는 데이터 원본이 행의 잠금을 해제합니다. 모든 데이터 원본이 이러한 유형의 잠금을 지원하는 것은 아닙니다.

자세한 내용은 SQLSetPosWindows SDK를 참조하세요. 대량 행 페치 에 대한 자세한 내용은 레코드 집합: 대량 레코드 가져오기(ODBC)를 참조하세요.

CRecordset::Requery

레코드 집합을 다시 빌드(새로 고침)합니다.

virtual BOOL Requery();

반환 값

레코드 집합이 성공적으로 다시 작성되었으면 0이 아닌 경우 그렇지 않으면 0입니다.

설명

레코드가 반환되면 첫 번째 레코드가 현재 레코드가 됩니다.

레코드 집합에 사용자 또는 다른 사용자가 데이터 원본에 추가하는 추가 및 삭제가 반영되도록 하려면 호출 Requery하여 레코드 집합을 다시 빌드해야 합니다. 레코드 집합이 다이나셋인 경우 사용자 또는 다른 사용자가 기존 레코드에 적용한 업데이트를 자동으로 반영합니다(추가는 아님). 레코드 집합이 스냅샷인 경우 다른 사용자의 편집 내용과 추가 및 삭제를 반영하도록 호출 Requery 해야 합니다.

다이나셋 또는 스냅샷의 경우 새 필터 또는 정렬 또는 새 매개 변수 값을 사용하여 레코드 집합을 다시 작성하려는 경우 언제든지 호출 Requery 합니다. 호출Requery하기 전에 새 값을 m_strFilter m_strSort 할당하여 새 필터 또는 정렬 속성을 설정합니다. 호출 Requery하기 전에 매개 변수 데이터 멤버에 새 값을 할당하여 새 매개 변수를 설정합니다. 필터 및 정렬 문자열이 변경되지 않은 경우 쿼리를 다시 사용하여 성능을 향상시킬 수 있습니다.

레코드 집합을 다시 빌드하는 데 실패하면 레코드 집합이 닫힙니다. 호출 Requery하기 전에 멤버 함수를 호출 CanRestart 하여 레코드 집합을 다시 쿼리할 수 있는지 여부를 확인할 수 있습니다. CanRestart 는 성공한다고 Requery 보장하지 않습니다.

주의

호출한 후에만 호출 Requery Open합니다.

예시

다음은 레코드 집합을 다시 빌드하여 다른 정렬 순서를 적용하는 예제입니다.

CCustomer rsCustSet(&m_dbCust);

// Open the recordset
rsCustSet.Open();

// Use the recordset ...

// Set the sort order and Requery the recordset
rsCustSet.m_strSort = _T("L_Name, ContactFirstName");
if (!rsCustSet.CanRestart())
return;    // Unable to requery

if (!rsCustSet.Requery())
// Requery failed, so take action
AfxMessageBox(_T("Requery failed!"));

CRecordset::SetAbsolutePosition

레코드 집합을 지정된 레코드 번호에 해당하는 레코드에 배치합니다.

void SetAbsolutePosition(long nRows);

매개 변수

nRows
레코드 집합의 현재 레코드에 대한 1부터 시작하는 서수 위치입니다.

설명

SetAbsolutePosition 는 이 서수 위치에 따라 현재 레코드 포인터를 이동합니다.

참고 항목

이 멤버 함수는 정방향 전용 레코드 집합에서 유효하지 않습니다.

ODBC 레코드 집합의 경우 절대 위치 설정 1은 레코드 집합의 첫 번째 레코드를 나타냅니다. 0의 설정은 BOF(파일의 시작) 위치를 나타냅니다.

음수 값을 .에 SetAbsolutePosition전달할 수도 있습니다. 이 경우 레코드 집합의 위치는 레코드 집합의 끝에서 평가됩니다. 예를 들어 SetAbsolutePosition( -1 ) 현재 레코드 포인터를 레코드 집합의 마지막 레코드로 이동합니다.

참고 항목

절대 위치는 서로게이트 레코드 번호로 사용할 수 없습니다. 이전 레코드가 삭제될 때 레코드의 위치가 변경되므로 책갈피는 여전히 지정된 위치를 유지하고 반환하는 권장 방법입니다. 또한 레코드 집합 내의 개별 레코드 순서가 절을 사용하여 ORDER BY SQL 문으로 만들어지지 않는 한 보장되지 않으므로 레코드 집합이 다시 만들어지면 지정된 레코드의 절대 위치가 동일하다는 것을 확신할 수 없습니다.

레코드 집합 탐색 및 책갈피에 대한 자세한 내용은 레코드 집합: 스크롤(ODBC) 및 레코드 집합: 책갈피 및 절대 위치(ODBC) 문서를 참조하세요.

CRecordset::SetBookmark

지정된 책갈피가 포함된 레코드에 레코드 집합을 배치합니다.

void SetBookmark(const CDBVariant& varBookmark);

매개 변수

varBookmark
특정 레코드의 CDBVariant 책갈피 값을 포함하는 개체에 대한 참조입니다.

설명

레코드 집합에서 책갈피가 지원되는지 확인하려면 .를 호출 CanBookmark합니다. 지원되는 경우 책갈피를 사용할 수 있도록 하려면 멤버 함수의 Open 매개 변수에서 dwOptions 옵션을 설정 CRecordset::useBookmarks 해야 합니다.

참고 항목

책갈피가 지원되지 않거나 사용할 수 없는 경우 호출 SetBookmark 하면 예외가 throw됩니다. 책갈피는 전달 전용 레코드 집합에서 지원되지 않습니다.

먼저 현재 레코드의 책갈피를 검색하려면 책갈피 값을 개체에 저장하는 호출을 CDBVariant 호출GetBookmark합니다. 나중에 저장된 책갈피 값을 사용하여 호출 SetBookmark 하여 해당 레코드로 돌아갈 수 있습니다.

참고 항목

특정 레코드 집합 작업 후에는 호출 SetBookmark하기 전에 책갈피 지속성을 확인해야 합니다. 예를 들어 책갈피를 검색한 다음 호출Requery하는 경우 책갈 GetBookmark 피가 더 이상 유효하지 않을 수 있습니다. 호출 CDatabase::GetBookmarkPersistence 하여 안전하게 호출 SetBookmark할 수 있는지 확인합니다.

책갈피 및 레코드 집합 탐색에 대한 자세한 내용은 Recordset: ODBC(책갈피 및 절대 위치) 및 레코드 집합: 스크롤(ODBC) 문서를 참조하세요.

CRecordset::SetFieldDirty

레코드 집합의 필드 데이터 멤버에 변경되거나 변경되지 않은 것으로 플래그를 지정합니다.

void SetFieldDirty(void* pv, BOOL bDirty = TRUE);

매개 변수

pv
레코드 집합 또는 NULL에 있는 필드 데이터 멤버의 주소를 포함합니다. 이 경우 NULL레코드 집합의 모든 필드 데이터 멤버에 플래그가 지정됩니다. (C++ NULL 는 데이터베이스 용어의 Null과 동일하지 않습니다. 즉, "값이 없습니다.")

bDirty
TRUE 필드 데이터 멤버가 "dirty"(변경됨)로 플래그가 지정되면 입니다. 그렇지 않으면 FALSE 필드 데이터 멤버에 "clean"(변경되지 않음)으로 플래그가 지정됩니다.

설명

필드를 변경되지 않은 것으로 표시하면 필드가 업데이트되지 않고 SQL 트래픽이 줄어듭니다.

참고 항목

이 멤버 함수는 대량 행 페치를 사용하는 레코드 집합에는 적용되지 않습니다. 대량 행 페치를 SetFieldDirty 구현한 경우 어설션이 실패합니다. 대량 행 페치 에 대한 자세한 내용은 레코드 집합: 대량 레코드 가져오기(ODBC)를 참조하세요.

프레임워크는 변경된 필드 데이터 멤버를 표시하여 RFX(레코드 필드 교환) 메커니즘을 통해 데이터 원본의 레코드에 기록되도록 합니다. 필드 값을 변경하면 일반적으로 필드가 자동으로 더러워지므로 직접 호출 SetFieldDirty 할 필요가 거의 없지만 필드 데이터 멤버에 있는 값에 관계없이 열을 명시적으로 업데이트하거나 삽입해야 하는 경우가 있습니다.

주의

호출하거나 호출한 후에만 이 멤버 함수를 호출 Edit 합니다 AddNew.

함수의 첫 번째 인수에 사용하면 NULL 필드가 아닌 param 필드에만 함수가 outputColumn 적용됩니다. 예를 들어 호출

SetFieldNull(NULL);

은 필드만 outputColumn 을 설정하며 param NULL, 필드는 영향을 받지 않습니다.

필드에서 작업 param 하려면 다음과 같이 작업하려는 개인의 param 실제 주소를 제공해야 합니다.

SetFieldNull(&m_strParam);

즉, 필드와 outputColumn 마찬가지로 모든 param 필드를 NULL설정할 수 없습니다.

CRecordset::SetFieldNull

레코드 집합의 필드 데이터 멤버를 Null(특히 값 없음) 또는 Null이 아닌 것으로 플래그를 지정합니다.

void SetFieldNull(void* pv, BOOL bNull = TRUE);

매개 변수

pv
레코드 집합 또는 NULL에 있는 필드 데이터 멤버의 주소를 포함합니다. 이 경우 NULL레코드 집합의 모든 필드 데이터 멤버에 플래그가 지정됩니다. (C++ NULL 는 데이터베이스 용어의 Null과 동일하지 않습니다. 즉, "값이 없습니다.")

bNull
필드 데이터 멤버에 값이 없는 것으로 플래그가 지정될 경우 0이 아닌 값(Null)입니다. 필드 데이터 멤버가 Null이 아닌 것으로 플래그를 지정해야 하는 경우 그렇지 않으면 0입니다.

설명

레코드 집합에 새 레코드를 추가하면 모든 필드 데이터 멤버가 처음에 Null 값으로 설정되고 "더티"(변경됨)로 플래그가 지정됩니다. 데이터 원본에서 레코드를 검색할 때 해당 열에 이미 값이 있거나 Null입니다.

참고 항목

대량 행 가져오기를 사용하는 레코드 집합에서는 이 멤버 함수를 호출하지 마세요. 대량 행 페치를 구현한 경우 호출 SetFieldNull 하면 어설션이 실패합니다. 대량 행 페치 에 대한 자세한 내용은 레코드 집합: 대량 레코드 가져오기(ODBC)를 참조하세요.

현재 레코드의 필드를 값이 없는 것으로 구체적으로 지정하려면 set을 사용하여 Null SetFieldNull bNull 로 플래그를 지정합니다 TRUE . 필드가 이전에 Null로 표시되어 있고 이제 값을 제공하려는 경우 새 값을 설정합니다. 을 사용하여 Null 플래그 SetFieldNull를 제거할 필요가 없습니다. 필드가 Null일 수 있는지 여부를 확인하려면 .를 호출 IsFieldNullable합니다.

주의

호출하거나 호출한 후에만 이 멤버 함수를 호출 Edit 합니다 AddNew.

함수의 첫 번째 인수에 사용하면 NULL 필드가 아닌 param 필드에만 함수가 outputColumn 적용됩니다. 예를 들어 호출

SetFieldNull(NULL);

은 필드만 outputColumn 을 설정하며 param NULL, 필드는 영향을 받지 않습니다.

필드에서 작업 param 하려면 다음과 같이 작업하려는 개인의 param 실제 주소를 제공해야 합니다.

SetFieldNull(&m_strParam);

즉, 필드와 outputColumn 마찬가지로 모든 param 필드를 NULL설정할 수 없습니다.

참고 항목

매개 변수를 Null로 설정할 때 레코드 집합이 열리기 SetFieldNull 전에 호출하면 어설션이 발생합니다. 이 경우 호출 SetParamNull합니다.

SetFieldNull 는 .를 통해 DoFieldExchange구현됩니다.

CRecordset::SetLockingMode

잠금 모드를 "낙관적" 잠금(기본값) 또는 "비관적" 잠금으로 설정합니다. 업데이트를 위해 레코드가 잠기는 방법을 결정합니다.

void SetLockingMode(UINT nMode);

매개 변수

nMode
다음 값 enum LockMode중 하나를 포함합니다.

  • optimistic 낙관적 잠금은 호출 중에만 업데이트되는 레코드를 잠급 수 있습니다 Update.

  • pessimistic 비관적 잠금은 호출되는 즉시 Edit 레코드를 잠그고 호출이 완료되거나 새 레코드로 이동할 때까지 Update 잠깁니다.

설명

레코드 집합이 업데이트에 사용하는 두 가지 레코드 잠금 전략 중 어느 것을 지정해야 하는 경우 이 멤버 함수를 호출합니다. 기본적으로 레코드 집합의 잠금 모드는 optimistic. 이를 보다 신중한 pessimistic 잠금 전략으로 변경할 수 있습니다. SetLockingMode 레코드 집합 개체를 생성하고 연 후 호출하지만 호출하기 전에 호출Edit합니다.

CRecordset::SetParamNull

매개 변수를 Null(특히 값 없음) 또는 Null이 아닌 매개 변수로 플래그를 지정합니다.

void SetParamNull(
    int nIndex,
    BOOL bNull = TRUE);

매개 변수

nIndex
매개 변수의 인덱스(0부터 시작하는 인덱스)입니다.

bNull
기본값인 경우 TRUE 매개 변수는 Null로 플래그가 지정됩니다. 그렇지 않으면 매개 변수에 Null이 아닌 플래그가 지정됩니다.

설명

달리 SetFieldNull레코드 집합을 열기 전에 호출 SetParamNull 할 수 있습니다.

SetParamNull 는 일반적으로 미리 정의된 쿼리(저장 프로시저)와 함께 사용됩니다.

CRecordset::SetRowsetCursorPosition

커서를 현재 행 집합 내의 행으로 이동합니다.

void SetRowsetCursorPosition(WORD wRow, WORD wLockType = SQL_LOCK_NO_CHANGE);

매개 변수

wRow
현재 행 집합에 있는 행의 1부터 시작하는 위치입니다. 이 값의 범위는 1에서 행 집합의 크기까지입니다.

wLockType
행을 새로 고친 후 잠그는 방법을 나타내는 값입니다. 자세한 내용은 설명을 참조하세요.

설명

대량 행 페치를 구현할 때 레코드는 행 집합에 의해 검색됩니다. 여기서 페치된 행 집합의 첫 번째 레코드는 현재 레코드입니다. 행 집합 내의 다른 레코드를 현재 레코드로 만들려면 .를 호출합니다 SetRowsetCursorPosition. 예를 들어 멤버 함수와 GetFieldValue 결합하여 SetRowsetCursorPosition 레코드 집합의 레코드에서 데이터를 동적으로 검색할 수 있습니다.

사용SetRowsetCursorPosition하려면 멤버 함수에서 매개 변수 옵션을 dwOptions 지정하여 CRecordset::useMultiRowFetch 대량 행 페치를 Open 구현해야 합니다.

SetRowsetCursorPosition 는 ODBC API 함수 SQLSetPos를 호출합니다. 매개 변수는 wLockType 실행 후 SQLSetPos 행의 잠금 상태를 지정합니다. 다음 표에서는 에 대한 가능한 값을 설명합니다 wLockType.

wLockType 설명
SQL_LOCK_NO_CHANGE (기본값) 드라이버 또는 데이터 원본은 행이 호출되기 전 SetRowsetCursorPosition 과 동일한 잠금 또는 잠금 해제 상태인지 확인합니다.
SQL_LOCK_EXCLUSIVE 드라이버 또는 데이터 원본은 행을 단독으로 잠급 수 있습니다. 모든 데이터 원본이 이러한 유형의 잠금을 지원하는 것은 아닙니다.
SQL_LOCK_UNLOCK 드라이버 또는 데이터 원본이 행의 잠금을 해제합니다. 모든 데이터 원본이 이러한 유형의 잠금을 지원하는 것은 아닙니다.

자세한 내용은 SQLSetPosWindows SDK를 참조하세요. 대량 행 페치 에 대한 자세한 내용은 레코드 집합: 대량 레코드 가져오기(ODBC)를 참조하세요.

CRecordset::SetRowsetSize

인출하는 동안 검색할 레코드 수를 지정합니다.

virtual void SetRowsetSize(DWORD dwNewRowsetSize);

매개 변수

dwNewRowsetSize
지정된 인출 중에 검색할 행 수입니다.

설명

이 가상 멤버 함수는 대량 행 페치를 사용할 때 단일 페치 중에 검색할 행 수를 지정합니다. 대량 행 페치를 구현하려면 멤버 함수의 Open 매개 변수에서 dwOptions 옵션을 설정 CRecordset::useMultiRowFetch 해야 합니다.

참고 항목

대량 행 페치를 구현하지 않고 호출 SetRowsetSize 하면 어설션이 실패합니다.

호출하기 전에 호출 SetRowsetSize Open 하여 처음에 레코드 집합의 행 집합 크기를 설정합니다. 대량 행 가져오기를 구현할 때 기본 행 집합 크기는 25입니다.

참고 항목

를 호출할 때는 주의해야 합니다 SetRowsetSize. 데이터에 대한 스토리지를 수동으로 할당하는 경우(dwOptions 매개 변수 Open옵션에 CRecordset::userAllocMultiRowBuffers 지정된 대로) 호출 SetRowsetSize후 커서 탐색 작업을 수행하기 전에 이러한 스토리지 버퍼를 다시 할당해야 하는지 확인해야 합니다.

행 집합 크기에 대한 현재 설정을 가져오려면 .를 호출 GetRowsetSize합니다.

대량 행 페치 에 대한 자세한 내용은 레코드 집합: 대량 레코드 가져오기(ODBC)를 참조하세요.

CRecordset::Update

데이터 원본에 AddNew 새 데이터 또는 편집된 데이터를 저장하여 또는 Edit 작업을 완료합니다.

virtual BOOL Update();

반환 값

하나의 레코드가 성공적으로 업데이트된 경우 0이 아닌 경우 그렇지 않으면 열이 변경되지 않은 경우 0입니다. 업데이트된 레코드가 없거나 둘 이상의 레코드가 업데이트된 경우 예외가 throw됩니다. 데이터 원본의 다른 오류에 대해서도 예외가 throw됩니다.

설명

또는 Edit 멤버 함수를 호출한 후 이 멤버 함수를 AddNew 호출합니다. 이 호출은 또는 Edit 작업을 완료 AddNew 하는 데 필요합니다.

참고 항목

대량 행 페치를 구현한 경우 호출 Update할 수 없습니다. 이로 인해 어설션이 실패합니다. 클래스 CRecordset 는 대량 데이터 행을 업데이트하는 메커니즘을 제공하지 않지만 ODBC API SQLSetPos함수를 사용하여 고유한 함수를 작성할 수 있습니다. 대량 행 페치 에 대한 자세한 내용은 레코드 집합: 대량 레코드 가져오기(ODBC)를 참조하세요.

둘 다 AddNew 데이터 Edit 원본에 저장하기 위해 추가되거나 편집된 데이터가 배치되는 편집 버퍼를 준비합니다. Update 는 데이터를 저장합니다. 변경된 것으로 표시되거나 검색된 필드만 업데이트됩니다.

데이터 원본이 트랜잭션을 지원하는 경우 트랜잭션의 일부(및 해당 AddNew Edit 또는 호출)를 호출할 수 있습니다Update. 트랜잭션에 대한 자세한 내용은 트랜잭션(ODBC)을 참조하세요.

주의

먼저 호출하거나 호출하지 않고 호출 Update Update AddNew EditCDBException하면 . 호출 AddNew 하거나 작업을 호출 Move 하기 전에 또는 레코드 집합 또는 데이터 원본 연결을 닫기 전에 호출 Update 해야 Edit합니다. 그렇지 않으면 알림 없이 변경 내용이 손실됩니다.

오류 처리 Update 에 대한 자세한 내용은 Recordset: How Recordsets Update Records(ODBC)를 참조하세요.

예시

참조 트랜잭션: 레코드 집합에서 트랜잭션 수행(ODBC).

참고 항목

CObject 클래스
계층 구조 차트
CDatabase 클래스
CRecordView 클래스