Распечатать страницу

Функции для индексов в Microsoft VFP

« Назад

Функции, если вызываются в параметром nWorkArea | cTableAlias, возвращают результат для таблицы либо открытой в рабочей области nWorkArea, либо с псевдонимом cTableAlias. Если параметром cTableAlias задан неиспользуемый псевдоним, то VFP сгенерирует ошибку.

Если параметр nWorkArea | cTableAlias опущен, то результата возвращается для текущей таблицы.

Функции, возвращающие имя файла, например CDX( ), вернут полное имя файла, если SET FULLPATH установлен в ON, или имя файла с именем диска, если SET FULLPATH установлен в OFF.

Функция

DESCENDING([cCDXFileName [, nIndexNumber [, nWorkArea | cTableAlias]]])

возвращает .T., если тег или индекс созданы с опцией DESCENDING или если эта опция включена для тега или индекса в команду USE, SET INDEX или SET ORDER. В противном случае функция вернет .F.

Параметры:

cCDXFileName – имя составного индексного CDX-файла, тег которого проверяется командой.

nIndexNumber – номер тега в CDX-файле.

Если cCDXFileName – это строка нулевой длины, то nIndexNumber указывает либо на индексный IDX-файл, либо на тег CDX-файла. Порядок нумерации открытых IDX-файлов и тегов открытых CDX-файлов см. в описании команды SET ORDER.

Функция вернет пустую строку, если величина nIndexNumber больше числа тегов в CDX-файле или, когда cCDXFileName = "" больше числа открытых IDX-файлов и тегов открытых CDX-файлов.

Если функция используется без параметров, то она возвращает результат для управляющего IDX-индекса или CDX-тега текущей таблицы. Если таблица не имеет открытых индексов или не установлен управляющий индекс, то DESCENDING( ) вернет .F.

Функции

ORDER([nWorkArea | cTableAlias [, nPath]])

или

SYS(22 [, nWorkArea])

возвращают имя управляющего индексного IDX-файла или тега CDX-файла для текущей или заданной таблицы. Если в функции ORDER( ) задан числовой параметр nPath, то вместе с именем индекса возвращается и путь к индексному файлу. Значение nPath – любое число.

Функции

CDX(nIndexNumber [, nWorkArea | cTableAlias])

или

MDX(nIndexNumber [, nWorkArea | cTableAlias])

возвращают имя открытого составного индексного файла. Если область nWorkArea пуста или задан неиспользуемый псевдоним cTableAlias, то функции вернут пустую строку.

Параметр:

nIndexNumber – номер составного индексного файла. Принимает указанные в табл. 15.8.

Таблица 15.8

Значения nIndexNumber

nIndexNumber

Результат функции CDX( ) | MDX( )

Больше числа
открытых
CDX-файлов

Возвращает пустую строку

Таблица имеет структурный составной индексный файл
и один или более независимых составных индексных файлов

1

Возвращает имя структурного индексного файла (оно всегда совпадает с именем таблицы)

2

Возвращает имя первого независимого составного индексного файла, указанного в списке индексных файлов команды SET INDEX или опции INDEX команды USE

3

Возвращает имя второго независимого составного индексного файла этого списка (если таковой имеется) и т. д.

Таблица не имеет структурного составного индексного файла,
но обладает одним или более независимыми составными индексными файлами

1

То же, что и при nIndexNumber = 2 для таблицы со структурным индексным файлом

2

                "                                             "              nIndexNumber = 3                                             "                                             "

Пример. Выводятся все открытые CDX-файлы таблицы, открытой в области 1.

set fullpath on     && Возвращаем полное имя файла

if Used(1) then

nIndexNumber = 0

do while .T.

nIndexNumber = nIndexNumber + 1

cdxName = CDX(nIndexNumber)

if Empty(cdxName) then

exit

endif

? cdxName

enddo

else

MessageBox('Область 1 не используется!')

endif

Функция

NDX(nIndexNumber [, nWorkArea | cTableAlias])

возвращает имя открытого индексного IDX-файла для текущей или указанной таблицы.

Параметр:

nIndexNumber – задает позицию возвращаемого имени индексного IDX-файла в списке индексных файлов команды SET INDEX или опции INDEX команды USE. Порядок нумерации индексных файлов и тегов этого списка см. в описании команды SET ORDER.

Функция вернет пустую строку, если nIndexNumber больше числа открытых индексных IDX-файлов.

Функция

TAG([cCDXFileName [, nTagNumber[, nWorkArea | cTableAlias]]])

возвращает имя тега открытого составного индексного CDX-файла или имя IDX-файла.

Функция, если вызвана без параметров, вернет имя управляющего IDX-индекса или CDX-тега.

Параметры:

cCDXFileName – имя составного индексного CDX-файла, имя тега которого возвращается.

nTagNumber – номер тега или IDX-файла.

Теги нумеруются в порядке их создания. Функция вернет пустую строку, если nTagNumber больше числа тегов в CDX-файле.

Общий порядок нумерации открытых индексных IDX-файлов и тегов открытых составных индексных файлов см. в описании команды SET ORDER. Этот порядок используется для формирования результата, если параметр CDXFileName опущен.

Пример 1. Выводятся имена всех тегов структурного индексного файла таблицы Authors.

close databases

open database d:\HomeLibrary\HomeLibrary.dbc

use Authors

for nCount = 1 to TagCount("Authors")

                                            ? Tag("Authors", nCount)

next

Результат:

AUTHORID

AUTHOR

Пример 2. Для таблицы Authors создаются и открываются 2 IDX-файла и 1 независимый составной индексный файл, имеющий 2 тега. Затем выводятся имена всех открытых индексных IDX-файлов и тегов открытых составных индексных файлов таблицы.

Пример иллюстрирует также порядок нумерации IDX-файлов, CDX-файлов и их тегов.

close databases

open database d:\HomeLibrary\HomeLibrary.dbc

use Authors

&&

&& Создаем 2 IDX-файла

index on AuthorId to d:\Au_ID

index on Author to d:\Au_All

&&

&& Создаем  CDX-файл с двумя тегами

index on Str(AuthorId) tag Au_ID_Str of d:\Au_CDX

index on Left(Author, 1) tag Au_1 of d:\Au_CDX

&&

&& Открываем IDX- и CDX-файлы

set index to d:\Au_ID, d:\Au_CDX, d:\Au_All

&&

&& Организуем альтернативный вывод в файл d:\a.txt

set alternate to d:\a.txt

set alternate on

&&

&& Выбор и вывод имен индексов и тегов

for nCount = 1 to TagCount( )

? Tag("", nCount)

next

&&

&& Закрываем файл d:\a.txt

set alternate to

&&

&& Закрываем созданные IDX- и CDX-файлы

&& Структурный CDX-файл останется открытым

close indexes

&&

&& Удаляем за ненадобностью созданные IDX- и CDX-файлы

erase d:\Au_*.?dx

Состав файла d:\a.txt:

AU_ID

AU_ALL

AUTHOR

AUTHORID

AU_ID_STR

AU_1

Функция

TAGCOUNT([cCDXFileName [, nWorkArea | cTableAlias]])

возвращает число тегов составного индексного CDX-файла и число открытых IDX-файлов.

Параметр:

cCDXFileName – имя составного индексного CDX-файла, число тегов которого возвращается.

Если параметр cCDXFileName опущен, то функция TAGCOUNT( ) вернет число тегов всех открытых составных индексных файлов и число открытых IDX-файлов таблицы.

Замечание. Функция включена для совместимости с dBASE.

Функция

TAGNO([cIndexName [, cCDXFileName [, nWorkArea | cTableAlias]])

возвращает позицию тега в составном индексном CDX-файле или индекса в открытых IDX-файлах.

Параметры:

cIndexName – имя тега составного индексного файла или имя IDX-файла.

cCDXFileName – имя составного индексного CDX-файла, для которого возвращается позиция тега IndexName.

Функция вернет 0, если управляющий индекс не установлен и необязательные параметры опущены.

Замечание. Функция включена для совместимости с dBASE.

Функция

CANDIDATE([nIndexNumber] [, nWorkArea | cTableAlias])

возвращает .T., если тег является кандидатным, или .F. – в противном случае.

Параметр:

nIndexNumber – номер тега в структурном или независимом составном индексном файле. Если для таблицы открыто несколько составных индексных файлов, то теги нумеруются в порядке, описанном при рассмотрении команды SET ORDER: сначала идут теги структурного индексного файла, затем независимых составных индексных файлов; внутри каждого составного индексного файла теги нумеруются в порядке их создания.

Если параметр nIndexNumber опущен, то функция проверяет управляющий тег. Если нет управляющего тега, то CANDIDATE( ) вернет .F.

Если управляющим является IDX-индекс, то функция вернет .F., поскольку кандидатным может быть индекс только составного CDX-файла.

Функция

PRIMARY([nIndexNumber] [, nWorkArea | cTableAlias])

возвращает .T., если тег является первичным, или .F. – в противном случае.

Смысл параметров см. в описании функции CANDIDATE( ).

Функции

KEY([CDXFileName,] nIndexNumber [, nWorkArea | cTableAlias])

или

SYS(14, nIndexNumber [, nWorkArea | cTableAlias])

возвращают строку, содержащую индексное выражение тега составного CDX-файла или индексного IDX-файла текущей или заданной таблицы.

Если необязательные параметры опущены, то индекс или тег выбираются по значению параметра nIndexNumber.

Параметры:

CDXFileName – имя открытого составного CDX-файла (может быть указано имя структурного CDX-файла), для тега которого функция KEY( ) возвращает результат. Тег выбирается по значению параметра nIndexNumber.

nIndexNumber – позиция в списке открытых индексных IDX-файлов и CDX-файлов, по которой выбирается индекс или тег. Порядок нумерации индексов и тегов см. в описании команды SET ORDER.

Пример. Печатаются имена тегов и их индексных выражений структурного индексного файла таблицы Books.

close databases

open database d:\HomeLibrary\HomeLibrary.dbc

use Books

select Books

for nCount = 1 to TagCount( )

? Tag(nCount) + ' ' + Key(nCount)&& Печать результата

&& или:

&& ? Tag(nCount) + ' ' + Sys(14, nCount)

endFor

Результат:

BOOKID                             BOOKID

BOOK                                 LEFT(BOOK,20)

Функции

FOR([nIndexNumber [, nWorkArea | cTableAlias]])

или

SYS(2021, nIndexNumber [, nWorkArea | cTableAlias])

возвращают выражение индексного фильтра индекса или тега таблицы. Буквы в результате – прописные. Если параметр nIndexNumber отсутствует, то результат возвращается для управляющего индекса или тега. Если такового не имеется, то функция вернет пустую строку. Также пустая строка будет возвращена, если индекс создан без употребления опции FOR или если nIndexNumber больше числа открытых индексов и тегов таблицы.

Параметр:

nIndexNumber – позиция в списке тегов составного CDX-файла cCDXFileName или открытых индексных IDX-файлов и CDX-файлов, по которой выбирается индекс или тег. Порядок нумерации индексов и тегов см. в описании команды SET ORDER.

Функция FOR( ) схожа с функцией SYS(2021); включена для совместимости с dBASE IV.

Функция

IDXCOLLATE([cCDXFileName,] nIndexNumber [, nWorkArea | cTableAlias])

возвращает строку, содержащую collate-последовательность для индекса IDX-файла или тега CDX-файла текущей или заданной таблицы.

Параметры:

cCDXFileName – имя составного индексного CDX-файла. Может быть именем структурного индекса, тег которого берется функцией IDXCOLLATE( ). Может быть задан в виде пустой строки.

nIndexNumber – позиция в списке тегов составного CDX-файла cCDXFileName или открытых индексных IDX-файлов и CDX-файлов, по которой выбирается индекс или тег. Порядок нумерации индексов и тегов см. в описании команды SET ORDER.

Если параметр cCDXFileName задан не в виде строки нулевой длины, то тег выбирается из числа тегов указанного параметром cCDXFileName составного индексного CDX-файла. Если cCDXFileName – это пустая строка, то индекс или тег берется из списка, приведенного в описании команды SET ORDER.

Функция вернет пустую строку, если nIndexNumber больше размера списка тегов или индексов и тегов.

Функция

SYS(3050, nType, [nBuffMemSize])

устанавливает размер текущего или фонового буфера памяти. Возвращает символьное представление размера памяти, выделенной для текущего или фонового буфера.

Текущий буфер – это память, доступная для VFP, когда VFP-приложение является текущим. Фоновый буфер – это память, доступная VFP, когда VFP-приложение работает в фоновом режиме, а текущим является иное приложение.

Функция SYS(3050) позволяет оптимизировать производительность VFP. Так, при выполнении команды REINDEX для ускорения перестройки индексных файлов можно, обратившись к функции SYS(3050), установить достаточно большой размер буфера, например такой, что в нем размещается вся таблица.

Параметры:

nType – тип буфера; принимает следующие значения:

  • 1 – текущий буфер;

  • 2 – фоновый буфер.

nBuffMemSize – максимальный размер буфера в байтах. При задании величины, меньшей 256K, VFP установит размер буфера равным 256K.

Если nBuffMemSize = 0, то функции вернет стартовое значение размера буфера памяти, указанного nType, которое зависит от характеристик компьютера.