| Previous | Next |
| hrRecordNotFound | hrRecordClusteredChanged |
hrNoCurrentRecord
Locate the failure in the Jet call chain
hrNoCurrentRecord means the cursor is before-first, after-last, on a deleted row, or otherwise not positioned on a record.
This is the legacy Directory Service backup/restore HRESULT form of JET_errNoCurrentRecord (0xC8000643).
The key comparison is: hrRecordNotFound describes a failed lookup; this code describes a later operation on an unpositioned cursor. The first useful observation is to capture the preceding move/seek result, current index, range state, and concurrent deletion. This evidence distinguishes failed lookup, lost cursor currency, deleted rows, invalid bookmarks, and prepared-update state.
The ESE objects in play
| Diagnostic layer | cursor currency, bookmarks, prepared updates, and row lifecycle |
|---|---|
| Typical API surface | JetMove, JetSeek, JetGetBookmark, JetGotoBookmark, JetPrepareUpdate, JetUpdate, and JetDelete |
| Code-specific condition | the cursor is before-first, after-last, on a deleted row, or otherwise not positioned on a record |
| First corrective direction | check navigation results before retrieving or updating and reseek when concurrency invalidates currency |
Preparing an update creates cursor state that must be completed or cancelled deliberately. Cursor currency can be invalidated by navigation, deletion, rollback, or concurrent changes.
Questions the logs must answer
- Code-specific observation: capture the preceding move/seek result, current index, range state, and concurrent deletion.
- prepared-update mode, row version, transaction, and concurrent writer; associate it with this result rather than with a later generic exception.
- the current index, seek relation, key, range, and preceding navigation result; associate it with this result rather than with a later generic exception.
- bookmark bytes and the table/database context that produced them.
Response and verification
- Freeze the failing request context and record
0xC8000643, the Jet API name, and the current instance/session ownership. - Verify the code-specific precondition: capture the preceding move/seek result, current index, range state, and concurrent deletion.
- Apply the targeted fix: check navigation results before retrieving or updating and reseek when concurrency invalidates currency.
- Before retrying the operation, reconcile cursor currency, row existence, bookmark validity, and prepared-update cleanup.
Distinguishing signals
hrInvalidBookmark | a bookmark cannot be interpreted for the current table and index context |
|---|---|
hrRecordClusteredChanged | an update attempted to change a clustered key in a way the engine cannot apply in place |
hrAlreadyPrepared | the cursor already has a prepared update/copy state and received another incompatible prepare request |
Actions that can hide or worsen the problem
- Do not reuse bookmarks after restore, rebuild, or incompatible schema change.
- Do not retry a write without rereading the row and its business preconditions.
Technical references
Looking for a different code? Search another status or error code.