JetUpdate 함수

적용 대상: Windows | Windows Server

JetUpdate 함수

JetUpdate 함수는 테이블에 새 행을 삽입하거나 기존 행을 업데이트하는 등의 업데이트 작업을 수행합니다. 테이블 행 삭제는 JetDelete를 호출하여 수행됩니다.

JetUpdate 는 삽입 또는 업데이트를 수행하는 마지막 단계입니다. 업데이트는 JetPrepareUpdate를 호출한 다음 JetSetColumn 또는 JetSetColumns를 한 번 이상 호출하여 레코드 상태를 설정하여 시작됩니다. 마지막으로 JetUpdate 가 호출되어 업데이트 작업을 완료합니다. 인덱스는 JetSetColumn 또는 JetSetColumns 중에는 업데이트되지 않고 JetUpdate 또는 JetUpdate2에서만 업데이트됩니다.

    JET_ERR JET_API JetUpdate(
      __in          JET_SESID sesid,
      __in          JET_TABLEID tableid,
      __out_opt     void* pvBookmark,
      __in          unsigned long cbBookmark,
      __out_opt     unsigned long* pcbActual
    );

매개 변수

sesid

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

tableid

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

pvBookmark

삽입된 행에 대해 반환된 책갈피에 대한 포인터입니다.

cbBookmark

pvBookmark가 가리키는 버퍼의 크기입니다.

pcbActual

pvBookmark에 반환된 삽입된 행에 대한 책갈피의 반환된 크기입니다.

반환 값

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

반환 코드

설명

JET_errSuccess

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

JET_errBufferTooSmall

레코드 책갈피에 대해 지정된 버퍼가 레코드 책갈피를 저장할 만큼 충분히 크지 않습니다.

JET_errClientRequestToStopJetService

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

JET_errColumnIllegalNull

JET_errNullInvalid 동일합니다.

JET_errDiskFull

업데이트 작업을 수행하려면 데이터베이스 파일 증가 또는 로그 파일 할당이 필요하지만 데이터베이스 파일 또는 로그 계열이 있는 디스크 드라이브가 가득 찼습니다. 또는 데이터베이스 파일이 FAT32 형식의 볼륨에 있고 데이터베이스 파일은 FAT32에 대한 파일당 제한인 4GBytes입니다.

JET_errInstanceUnavailable

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

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

JET_errInvalidParameter

JetPrepareUpdate 함수의 지정된 prep 매개 변수가 유효한 플래그가 아닙니다.

JET_errKeyDuplicate

이 레코드의 인덱스 키는 테이블에 이미 있는 다른 레코드에 대한 다른 인덱스 키의 중복이며 인덱스는 중복을 허용하지 않습니다.

JET_errKeyTruncated

삽입되거나 업데이트된 레코드에는 생성된 키가 허용되는 최대 크기를 초과하는 하나 이상의 인덱스가 있습니다. 결과적으로 작업이 키 잘림을 방지하지 못했습니다.

JET_errMultiValuedIndexViolation

삽입되거나 업데이트된 레코드에는 인덱스에서 설정된 최대 길이 키 크기 내에서 동일한 두 개 이상의 값이 있는 인덱싱된 다중 값 열이 있습니다. 결과적으로 레코드에는 잘못된 인덱스에서 두 개의 동일한 항목이 있습니다.

JET_errNotInitialized

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

JET_errNullInvalid

삽입할 레코드 또는 바꿀 레코드의 업데이트된 상태에 있는 하나 이상의 열은 해당 열에 대해 정의된 제약 조건을 위반하는 NULL 입니다.

JET_errNullKeyDisallowed

NULL 키를 허용하지 않도록 하나 이상의 인덱스가 정의되고 대체되는 레코드의 삽입되거나 업데이트된 상태가 이 정의된 제약 조건을 위반합니다.

JET_errRecordPrimaryChanged

레코드 대체 작업이 기본 키를 업데이트했습니다. 기본 키 열에 대한 업데이트 기존 레코드를 삭제하고 원하는 데이터가 포함된 새 레코드를 삽입하여 수행해야 합니다.

JET_errRestoreInProgress

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

JET_errSessionSharingViolation

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

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

JET_errTermInProgress

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

JET_errTransReadOnly

읽기 전용 트랜잭션의 scope 내에서 업데이트를 시도하는 것은 불법입니다. 읽기 전용 트랜잭션은 JET_bitTransactionReadOnly JetBeginTransaction2 호출을 사용하여 시작된 트랜잭션입니다.

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

JET_errUpdateNotPrepared

JetPrepareUpdate 는 JET_prepCancel 호출되었지만 커서가 준비된 상태가 아닙니다.

JET_errVersionStoreOutOfMemory

업데이트에 대한 트랜잭션 정보를 보존할 메모리가 부족하여 작업이 실패했습니다.

JET_errWriteConflict

다른 세션에서는 이전에 업데이트를 위해 레코드를 잠갔습니다. 이 세션에서 시도한 업데이트가 실패합니다.

성공하면 커서에서 열린 업데이트 작업이 완료됩니다. 테이블에 대해 자동 증가 열이 정의되면 삽입된 레코드에 대해 이 값이 설정됩니다. 테이블에 대해 버전 열이 정의되면 새로 삽입된 레코드에 대해 해당 값이 초기화되거나 레코드가 교체될 때마다 증가합니다. 클러스터형 인덱스와 클러스터되지 않은 인덱스를 포함한 모든 인덱스가 업데이트됩니다.

오류가 발생하면 데이터베이스에 대한 어떠한 종류의 변경도 이루어지지 않습니다. 삽입 전과 바꾸기 전에 콜백 함수가 호출되었을 수 있지만 삽입 후와 바꾸기 후 콜백이 호출되지 않습니다. 이후의 경우 업데이트가 실패할 수 없기 때문에 호출되지 않습니다. 커서 복사 버퍼는 준비된 상태로 남아 있으므로 오류를 발생시킨 문제를 증분식으로 수정하고 업데이트 작업을 다시 시도할 기회가 있습니다.

설명

콜백 함수는 삽입 전후 및 업데이트 전후에 호출되도록 등록할 수 있습니다.

레코드 크기 제한은 JetSetColumn에 의해 적용되며 일반적으로 JetUpdate에서는 적용되지 않습니다.

단일 트랜잭션 내에서 많은 수의 업데이트 작업을 수행하는 것이 미치는 영향을 이해하는 것이 중요합니다. 데이터베이스에 대한 각 업데이트는 버전 저장소의 데이터베이스 엔진에서 추적해야 합니다. 버전 저장소는 모든 활성 트랜잭션에서 볼 수 있는 데이터베이스의 각 레코드 또는 인덱스 항목의 모든 다른 버전의 라이브 레코드를 보유합니다. 이러한 버전은 스냅샷 격리를 사용하는 트랜잭션을 지원하기 위해 데이터베이스 엔진에서 사용하는 다중 버전 동시성 제어를 지원하는 데 사용됩니다. 데이터베이스 엔진이 이러한 버전을 저장하는 데 사용되는 리소스를 모두 사용한 후에는 일부 트랜잭션이 이러한 리소스를 회수할 수 있도록 결론을 내야 더 이상 변경 내용을 수락할 수 없습니다. 엔진이 이 상태이면 JET_errVersionStoreOutOfMemory 모든 업데이트가 실패합니다. 이러한 버전을 저장하기 위해 데이터베이스 엔진에서 사용할 수 있는 리소스는 JET_paramMaxVerPagesJET_paramGlobalMinVerPagesJetSetSystemParameter를 사용하여 제어할 수 있습니다.

요구 사항

요구 사항

클라이언트

Windows Vista, Windows XP 또는 Windows 2000 Professional이 필요합니다.

서버

Windows Server 2008, Windows Server 2003 또는 Windows 2000 Server가 필요합니다.

머리글

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

라이브러리

ESENT.lib를 사용합니다.

DLL

ESENT.dll 필요합니다.

참고 항목

JET_ERR
JET_SESID
JET_TABLEID
JetDelete
JetPrepareUpdate
JetRegisterCallback
JetRetrieveColumn
JetRetrieveColumns
JetSetColumn
JetSetColumns
JetSetSystemParameter
시스템 매개 변수