JetPrepareUpdate 함수
적용 대상: Windows | Windows Server
JetPrepareUpdate 함수
JetPrepareUpdate 함수는 새 레코드를 삽입하거나 기존 레코드를 새 값으로 바꾸기 위해 업데이트를 수행하는 첫 번째 작업입니다. 업데이트 JetPrepareUpdate를 호출한 다음 JetSetColumn 또는 JetSetColumns를 0번 이상 호출하고 마지막으로 JetUpdate를 호출하여 작업을 완료합니다. JetPrepareUpdate 및 JetUpdate 는 업데이트 작업의 경계를 설정하며 인덱스에 입력된 레코드의 최종 업데이트 상태만 갖는 데 중요합니다. 이는 둘 다 더 효율적이지만, 데이터가 설정된 열 작업보다 더 많은 것을 통해 유효한 상태와 일치해야 하는 경우에도 필요합니다.
레코드를 삽입하거나 바꾸기 위한 몇 가지 다른 옵션이 있으며 아래에 자세히 설명되어 있습니다.
JET_ERR JET_API JetPrepareUpdate(
__in JET_SESID sesid,
__in JET_TABLEID tableid,
__in unsigned long prep
);
매개 변수
sesid
이 호출에 사용할 세션입니다.
tableid
이 호출에 사용할 커서입니다.
준비
다음을 포함하는 업데이트를 준비하는 데 사용할 수 있는 옵션입니다.
값 |
의미 |
---|---|
JET_prepCancel |
이 플래그를 사용하면 JetPrepareUpdate 에서 이 커서에 대한 업데이트를 취소합니다. |
JET_prepInsert |
이 플래그를 사용하면 커서가 새 레코드 삽입을 준비합니다. 모든 데이터는 레코드의 기본 상태로 초기화됩니다. 테이블에 자동 증가 열이 있는 경우 업데이트가 궁극적으로 성공, 실패 또는 취소되었는지 여부에 관계없이 새 값이 이 레코드에 할당됩니다. |
JET_prepInsertCopy |
이 플래그를 사용하면 커서가 기존 레코드의 복사본 삽입을 준비합니다. 이 옵션을 사용하는 경우 현재 레코드가 있어야 합니다. 새 레코드의 초기 상태는 현재 레코드에서 복사됩니다. 오프 레코드에 저장된 긴 값은 사실상 복사됩니다. |
JET_prepInsertCopyDeleteOriginal |
이 플래그를 사용하면 커서가 동일한 레코드와 삭제 또는 원래 레코드의 삽입을 준비합니다. 기본 키가 변경된 경우에 사용됩니다. |
JET_prepReplace |
이 플래그를 사용하면 커서가 현재 레코드의 바꾸기를 준비합니다. 테이블에 버전 열이 있는 경우 버전 열은 해당 시퀀스의 다음 값으로 설정됩니다. 이 업데이트가 완료되지 않으면 레코드의 버전 값은 영향을 받지 않습니다. 이 세션이 완료되기 전에 다른 세션이 이 레코드를 업데이트하지 못하도록 레코드에 대한 업데이트 잠금이 수행됩니다. |
JET_prepReplaceNoLock |
이 플래그는 JET_prepReplace 유사하지만 다른 세션이 이 레코드를 업데이트하지 못하도록 잠금을 설정하지 않습니다. 대신 이 세션은 JetUpdate 를 호출하여 업데이트를 완료할 때 JET_errWriteConflict 받을 수 있습니다. |
반환 값
이 함수는 다음 반환 코드 중 하나를 사용하여 JET_ERR 데이터 형식을 반환합니다. 가능한 ESE 오류에 대한 자세한 내용은 확장 가능한 스토리지 엔진 오류 및 오류 처리 매개 변수를 참조하세요.
반환 코드 |
설명 |
---|---|
JET_errSuccess |
작업이 성공적으로 완료되었습니다. |
JET_errAlreadyPrepared |
JetPrepareUpdate 는 준비에 유효한 플래그를 사용하여 호출되었지만 JET_prepCancel 않으며 커서가 이미 준비된 상태였습니다. |
JET_errClientRequestToStopJetService |
JetStopService 호출로 인해 세션과 연결된 instance 모든 작업이 중단되었으므로 작업을 완료할 수 없습니다. |
JET_errInstanceUnavailable |
세션과 연결된 instance 해당 데이터의 무결성을 보호하기 위해 모든 데이터에 대한 액세스를 해지해야 하는 심각한 오류가 발생하여 작업을 완료할 수 없습니다. 이 오류는 Windows XP 이상 릴리스에서만 반환됩니다. |
JET_errInvalidParameter |
지정된 준비 플래그가 유효한 플래그가 아닙니다. |
JET_errNotInitialized |
세션과 연결된 instance 아직 초기화되지 않았기 때문에 작업을 완료할 수 없습니다. |
JET_errNotInTransaction |
JetPrepareUpdate 는 SLV 열이 있는 레코드를 바꾸기 위해 호출되었습니다. SLV 열. SLV 열은 일반적인 용도로 사용되지 않는 기능입니다. 이 기능은 Microsoft Exchange 인프라를 지원하는 데 사용되며 애플리케이션에서 사용할 수 없습니다. |
JET_errRestoreInProgress |
세션과 연결된 instance 복원 작업이 진행 중이므로 작업을 완료할 수 없습니다. |
JET_errRollbackError |
JetPrepareUpdate 는 JET_prepCancel 함께 호출되었지만 형식 JET_coltypLongText 열 및/또는 형식 JET_coltypLongBinary 열에 대한 모든 변경 내용을 롤백할 수 없습니다. |
JET_errSessionSharingViolation |
이 플래그는 둘 이상의 스레드에서 동시에 동일한 세션에 사용할 수 없습니다. 이 오류는 Windows XP 이상 릴리스에서만 반환됩니다. |
JET_errTermInProgress |
세션과 연결된 instance 종료 중이므로 작업을 완료할 수 없습니다. |
JET_errUpdateNotPrepared |
JetPrepareUpdate 는 JET_prepCancel 호출되었지만 커서가 준비된 상태가 아닙니다. |
성공하면 커서가 원하는 업데이트를 위해 준비된 상태로 변경되거나, JET_prepCancel 경우 커서가 준비되지 않은 상태로 되돌아가고 변경 내용이 무시됩니다.
실패 시 커서 상태는 변경되지 않은 상태로 유지됩니다. 오류가 JET_errRollbackError 경우 커서 상태가 준비되지 않은 상태로 변경되지만 모든 변경 내용이 되돌려진 것은 아닙니다.
설명
레코드의 복사본을 삽입하는 것은 레코드가 JET_coltypLongText 및/또는 JET_coltypLongBinary 형식의 데이터를 공유할 때 중요한 최적화입니다. 이 데이터는 클 때 오프 레코드로 저장되며 여러 레코드가 동일한 실제 데이터 표현을 공유할 수 있습니다. 이 경우 두 레코드에서 데이터를 업데이트할 수 있지만 이렇게 하면 각 레코드에 자체 복사본이 있도록 데이터가 버스트됩니다. 다른 레코드에서 수정하여 한 레코드의 데이터를 변경할 수 없습니다. 또한 다른 레코드의 업데이트로 한 레코드의 업데이트를 차단할 수 없습니다. 이는 ESE의 중심 기능이며 레코드 수준 잠금이라고 합니다.
실패하는 JetUpdate 작업은 커서를 업데이트 준비 상태로 둡니다. 이는 업데이트 상태를 다시 만들 필요 없이 잘못된 열 값과 같은 일부 오류를 수정할 수 있도록 하기 위한 것입니다. 즉, 커서가 업데이트를 중단하는 모든 경우 JET_prepCancel JetPrepareUpdate 를 명시적으로 호출해야 합니다.
요구 사항
요구 사항 | 값 |
---|---|
클라이언트 |
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
JetRetrieveColumn
JetSetColumn
JetUpdate