Сброс записей таблицы индекса
Я пытаюсь искать в первичном индексе таблицы в базе данных клиентов EDB. И я с треском провалился. Я получил информацию об индексе с помощью JetGetIndexInfo и знаю все об индексе (это основной индекс, и я знаю столбец, который используется). Теперь я хочу найти в этом индексе известные и существующие значения, чтобы максимизировать производительность, но JetSeek утверждает, что не может найти ключ, который я хочу найти.
Сейчас я ищу способ сбросить ключи индекса. Таким образом, я мог видеть, должен ли я что-то добавить к ключу, который я использую, или каким-то образом преобразовать его (я абсолютно уверен, что это правильный ключ). Или есть другой трюк, чтобы найти, что идет не так?
Одной деталью, которая может быть причиной моей ошибки, может быть запись в столбце KeyFldIDs в таблице MSysObjects. У определенного индекса есть некоторая запись там. Если я сам создаю индекс, это поле обычно остается пустым. Что оно делает?
ОБНОВЛЕНИЕ @Laurion: мне удалось запустить dbutil в базе данных. Вот выдержка, которая имеет отношение:
AdditionalData
AttId
Coltyp: Binary
Columnid: 2.147.483.777
Max length: 8
Grbit: None
MsgFolderIndex6
Grbit: IndexUnique, IndexPrimary
CultureInfo: en-US
CompareOptions: IgnoreCase, IgnoreKanaType, IgnoreWidth
AttId
Coltyp: Binary
IsAscending: True
IsASCII: False
1 ответ
Для этого индекса эта последовательность вызовов должна работать:
JetOpenTable(...)
JetMakeKey(sesid, tableid, pvData, cbData, JET_bitNewKey);
JetSeek(sesid, tableid, JET_bitSeekEQ);
Если вы хотите сбросить ключи индекса, вы можете сделать это:
JetOpenTable(...);
Use JetGetTableColumnInfo to get the ID of the column called "AttId"
Use JetMove to walk the table sequentially, retrieving and dumping the column values
Наиболее вероятной ошибкой является то, что вы передаете неверное значение cbData при создании ключа, возможно, ошибка с ошибкой или проблема sizeof().