2010-10-17 2 views
1

В Extensbile Strage Engine (ESE/JetBlue) У меня есть таблица, которая содержит данные, которые я хотел бы найти с помощью двух индексовв ESE (JetBlue) есть ли способ ограничить поиск несколькими ключами?

при условии, что каждая строка содержит три целых числа X, Y и Z. Я бы хотели бы быстро найти все строки, где Х = 10 и Y = 20 (например)

результирующий набор будет содержать все записи, где Х = 10, Y = 20, а Z = whever Z оказался

Возможно ли это?

последовательность

JetSetCurrentIndex(), JetMakeKey(), JetSeek(), и JetMove() запутать меня. Я не 100% это возможно даже без поиска X = 10, а затем для фильтрации всех значений, где Y! = 20?

спасибо!

+0

Если столбцы являются целыми числами (= очень небольшое количество данных), я бы предложил определить третий индекс по обоим столбцам. Таким образом, вы сможете искать «где X = 10 и Y = 20» с помощью одного курсора. – Soonts

ответ

3

Вы можете сделать это с помощью API JetIntersectIndexes, который возвращает все записи, содержащиеся в двух диапазонах индексов. Вам нужно:

  1. Для первого ключевого значения:

  2. Для второго ключевого значения:

    • открыть таблицу во второй раз (JetOpenTable)
    • выбрать другой индекс (JetSetCurrentIndex)
    • искать в индексе на старте второе значение ключа (JetMakeKey, JetSeek)
    • Создайте индексный диапазон по второму значению (JetMakeKey, JetSetIndexRange).
  3. Позвоните по номеру JetIntersectIndexes с двумя диапазонами индексов, чтобы создать временную таблицу подходящих закладок.

  4. Перечислите временную таблицу, возвращенную по вызову (JetMove). Извлеките записи записей (JetRetrieveColumn) и перейдите к записям (JetGotoBookmark).
  5. Закройте временную таблицу, когда закончите! (JetCloseTable).
Смежные вопросы