| Previous | Next |
| hrTableNotEmpty | hrTooManyOpenTables |
hrInvalidTableId
Locate the failure in the Jet call chain
hrInvalidTableId means the JET_TABLEID is stale, closed, or belongs to another session/database.
This is the legacy Directory Service backup/restore HRESULT form of JET_errInvalidTableId (0xC800051E).
The key comparison is: hrObjectNotFound is name lookup; this result is a bad cursor/table handle. The first useful observation is to trace open/close/duplication, owning JET_SESID, database ID, thread use, and rollback side effects. This evidence distinguishes name collisions, stale table handles, active users, locks, and structural dependencies.
The ESE objects in play
| Diagnostic layer | table and schema-object ownership, locks, and structural dependencies |
|---|---|
| Typical API surface | JetOpenTable, JetCreateTableColumnIndex, JetDeleteTable, and schema enumeration APIs |
| Code-specific condition | the JET_TABLEID is stale, closed, or belongs to another session/database |
| First corrective direction | discard the table ID and reopen the table through the correct live session |
Object existence should be compared with the full expected definition before a migration is skipped. A JET_TABLEID is a cursor-like handle owned by a session, not a persistent table identifier.
Questions the logs must answer
- Code-specific observation: trace open/close/duplication, owning JET_SESID, database ID, thread use, and rollback side effects.
- the table/object metadata and normalized name; associate it with this result rather than with a later generic exception.
- all JET_TABLEID owners, open modes, transactions, and current indexes; associate it with this result rather than with a later generic exception.
- the exact schema migration step and whether a previous attempt committed.
Response and verification
- Freeze the failing request context and record
0xC800051E, the Jet API name, and the current instance/session ownership. - Verify the code-specific precondition: trace open/close/duplication, owning JET_SESID, database ID, thread use, and rollback side effects.
- Apply the targeted fix: discard the table ID and reopen the table through the correct live session.
- Before retrying the operation, reconcile object definition, exclusive-access state, and migration version.
Distinguishing signals
hrInvalidObject | the resolved object type or state is incompatible with the requested operation |
|---|---|
hrObjectDuplicate | schema creation collided with an existing object name in the same namespace |
hrIllegalOperation | the requested API is not supported for this table kind, cursor mode, or object state |
Actions that can hide or worsen the problem
- Do not force a schema mutation while table users remain active.
- Do not skip a migration merely because an object with the same name exists.
Technical references
- JetOpenTable.
- JetCreateTableColumnIndex
- ESE functions
- JET error codes
- Microsoft: JET_ERR enumeration
Looking for a different code? Search another status or error code.
