Сброс записей таблицы индекса - PullRequest
0 голосов
/ 15 июля 2011

Я пытаюсь выполнить поиск в первичном индексе таблицы в базе данных клиентов 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 Ответ

1 голос
/ 21 июля 2011

Для этого индекса эта последовательность вызовов должна работать:

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 при создании ключа, возможно, ошибка с ошибкой или проблема размера ().

...