воскресенье, 13 октября 2013 г.

Индексы и как их готовить...

Активные пользователи Mapinfo могли сталкиваться с сообщениями
Файл индексов XXX создан для другого языка.


Такое сообщение появляется в том случае, если открываемая таблица проиндексирована в Mapinfo, языковая локализация которой, отличается от вашей. Т.е. если вы используете русифицированную Mapinfo и пытаетесь открыть какую-то таблицу, которая была проиндексирована в англоязычной версии Mapinfo, то вы получите подобное сообщение об ошибке. После пропуска сообщения, таблица остается открытой, но индексы деактивируются.
Языковой "проблеме" подвержены только индексы, построенные по символьным полям.

Проблема, вроде, не большая: как и сказано в сообщении Mapinfo, заходим в управление структурой таблицы и перестраиваем индекс. НО, у в управлении таблицей нас ждет сюрприз: информации о полях с индексами нет!!! (в общем, понятно, файл индексов отключен)

Чтобы перестроить индекс надо как-то узнать(вспомнить сообщения об индексах) имя необходимого поля и установить отметку индекса. Только после этого индекс перестроится. Кажется что не большая проблема. А если в таблице несколько индексов? А если таблиц много? Вот тут я вижу проблему.
Вторая проблема - невозможность программно отловить сообщение о несоответствии языка индекса.
Если мы напишем примерно такой код на MapBasic:
...
onerror goto err_trap
  open table rrr
  goto well_done
err_trap:
  resume well_done
well_done:
  ....
то мы не минуем появление сообщения о "языке" индекса.
Почему? Не знаю, но, вероятно, у разработчиков были веские причины для такой реализации, а может - "так получилось".
Теперь давайте посмотрим как организовано хранение информации об индексах для каждой таблицы Mapinfo. Напомню, что таблица Mapinfo хранит свои данные в разных таблицах:

  • <имя файла>.TAB. Этот файл содержит описание структуры данных таблицы. Он представляет из себя небольшой текстовый файл, описывающий формат того файла,который содержит данные.
  • <имя файла>.DAT или <имя файла>.WKS, .DBF, .XLS. Эти файл содержат табличные данные.
  • <имя файла>.MAP. Этот файл описывает графические объекты.
  • <имя файла>.IND содержит индексы полей таблицы.
Для примера создадим простую таблицу с индексами.

В файловой системе образуются следующие файлы:
Tab файл выглядит следующим образом:

Так что же делать пользователям, которые стали обладателями таблиц с индексами, построенными для других языков?
Выход 1: открывать таблицы и вручную перестраивать индексы.
Выход 2: любыми средствами массово удалить файлы *.ind в папках с обрабатываемыми таблицами и "исправить" описание структуры каждой таблицы в файлах *.tab.
Выход 3: обратится к автору и получить готовое лекарство, которое позволит произвести массовую обработку папок с таблицами и перестроить или удалить имеющиеся индексы.

Комментариев нет: