JetEnumerateColumns 함수

적용 대상: Windows | Windows Server

JetEnumerateColumns 함수

JetEnumerateColumns 함수는 커서의 현재 레코드 또는 해당 커서의 복사 버퍼에서 열 집합과 해당 값을 효율적으로 검색합니다. 검색된 열 및 값은 열 ID 목록, itagSequence 숫자 및 기타 특성으로 제한될 수 있습니다. 이 열 검색 API는 사용자가 제공한 realloc 호환 콜백을 사용하여 가져온 동적으로 할당된 메모리에 정보를 반환한다는 측면에서 고유합니다. 이 새로운 유연성을 통해 호출자에게 알려지지 않은 특정 특성(예: 크기 및 곱하기)을 사용하여 열 데이터를 효율적으로 검색할 수 있습니다. 이렇게 하면 원하는 데이터를 성공적으로 검색할 JetRetrieveColumn 에 대한 최종 호출을 설정하기 위해 JetRetrieveColumn 의 검색 모드를 사용하여 이러한 특성을 확인할 필요가 없습니다.

Windows XP: JetEnumerateColumns 가 Windows XP에 도입되었습니다.

    JET_ERR JET_API JetEnumerateColumns(
      __in          JET_SESID sesid,
      __in          JET_TABLEID tableid,
      __in          unsigned long cEnumColumnId,
      __in_opt      JET_ENUMCOLUMNID* rgEnumColumnId,
      __out         unsigned long* pcEnumColumn,
      __out         JET_ENUMCOLUMN** prgEnumColumn,
      __in          JET_PFNREALLOC pfnRealloc,
      __in          void* pvReallocContext,
      __in          unsigned long cbDataMost,
      __in          JET_GRBIT grbit
    );

매개 변수

sesid

이 호출에 사용할 세션입니다.

tableid

이 호출에 사용할 커서입니다.

cEnumColumnId

열거할 itagSequence 숫자의 선택적 배열이 있는 열 ID의 배열입니다.

cEnumColumnId가 0이면 rgEnumColumnId가 무시되고 모든 열 값이 열거되고 호출자에게 반환됩니다. 열 ID 배열의 요소가 0의 열 ID를 참조하는 경우 해당 열의 열 열거를 건너뛰고 출력의 해당 슬롯은 JET_wrnColumnSkipped 열 상태 함께 생성됩니다.

ctagSequence가 열 ID 배열의 지정된 요소에 대해 0이면 rgtagSequence가 무시되고 해당 열 ID의 모든 열 값이 열거되어 호출자에게 반환됩니다. itagSequence 숫자 배열의 요소가 itagSequence 번호 0(0)을 참조하는 경우 해당 itagSequence 번호의 열거를 건너뛰고 출력의 해당 슬롯이 JET_wrnColumnSkipped 열 값 상태 생성됩니다.

rgEnumColumnId

cEnumColumnId를 참조하세요.

pcEnumColumn

제공된 itagSequence 호환 콜백을 통해 할당된 열 및 해당 값의 열거형 배열을 반환합니다.

입력에 열 ID 배열이 요청되면 출력 배열의 순서와 크기에 입력 배열의 순서와 크기가 반영됩니다. 마찬가지로 입력 시 특정 열 ID에 대해 itagSequence 숫자 배열이 요청되는 경우 해당 열에 대한 열 값의 출력 배열의 순서와 크기는 입력 배열의 순서와 크기를 반영합니다.

출력 매개 변수는 JET_errBadColumnId 및 JET_errColumnNotFound 제외한 모든 오류에서 0(0) 및 NULL 로 설정됩니다. 이러한 오류가 반환되면 출력 데이터가 유효하고 영향을 받는 열 ID를 제외한 모든 항목에 대해 완료됩니다. 영향을 받는 각 열 ID에 대한 상태 코드는 호출자가 잘못된 열 ID를 결정하고 잠재적으로 수정 작업을 수행할 수 있도록 이러한 오류 중 하나로 설정됩니다.

prgEnumColumn

pcEnumColumn을 참조하세요.

pfnRealloc

열 및 해당 값의 출력 배열에 대한 메모리를 할당하는 데 사용되는 할당 호환 콜백 및 선택적 컨텍스트 포인터를 식별합니다.

pvReallocContext

pfnRealloc를 참조하세요.

cbDataMost

긴 텍스트 또는 긴 이진 열에서 반환할 데이터 양에 대한 상한을 설정합니다.

이 매개 변수는 매우 큰 열 값의 열거를 방지하는 데 사용할 수 있습니다. 일반적으로 이러한 열거형은 JET_errOutOfMemory 사용하여 API 호출에 실패할 수 있습니다. 이러한 방식으로 큰 열 값이 잘리면 열 값의 상태 JET_wrnColumnTruncated.

grbit

다음 옵션 중 0개 이상을 지정하는 비트 그룹입니다.

의미

JET_bitEnumerateCompressOutput

열 값을 열거할 때 모든 값을 검색하고 NULL이 아닌 열 값이 하나만 있는 모든 열이 압축된 형식으로 반환될 수 있습니다. 이러한 열에 대한 상태 JET_wrnColumnSingleValue 설정되고 열 값의 크기와 열 값이 포함된 메모리가 JET_ENUMCOLUMN 구조에서 직접 반환됩니다. 모든 적격 열이 이러한 방식으로 압축되는 것은 아닙니다. 자세한 내용은 JET_ENUMCOLUMN 참조하세요.

JET_bitEnumerateCopy

이 옵션은 레코드의 수정된 열 값이 원래 열 값이 아니라 열거되어야 했음을 나타냅니다. 열 값이 수정되지 않은 경우 원래 열 값이 열거됩니다. 이러한 방식으로 레코드를 삽입하거나 업데이트할 때 아직 삽입되거나 업데이트되지 않은 열 값이 열거될 수 있습니다.

이 옵션은 JetRetrieveColumn 또는 JetRetrieveColumns와 함께 사용할 때 JET_bitRetrieveCopy 동일합니다.

JET_bitEnumerateIgnoreDefault

지정된 열이 레코드에 없으면 열 값이 반환되지 않습니다. 일반적으로 열의 기본값(있는 경우)이 이 경우 반환됩니다. 열이 기본값과 다른 값으로 설정된 경우 다른 값이 반환됩니다(즉, 기본값이 있는 열이 명시적으로 NULL 로 설정된 경우 NULL 이 해당 열의 값으로 반환됨). 이 옵션이 요청되더라도 기본값과 같은 열 값이 계속 표시될 수 있습니다. 기본값과 일치하는 열 값을 제거하려고 노력하지 않습니다.

이 옵션은 JET_bitEnumeratePresenceOnly 또는 JET_bitEnumerateTaggedOnly 사용할 때 JetEnumerateColumns 의 출력에 영향을 줍니다.

JET_bitEnumerateIgnoreUserDefinedDefault

지정된 열이 레코드에 없고 사용자가 정의한 기본값이 있는 경우 열 값이 반환되지 않습니다. 이 옵션을 사용하면 해당 열의 값을 열거할 때 열에 대해 사용자가 정의한 기본값을 계산하는 콜백이 호출되지 않습니다.

Windows Server 2003 이하: Windows Server 2003 및 이전 릴리스의 경우 JET_errCallbackFailed 함께 작업이 실패합니다.

Windows Server 2003 SP1: 이 가능한 값은 Windows Server 2003 SP1 이상 운영 체제에서만 사용할 수 있습니다. 이 가능한 값을 지정하고 테이블에 사용자가 정의한 기본값이 있는 열이 포함된 경우 작업이 실패하고 JET_errCallbackFailed.

JET_bitEnumeratePresenceOnly

요청된 열 또는 열 값에 대해 NULL이 아닌 값이 있는 경우 연결된 데이터가 반환되지 않습니다. 대신 해당 열 또는 열 값에 대한 연결된 상태 JET_wrnColumnPresent 설정됩니다. 열 또는 열 값이 NULL 이면 JET_wrnColumnNull 평소와 같이 반환됩니다.

JET_bitEnumerateTaggedOnly

레코드의 모든 열 값을 열거하는 경우(예: cEnumColumnId 가 0인 경우) 태그가 지정된 열 값만 반환됩니다. 열 ID의 특정 배열을 열거할 때는 이 옵션을 사용할 수 없습니다.

JET_bitEnumerateInRecordOnly

Windows 7: JET_bitEnumerateInRecordOnly Windows 7에 도입되었습니다.

반환 값

이 함수는 다음 반환 코드 중 하나를 사용하여 JET_ERR 데이터 형식을 반환합니다. 가능한 ESE 오류에 대한 자세한 내용은 확장 가능한 스토리지 엔진 오류오류 처리 매개 변수를 참조하세요.

반환 코드

설명

JET_errSuccess

작업이 성공적으로 완료되었습니다.

JET_errBadColumnId

지정된 열 ID가 열 ID의 법적 제한을 벗어집니다. 이 오류는 특정 열 ID가 요청되고, 해당 열 ID 중 하나가 잘못되었으며, 열 상태 코드에 대한 이 오류로 인해 첫 번째 잘못된 열 ID가 실패한 경우 JetEnumerateColumns에서 반환됩니다.

JET_errClientRequestToStopJetService

JetStopService 호출로 인해 세션과 연결된 instance 모든 작업이 중단되었으므로 작업을 완료할 수 없습니다.

JET_errColumnNotFound

지정된 열 ID로 설명된 열이 테이블에 없습니다. 이 오류는 특정 열 ID가 요청되고, 해당 열 ID 중 하나가 잘못되었으며, 열 상태 코드에 대한 이 오류로 인해 첫 번째 잘못된 열 ID가 실패한 경우 JetEnumerateColumns에서 반환됩니다.

JET_errInstanceUnavailable

세션과 연결된 instance 해당 데이터의 무결성을 보호하기 위해 모든 데이터에 대한 액세스를 해지해야 하는 심각한 오류가 발생하여 작업을 완료할 수 없습니다.

Windows XP: 이 오류는 Windows XP 이상 릴리스에서만 반환됩니다.

JET_errInvalidgrbit

요청된 옵션 중 하나가 잘못되었거나 구현되지 않았습니다. 이 오류는 다음과 같은 경우 JetEnumerateColumns에서 반환됩니다.

  • JET_bitEnumerateLocal 지정됩니다.

  • 잘못된 grbit 가 지정되었습니다.

JET_errInvalidParameter

제공된 매개 변수 중 하나에 예기치 않은 값이 포함되어 있거나 다른 매개 변수의 값과 결합할 때 의미가 없는 값이 포함되어 있습니다. 이 오류는 다음과 같은 경우 JetEnumerateColumns에서 반환됩니다.

  • pcEnumColumnNULL입니다.

  • prgEnumColumnNULL입니다.

  • pfnReallocNULL입니다.

JET_errNoCurrentRecord

커서가 레코드에 배치되지 않습니다. 오류는 다양한 이유로 발생할 수 있습니다. 예를 들어 커서가 현재 인덱스의 마지막 레코드 뒤에 현재 위치하는 경우 이 문제가 발생합니다.

JET_errNotInitialized

세션과 연결된 instance 아직 초기화되지 않았기 때문에 작업을 완료할 수 없습니다.

JET_errRecordDeleted

커서는 삭제된 레코드에 배치됩니다. 오류는 다양한 이유로 발생할 수 있습니다. 가장 일반적인 이유는 세션이 트랜잭션에 있지 않고, 커서가 레코드에 배치되고, 해당 레코드가 삭제된 다음 커서가 해당 레코드를 참조하려고 했기 때문입니다.

JET_errRestoreInProgress

세션과 연결된 instance 복원 작업이 진행 중이므로 작업을 완료할 수 없습니다.

JET_errSessionSharingViolation

동시에 둘 이상의 스레드에 동일한 세션을 사용할 수 없습니다.

Windows XP: 이 오류는 Windows XP 이상 릴리스에서만 반환됩니다.

JET_errTermInProgress

세션과 연결된 instance 종료 중이므로 작업을 완료할 수 없습니다.

성공하면 요청된 데이터가 출력 버퍼에 반환됩니다. 이 콜백에 의해 할당되고 출력 버퍼에 반환된 모든 메모리를 해제하는 것은 호출자의 책임입니다. 해당 메모리는 제공된 재할당 호환 콜백을 통해 해제되어야 합니다. 데이터베이스 상태는 변경되지 않습니다.

실패 시 요청된 데이터는 반환되지 않습니다. 호출 중에 할당된 모든 메모리는 제공된 재할당 호환 콜백을 사용하여 자동으로 해제됩니다. 데이터베이스 상태는 변경되지 않습니다.

설명

레코드의 모든 열 값을 열거하고 JET_bitEnumerateIgnoreDefaults 지정하지 않은 경우 상태 코드가 JET_wrnColumnNull 열 또는 열 값이 표시되지 않는다고 가정할 수 없습니다. 열에 기본값이 있고 명시적으로 NULL로 설정된 경우 또는 열이 스파스가 아닌 열(예: 고정 열 또는 변수 열)인 경우 이 상태 코드를 볼 수 있습니다.

cbDataMost 매개 변수는 모든 열 값에 적용되지 않습니다. 이 매개 변수는 레코드와 별도로 저장될 정도로 큰 긴 텍스트 및 긴 이진 열 값만 자립니다.

JetEnumerateColumns가 출력 매개 변수의 데이터를 반환하는 경우 호출자는 배열의 메모리와 해당 배열에 포함된 포인터로 참조되는 모든 메모리를 해제해야 합니다.

요구 사항

요구 사항

클라이언트

Windows Vista 또는 Windows XP가 필요합니다.

서버

Windows Server 2008 또는 Windows Server 2003이 필요합니다.

머리글

Esent.h에 선언되었습니다.

라이브러리

ESENT.lib를 사용합니다.

DLL

ESENT.dll 필요합니다.

참고 항목

JET_ERR
JET_GRBIT
JET_SESID
JET_TABLEID
JET_ENUMCOLUMNID
JET_ENUMCOLUMN
JET_ENUMCOLUMNVALUE
JET_PFNREALLOC
realloc
JetRetrieveColumn
JetRetrieveColumns