Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Foxpro/Clipper/Dbase > имеется файлы DBF


Автор: gudini 2.10.2014, 11:00
 smile 

Автор: Akina 2.10.2014, 11:40
Цитата

      INDEX <ключ. выр> TO <имя файла>/(<вырС>)

Аргументы:

    <ключ.  выр.>  выражение для каждой записи базы данных помещаемое как
    значение  ключа  в  индексный  файл.  Максимальная  длина  индексного
    ключевого выражения 250 символов.

    <имя  файла> имя создаваемого индексного файла, обычно, с расширением
    (.ntx ). Однако, если вы скомпануете программу с модулем  NDX.OBJ  то
    для  того  чтобы  использовать совместимые с dBASE III PLUS индексные
    файлы, у них будет расширение (.ndx ).

Применение:

    При использовании индексного файла записи базы  данных  появляются  в
    порядке  следования  ключевых  выражений для этих записей. Физический
    порядок следования записей в базе данных не изменяется. Это позволяет
    вам создавать и поддерживать  много  логических  порядков  следования
    записей в базе данных.

    Clipper  применяет  вариант схемы В деревьев для индексации записей с
    индексной  страницей  в  1024  байт.  Файл  .ntx  содержит  указатель
    индексов,  сообщающий  системе какое индексное выражение применяется,
    где " вершина дерева " и т.д. К тому же, Clipper имеет  указатель  на
    место  в файле, где находится страница, обрабатываемая последней. Как
    только вы модифицируйте ключевое выражение, старый ключ будет заменен
    на новое значение. Иногда  страницы  становятся  пустыми.  Когда  это
    случается  Clipper  запоминает  указатель  в  блоке  управления,  что
    позволяет  ему  использовать  снова   это   место,   если   возникает
    необходимость создания страницы.

    Записи,  помеченные для уничтожения и отфильтрованные тоже включаются
    в индексный файл.

    Индексирование по дате: Clipper поддерживает индексацию по  дате  для
    обоих  типов  индексных  файлов  (.ntx  )  и  (.ndx  ). Для ключевого
    выражения, содержащего дату, как часть  всего  выражения,  создавайте
    строковые  выражения  с  помощью  функции  DTOS() для перевода даты в
    символьную строку. Например:

                USE Invoices
                INDEX ON Customer + DTOS(Inv_data) TO Invoice

    Индексирование по убыванию: Для  создания  индекса  по  убыванию  или
    убывающего  подмножества  можно  использовать  функцию DESCEND(). Эта
    функция принимает  как  аргумент  данные  любого  типа  и  возвращает
    значение   наоборот.   Например,   этот  фрагмент  программы  создает
    индексный файл счетов в убывающем фронологическом порядке:

                USE Invoices
                INDEX ON Customer+DESCEND(DTOS(Inv_data)) TO Inv_stack

    Помните   о   необходимости   применения    во    время    выполнения
    последовательного  поиска  функции  DESCEND() как части выражения для
    команды SEEK.

    Совместимость  индексных  файлов:   Clipper   поддерживает   создание
    уникальных  индексов  по команде SET UNIQUE. Когда указано UNIQUE ON,
    Clipper добавляет только уникальные индексы в  создаваемый  индексный
    файл.   Помните,  однако,  что  команда  UNIQUE  является  не  только
    атрибутом индексного  файла,  но  и  относится  к  выполнению  других
    команд.  Это  значит,  что когда установлено UNIQUE OFF, то все ключи
    (не только  уникальные  )  будут  добавлены  к  индексам,  даже  если
    индексный  файл  создавался  в  режиме  UNIQUE ON. И, наоборот, когда
    установлено UNIQUE ON, то в открытых индексных файлах исправляются не
    только уникальные ключи.

    Функция TRIM() в ключевом выражени: Размер индексного ключа в Clipper
    вычисляется по оценке ключевого выражения для пустой записи.  Поэтому
    функция  TRIM()  в любой части ключевого выражения, содержащего поля,
    всегда  оценивается  как  нулевая  строка.  Это  может   привести   к
    несоответствию  размеров  между желаемой и определяемой длиной ключа.
    Однако, вы можете построить индексный ключ, используя функцию  TRIM()
    для  полей,  чтобы  убрать  лишние  пробелы до размера ключа, равного
    длине приводимого в порядок поля. Например, пусть вы имеете два  поля
    с   именами   Last   и   Fist   длиной   в  20  символов.  Вы  хотите
    проиндексировать по следующему выражению:

                TRIM(Last) + First

                Действительное же выражение для INDEX ON будет таким:

                SUBSTR(TRIM(Last) + First + SPACE(20), 1, 40 )

    Помните,  TRIM()  в  индексных  файлах  не  экономит  место.  Clipper
    распределяет   место   для   ключей   фиксированного   пририщения   и
    использование функции  TRIM()  только  производит  беспорядок.  Чтобы
    создать  меньшие  по  размеру  индексные  файлы,  использейте меньший
    размер ключа, используя функцию SUBSTR().

Примеры:
                ? TYPE("Branch")
                INDEX ON Branch TO Branch
                *
                ? TYPE("Amount")
                INDEX ON Amount TO Amount
                * TYPE("Date")
                INDEX ON Date TO Date


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)