| Previous | Next |
| hrKeyNotMade | hrerrDataHasChanged |
hrUpdateNotPrepared
The object and state that matter
hrUpdateNotPrepared means JetSetColumn/JetUpdate-style work reached a cursor without a matching prepared update state.
This is the legacy Directory Service backup/restore HRESULT form of JET_errUpdateNotPrepared (0xC8000649).
The key comparison is: hrAlreadyPrepared means stale preparation remains; this code means preparation is absent. The first useful observation is to record the intended JET_prep mode, cursor, transaction, and any rollback/cancel path. This evidence distinguishes failed lookup, lost cursor currency, deleted rows, invalid bookmarks, and prepared-update state.
Minimum useful trace
- Code-specific observation: record the intended JET_prep mode, cursor, transaction, and any rollback/cancel path.
- bookmark bytes and the table/database context that produced them; associate it with this result rather than with a later generic exception.
- prepared-update mode, row version, transaction, and concurrent writer.
- the current index, seek relation, key, range, and preceding navigation result.
How to avoid a false diagnosis
hrRecordNotFound | a seek or lookup found no row matching the constructed key or bookmark criteria |
|---|---|
hrAlreadyPrepared | the cursor already has a prepared update/copy state and received another incompatible prepare request |
hrRecordDeleted | the cursor refers to a row that was deleted after it became the current record |
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 | JetSetColumn/JetUpdate-style work reached a cursor without a matching prepared update state |
| First corrective direction | call JetPrepareUpdate on the same cursor and keep prepare/set/update within one controlled scope |
Cursor currency can be invalidated by navigation, deletion, rollback, or concurrent changes. Bookmarks are opaque binary values tied to a table/index context.
Safe recovery sequence
- Freeze the failing request context and record
0xC8000649, the Jet API name, and the current instance/session ownership. - Verify the code-specific precondition: record the intended JET_prep mode, cursor, transaction, and any rollback/cancel path.
- Apply the targeted fix: call JetPrepareUpdate on the same cursor and keep prepare/set/update within one controlled scope.
- Before retrying the operation, reconcile cursor currency, row existence, bookmark validity, and prepared-update cleanup.
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.