Структурный файл cdx не найден

Обновлено: 04.07.2024

открывает (закрывает) таблицу или SQL-вид, а также индексные файлы таблицы.

Опции и параметры:

TableName – имя открываемой таблицы. Может содержать путь; расширение необязательно.

Если открывается таблица нетекущей открытой базы данных, то имени таблицы предшествует DatabaseName!, где DatabaseName – это имя базы данных.

Если имя таблицы TableName и/или базы данных содержит пробелы то имя [DatabaseName!]Table заключается в качычки.

Замечание . VFP не распознает правильно путь, если в его имени есть восклицательный знак.

SQLViewName – имя открываемого SQL-вида, созданного интерактивно или командой CREATE SQL VIEW. Вид может быть и автономным.

? – открывает Use-диалог выбора таблицы.

IN nWorkArea – рабочая область, в которой таблица открывается. Однако команда

USE IN nWorkArea

закрывает таблицу, открытую в рабочей области nWorkArea.

Команда USE с опцией IN 0 откроет таблицу в самой низкой свободной области, например:

close tables all

open database d:\HomeLibrary\HomeLibrary.dbc

use Authors in 0 && Открываем таблицу в области 1

use Books in 0 && Открываем таблицу в области 2

use in 1 && Закрываем таблицу Authors

IN cTableAlias – открывает таблицу в области, в которой используется псевдоним cTableAlias, например:

use Authors in 0 && Открываем таблицу в области 1

use Books in Authors && Закрываем Authors и открываем Books

Если параметр nWorkArea или cTableAlias опущен, то таблица открывается в текущей рабочей области. Команда USE, выполненная без других опций, закрывает таблицу, открытую в текущей рабочей области. Например:

&& Выбираем область, использующую псевдоним Authors

use && Закрываем Authors

ONLINE – открывает автономный вид, созданный CREATEOFFLINE( ). Имя открываемого автономного вида указывается параметром SQLViewName. После открытия вида данные на сервере могут быть обновлены функцией TABLEUPDATE( ).

Автономные виды должны открываться в режиме монопольного доступа. Это обеспечивается либо использованием в USE опции EXCLUSIVE, либо в результате установки SET EXCLUSIVE в ON.

Автономный вид нельзя открыть или закрыть во время транзакции.

ADMIN – открывает автономный вид, созданный CREATEOFFLINE( ), но не обновляет данные на сервере (не переносит туда изменений, выполненных в автономном виде).

Опция ADMIN, как и опция ONLINE, не может быть использована внутри транзакции.

AGAIN – открывает повторно таблицу в заданной опцией IN или текущей рабочей области.

При повторном открытии таблицы в другой рабочей области берутся все атрибуты области, в которой таблица открыта первый раз. Например, если таблица первоначально открыта для чтения и в монопольном режиме, то и в другой обрасти она будет доступна только для чтения и монопольно. Индексные файлы, открытые с первичной таблицей, доступны и в области, в которой таблица открывается повторно (если только при выполнении USE AGAIN не открываются индексы). При повторном открытии SET ORDER устанавливается в 0.

Если USE AGAIN открываются новые дополнительные индексы таблицы, то в первичной области SET ORDER устанавливается в 0.

Если таблица открывается повторно в другой рабочей без употребления опции AGAIN, то в первичной рабочей области таблица будет закрыта.

Таблица, открываемая повторно, получает по умолчанию псевдоним по имени рабочей области, например:

use Books again in 200 && Псевдоним таблицы – W200

В VFP повторное открытие таблицы не приводит к выделению нового идентификатора файла.

NOREQUERY [nDataSessionNumber] – данные удаленного SQL-вида не будут загружаться повторно. Опция применяется только с SQL-видами и, как правило, в команде USE с опцией AGAIN. Цель ее употребления – повышение быстродействия за счет отказа от повторной загрузки данных (она уже выполнена при первом вызове команды USE).

Параметр nDataSessionNumber задает номер сессии данных; если он опущен то берется текущая сессия.

NODATA – загружается только структура SQL-вида. Применяется для быстрого определения структуры SQL-вида. Скорость обеспечивается отказом от загрузки данных.

INDEX IndexFileList – задает список открываемых вместе с таблицей индексных IDX- и независимых составных CDX-файлов. Расширения должны присутствовать, если открываемые IDX- и CDX-файлы имеют одинаковое имя.

Порядок нумерации индексов IDX-файлов и тегов CDX-файлов см. в описании команды SET ORDER. Индекс или тег, имеющий номер 1, если в команде USE опущена опция ORDER и имеется опция INDEX, становится управляющим.

INDEX ? – открывает Open-диалог выбора IDX- или CDX-файла.

ORDER nIndexNumber – задает позицию, по которой выбирается управляющий индекс или тег. Выбранный индекс может отличаться от установленного опцией INDEX.

Порядок выбора управляющего индекса или тега см. в описании команды SET ORDER.

Если nIndexNumber = 0, то управляющий индекс (тег) не устанавливается (записи таблицы отображаются и обрабатываются в соответствии с физическом порядком их следования), но все индексные файлы остаются открытыми. Это обеспечивает их обновление при изменениях в таблице. Опция ORDER без nIndexNumber равнозначна ORDER 0.

ORDER IDXFileName – задает управляющий индексный IDX-файл. Параметр IDXFileName может включать путь.

ORDER [TAG] TagName [OF CDXFileName] – устанавливает управляющим тег TagName структурного или независимого CDX-файла. Если тег TagName имеется в нескольких открытых индексных файлах таблицы, то обязательно наличие опции OF CDXFileName.

ASCENDING (DESCENDING) – открывает таблицу, располагая ключи управляющего индекса по возрастанию (убыванию). Сам же способ формирования индексного файла, заданный при его создании, не меняется. Опция не может быть использована, если не задан управляющий индекс.

Пример:

use Authors order AuthorId descending

ALIAS cTableAlias – создает псевдоним cTableAlias таблицы. Он используется при обращении к полям таблицы в функциях и командах, требующих его присутствия. Может содержать до 254 символов включительно.

Если опция ALIAS опущена, то псевдоним совпадает с именем таблицы.

Если опция ALIAS опущена и имя открываемой таблицы вступает в конфликт с существующим псевдонимом, то для нее берется псевдоним по умолчанию (символьное представление номера рабочей области), например:

open database d:\HomeLibrary\HomeLibrary.dbc

use Authors alias Books

use Books in 3 && Получит псевдоним "C"

Если употребляется уже существующий псевдоним, то генерируется ошибка, например:

use Authors alias Tbl

use Books in 0 alias Tbl && Генерируется ошибка

Замечание . Для указания имени поля Field в командах и функциях, принимающих это имя в качестве параметра, может быть использован один из следующих способов:

EXCLUSIVE – открывает таблицу в режиме монопольного доступа.

SHARED – открывает таблицу в режиме разделяемого доступа. Опция имеет приоритет над установкой SET EXCLUSIVE в ON.

NOUPDATE – предотвращает изменения таблицы и ее структуры.

CONNSTRING cConnectionString | (m.nStatementHandle) – строка SQL-соединения (cConnectionString) с ODBC-источником данных или переменная памяти (m.nStatementHandle), хранящая идентификатор существующего SQL-соединения.

При включении cConnectionString VFP передает строку соединения удаленному, заданному параметром SQLViewName виду, который ее использует для соединения с указанным в строке источником данных. Если cConnectionString – это строка нулевой длины, то появляется диалог выбора источника данных.

Если cConnectionString содержит не все необходимые для соединения данные, то откроется Login-диалог.

Если опция CONNSTRING опущена, то используется установленное по умолчанию соединение.

Параметр m.nStatementHandle употребляется с разделяемыми соединениями.

open database d:\HomeLibrary\HomeLibrary.dbc

&& Используем строку соединения

use BookSale in 0 connstring "dsn=BookSaleDataBase;uid='nick';pwd='name'"

&& Используем идентификатор SQL-соединения

use BookSale in 0 connstring nStHandle again

activate window View

ISREADONLY([nWorkArea | cTableAlias])

возвращает .T., если текущая или заданная параметром nWorkArea | cTableAlias таблица открыта только для чтения, или .F. – в противном случае. Если осуществлен вызов ISREADONLY(0), то функция вернет результат для текущей базы данных. Если нет текущей таблицы или базы данных или если указан неиспользуемый псевдоним, то функция сгенерирует ошибку.

Программно таблица открывается для чтения при наличии опции NOUPDATE в команде USE. Также DBF-файлу таблицы в окне задания его свойств можно установить атрибут MS-DOS "Только чтение".

Чтобы убедиться в наличии текущей базы данных, можно использовать условие

Курсор, созданный командой SELECT – SQL, всегда имеет статус "Только чтение".

Пример:

open database d:\HomeLibrary\HomeLibrary.dbc

use Authors noUpdate

? IsReadOnly('Authors') && Напечатает: .T.

? IsReadOnly(0) && Напечатает: . F.

ISEXCLUSIVE([nWorkArea | cTableAlias | cDatabaseName [, nType]])

возвращает.T., если таблица или база данных cDatabaseName открыта в режиме монопольного доступа, или .F. – в противном случае.

nType – равен 1 (по умолчанию), если результат возвращается для таблицы, или 2, если – для базы данных.

CLOSE TABLES [ALL]

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

Опция ALL закрывает все таблицы всех баз данных и все свободные таблицы. Все базы данных остаются открытыми.

Если команда выполнена во время транзакции, то возникнет ошибка.

Таблица в текущей или указанной рабочей области закрывается командой USE.

CLOSE ALL

выбирает рабочую область 1 и закрывает следующие файлы:

базы данных, таблицы и индексы текущей и всех других сессий данных;

файлы низкого уровня, созданные FCREATE( ) и FOPEN( );

проектировщики формы, этикетки, отчета и запроса и диспетчер проекта.

Команда не закрывает командное, отладочное и трассировочное окна. Также она не закрывает файл, открытый SET PRINTER, и Help.

SET TABLEPROMPT ON | OFF

активизирует (ON) или отключает (OFF) режим появления диалога Open в командах, позволяющих пользователю выбирать таблицу, если она не открыта.

Если задана опция OFF и таблица не открыта, то возникнет ошибка исполнения.

Установка SET TABLEPROMPT действует на следующие команды: BROWSE, DELETE – SQL, GO | GOTO, INDEX, INSERT – SQL, PACK, REPLACE, REPORT FORM, SELECT – SQL, SET FILTER, SKIP, UPDATE – SQL и ZAP.

use tablename1
index on fieldname1 tag tagname1
index on fieldname2 tag tagname2 additive

use tablename2
index on fieldname1 tag tagname1
index on fieldname2 tag tagname2 additive

CREATE TABLE stru\IndStru.SQL (tb c(8), nm c(10), vi c(254), vf c(254))

DIMENSION NmTbl(кол-во таблиц)
NmTbl(1)=[таблица1]
.

FOR RollTbl=1 TO ALEN(NmTbl,1)
USE &NmTbl(RollTbl) IN 0
CntIndexes=ATAGINFO(IND)
IF CntIndexes>0
=ASORT(IND,1)
FOR RollInd=1 TO CntIndexes
INSERT INTO stru\IndStru.sql (tb, nm, vi, vf) VALUES ;
(NmTbl(RollTbl), IND(RollInd,1), IND(RollInd,3), IND(RollInd,4))
ENDFOR
ENDIF
USE
ENDFOR

а затем при переиндексации использую этот справочник.

USE indstru.sql IN 0 ALIAS ListTag && открываем файл структурных индексов
SELECT ListTag

GO TOP
cntdbf=RECCOUNT([ListTag])

OpenTable=ALLTRIM(tb) && имя открываемой таблицы
USE (OpenTable) IN 0 EXCLUSIVE && открываем монопольно
SELECT (OpenTable)
IF !LastAlias==OpenTable &&если алиас последней открывавшейся таблицы не равен текущему, то
LastAlias=OpenTable
DELETE TAG ALL && удаляем все тэги
ENDIF
&FraseInd && создаем тэг
USE
SELECT ListTag
ENDSCAN
CLOSE TABLES ALL

Microsoft рекомендует именно пересоздавать индексы, удаляя предыдущие, причем вместо команды DELETE TAG ALL рекомендуется удалять их физически, то есть DELETE FILE AAA.CDX .

Твой код совсем не поможет, если таблица из-за повреждения индекса не может быть открыта! Причём этому мешает обычно не несчастный флаг наличия CDX в заголовке (он и снимается программно в пару строк, да и автоматом он снимается если проигнорировать первую неудачную попытку открытия таблицы) - а записи об индексах в dbc контейнере. "Прямого" способа убрать эту информацию нету, а писать код по ручной "зачистке" dbc - упаришься однозначно :( Даже использовать DELETE TAG ALL (который кстати тоже невозможен если таблица не открылась) весьма сложно - после этого не достаточно одних INDEX ON - нужно восстанавливать первичный ключ, связи (REFERENCES). Кроме того если по каким-то внутренним причинам часть тегов была создана в "неродной" COLLATE, то и это нужно особо отслеживать.

А вот REINDEX совсем необязательно делать над уже "распухшим" cdx файлом - достаточно взять cdx из "эталонной" пустой копии базы (в нём тогда не будет данных - только информация о самих тегах), подставить вместо "плохого" и использовать REINDEX.

Из примеров видно, что кавычки при задании cPath могут быть опущены.

Первоначально VFP ищет файлы в директории, заданной SET DEFAULT, называемой директорией по умолчанию. После запуска директорией по умолчанию является директория, в которой VFP запускается, или указанная в файле конфигурации, или стартовой программе (ее имя хранит системная переменная _STARTUP). Если файл не найден, то поиск продолжается в папках, заданных командой SET PATH.

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

Команда SET DEFAULT не поддерживается DLL-серверами с одной или несколькими нитями: SET DEFAULT изменяем директорию по умолчанию для всего процесса и всех определенных в нем нитей. При необходимости в DLL-серверах следует использовать SET PATH вместо CD и CHDIR.

Замечания :

1. Директория по умолчанию возвращается выражением

2. Для изменения директории по умолчанию употребляется также команда

CD | CHDIR cPath

SET PATH TO [Path] [ADDITIVE]

задает пути для поиска файла.

Опции и параметр:

TO [Path] – задает один или несколько разделенных запятыми путей поиска файла. Путь не должен содержать восклицательного знака.

ADDITIVE – добавляет дополнительные пути к уже существующим.

При использовании опции ADDITIVE параметр Path должен быть либо строкой (не литералом), либо символьным выражением, например:

set path to d:\ && Можно использовать литерал d:\

set path to "d:\HomeLibrary" additive && Употребляем строку "d:\HomeLibrary"

? Set("PATH") && Напечатает: d:\; d:\HomeLibrary

Можно также применить и макроподстановку, например:

set path to &xx additive

set path to '&xx' additive

Выполнение SET PATH TO без параметра Path отменяет все установки команды.

DIR | DIRECTORY [ON Drive] [[LIKE] [Path] [FileSkeleton]]
[TO PRINTER [PROMPT] | TO FILE FileName]

выводит информацию о файлах в директории.

Опции и параметры:

ON Drive – задает имя диска, на котором расположена директория.

[LIKE] [Path] [FileSkeleton] – задает путь Path к директории, содержащей отображаемые файлы. Если опция ON опущена, путь может включать имя диска. Если параметр Path опущен, то будут выводиться сведения о файлах в текущей директории.

Маска FileSkeleton может включать символы * и ?. Так, команда

отобразит все файлы текущей директории, имеющие расширением PRG. А команда

выведет информацию о файлах без расширения.

TO PRINTER [PROMPT] – направляет вывод данных на принтер. Если задана опция PROMPT, то откроется диалог настройки принтера.

TO FILE FileName – направляет собранную информацию в файл FileName. Если SET SAFETY установлен в ON и файл FileName существует, то он будет перезаписан только после разрешения пользователя.

Если DIR употребляется без FileSkeleton, то будут выведены следующие сведения о таблицах, имеющихся в директории:

дата последнего обновления;

размер таблиц в байтах;

флаг принадлежности к базе данных;

число байт, занимаемых таблицами на диске, не считая размер FPT-файлов;

число отображаемых таблиц;

объем свободной памяти на диске.

Если не заданы параметры Drive и Path, то берется директории по умолчанию.

создает индексный файл или индекс, употребляемый для упорядочения доступа к данным и их отображения.

Опции и параметры:

eExpression – индексное выражение, которое может включать имя поля или имена нескольких полей текущей таблицы. Индексный ключ создается в индексном файле для каждой записи таблицы. VFP использует эти ключи для отображения и доступа к записям таблицы.

Индексное выражение сохраняется в заголовке индексного файла.

Нельзя использовать в eExpression переменные, элементы массивов, а также поля других таблиц.

Memo-поля могут быть использованы в eExpression только в сочетании с другими символьными выражениями.

Имена полей таблицы в eExpression указываются без псевдонима таблицы, поскольку в некоторых случаях (при выполнении команды USE . AGAIN, SQL-запросов и др.) таблица автоматически получает иной псевдоним, и индекс не может быть надлежащим образом обновлен.

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

VFP не поддерживает ключи переменной длины. Потому если индексное выражение вычисляется с различной длиной, например RTRIM(Author), к более коротким результатам будут добавлены правые пробелы. Рациональнее, если есть необходимость уменьшить размер индекса, употребить, например, выражение LEFT(Author, 20).

Длина ключа IDX-индекса должна быть в диапазоне 1 – 100 символов, а CDX-индекса – в диапазоне 1 – 240 символов. В некоторых collate-последовательностях или при использовании 2-байтовых символов длина eExpression в CDX-индексе ограничена 120 символами. При превышении допустимой длины ключа генерируется ошибка "Invalid key length".

Замечание . Употребление RECNO( ) в индексном выражении для буферизованного курсора портит индекс и приводит к бесконечному циклу.

TO IDXFileName – создается индексный IDX-файл. Имя файла может включать путь и не содержать расширения. По умолчанию IDX-файл получает расширение IDX. Однако оно может быть изменено путем соответствующего задания опции

INDEX extension

файла конфигурации VFP.

TAG TagName [COLLATE cCollateSequence] [OF CDXFileName] – создает тег составного индексного CDX-файла CDXFileName. Такой файл в отличие от IDX-файла может содержать несколько индексов (тегов).

Длина имени тега TagName не должна быть более 10 символов.

Составной индексный файл имеет предопределенное расширение – CDX.

Если при выполнении команды INDEX опция OF CDXFileName отсутствует, то будет создан тег структурного составного индексного файла, имя которого всегда совпадает с именем таблицы. Если опция присутствует, то создается тег независимого составного индексного файла. При этом будет создан и файл CDXFileName, если создается его первый тег.

Информация о наличии структурного индексного файла хранится в заголовке таблицы. При открытии таблицы открывается и ее структурный индексный файл, что обеспечивает его постоянное обновление. Если при открытии таблицы структурный индексный файл не обнаружен, то возникнет диалог (рис. 15.10)

216.1.-Не-найден-структурный-CDX-файл

Рис. 15.10. Не найден структурный CDX-файл

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

Если, однако, затем потребуется эту ссылку восстановить, то при открытии таблицы следует употребить опцию INDEX:

use TableName index cdxFileName

Независимые CDX-файлы и IDX-файлы должны открываться явно командами SET INDEX или USE с опцией INDEX: в заголовок таблицы никаких сведений о таких файлах не заносится.

Индексные CDX-файлы всегда являются компактными, поэтому опция COMPACT избыточна.

BINARY – создает двоичный индекс.

COLLATE cCollateSequence – задает collate-последовательность. Если опция опущена, то для cCollateSequence берется значение по умолчанию – MACHINE или установленное командой SET COLLATE.

Реакция системы при попытке создать существующий IDX-файл или тег CDX-файла зависит от установки SET SAFETY.

FOR lExpression – задает условие-фильтр: доступны (как для просмотра, так и для редактирования) будут только записи, для которых lExpression вычисляется со значением .T. Для повышения быстродействия выражение lExpression должно быть рашмор-оптимизируемо.

COMPACT – создает компактный IDX-файл.

ASCENDING – (по умолчанию) задает возрастающий порядок для тега CDX-файла.

DESCENDING – задает убывающий порядок для тега CDX-файла.

Тег CDX-файла, однако, может быть иметь возрастающий порядок, но открыт с опцией DESCENDING командой SET INDEX или получить ее командой SET ORDER.

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

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

Использование опции UNIQUE равнозначно установке SET UNIQUE в ON перед выполнение команды INDEX или REINDEX.

Если UNIQUE-индекс активен и значение индексного выражения изменилось таким образом, что уникальность восстановлена, то прежде неуникальная запись будет доступна только после выполнения REINDEX.

Активный (управляющий) UNIQUE-индекс не препятствует добавлению записей с неуникальными значениями ключей, но ограничивает к ним доступ.

CANDIDATE – создается кандидатный тег структурного индекса. Опция CANDIDATE может быть включена только при создании тега структурного индекса. В противном случае VFP генерирует ошибку.

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

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

После выполнения команды INDEX управляющим становится созданный ей индекс или тег. Записи отображаются и обрабатываются в порядке, определяемом индексным выражением управляющего индекса или тега. Физический порядок записей не нарушается.

Информация об открытых индексных файлах отображается командой DISPLAY STATUS.

Изменение значения ключевого поля изменяет значение ключа и, следовательно, его позицию в индексном файле. Это нужно учитывать при выполнении команд, таких, как SCAN . ENDSCAN, REPLACE ALL. Также необходимо понимать результат команды REPLACE при работе с индексом, построенным с применением опции FOR.

Пусть, например, все записи таблицы Authors имеют одно и то же значение InputDate (рис. 15.11).

216.2.-Фрагмент-таблицы-Authors

Рис. 15.11. Фрагмент таблицы Authors

Выполним следующий код:

&& Создаем индексный IDX-файл d:\iDate.idx

index on InputDate to d:\iDate

&& Управляющим является индекс iDate

k = 0 && Число обновленных записей

replace Authors.InputDate with Authors.InputDate + 1

При выполнении цикла SCAN . ENDSCAN, когда управляющим является индекс iDate с индексным выражением InputDate, изменится дата только первой записи таблицы. Это объясняется тем, что после увеличения даты на 1 день, ключ первой записи перемещается на последнюю позицию, что влечет завершение цикла SCAN . ENDSCAN.

Тот же результат будет получен и при выполнении цикла DO WHILE … ENDDO.

SET UNIQUE ON | OFF

задает, если установлена в ON, что в индексном файле не могут присутствовать записи с повторяющимися индексными ключами (в файл включается только первая из повторяющихся записей). Если же установка команды OFF, то в индексный файл будут включены ключи всех записей.

По умолчанию команда установлена в OFF.

Замечание . Индексный файл сохраняет свою SET UNIQUE-установку при выполнении REINDEX.

Установка команды сохраняется с текущей сессией данных.

REINDEX [COMPACT]

перестраивает все открытые индексные файлы текущей таблицы. Если указана опция COMPACT, обычные IDX-файлы конвертируются в компактные IDX-файлы.

Команда может быть выполнена, если таблица открыта в режиме монопольного доступа.

Индексный файл перестает соответствовать таблице, если таблица изменяется, а индексный файл не открыт. Соответствие восстанавливает командой REINDEX. Индексные файлы, которые нужно привести в соответствие, должны быть открыты.

При выполнении REINDEX также обновляется и структурный индексный CDX-файл, который автоматически открывается с таблицей и, следовательно, всегда ей отвечает (если, конечно, не было в сбоев в работе системы).

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

Пример 1:

wait 'Таблицу нужно открыть монопольно!' window

Пример 2. Выполняется обновление IDX-файла SomeTableIndex, а также структурного CDX-файла SomeTable.cdx (если таковой имеется).

use SomeTable index SomeTableIndex exclusive

SET ORDER TO [nIndexNumber | IDXIndexFileName | [TAG] TagName
[OF CDXFileName] [IN nWorkArea | cTableAlias]
[ASCENDING | DESCENDING]]

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

Опции и параметры:

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

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

Первоначально нумеруются IDX-файлы в соответствии с порядком их следования в списке. Затем нумеруются теги (индексы) структурного CDX-файла, если таковой имеется, в порядке их создания. И, наконец, нумеруются теги независимых CDX-файлов также в порядке их создания.

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

Таблица Video.dbf открывается с тремя индексными файлами Title.idx, Costs.cdx и Rating.idx в первой рабочей области. Один из них является составным.

use Video index Title.idx, Costs.cdx, Rating.idx in 1

Таблица Video имеет также структурный составной индексный файл Video.cdx с двумя тегами NumberSold и YearSold. Этот CDX-файл автоматически открывается с таблицей Video.

Независимый составной индексный файл Costs.cdx имеет теги RentalCost и BuyCost.

Поскольку IDX-файлы нумеруются в первую очередь, то SET ORDER TO 1 сделает управляющим индекс Title.idx, а SET ORDER TO 2 – Rating.idx:

set order to 1 && Управляющий индекс Title.idx

set order to 2 && Управляющий индекс Rating.idx

Затем нумеруются теги структурного CDX-файла Video.cdx:

&& Устанавливаем в качестве управляющего тег NumberSold файла Video.cdx

&& Устанавливаем в качестве управляющего тег YearSold файла Video.cdx

В последнюю очередь нумеруются теги независимого составного индексного файла Costs.cdx:

&& Устанавливаем в качестве управляющего тег RentalCost файла Costs.cdx

&& Устанавливаем в качестве управляющего тег BuyCost файла Costs.cdx

В качестве nIndexNumber можно указать 0. Выполнение

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

Команда SET ORDER TO без дополнительных опций и параметров равнозначна команде SET ORDER TO 0.

Если величина nIndexNumber больше числа открытых IDX-файлов и тегов открытых CDX-файлов, то VFP генерирует ошибку.

IDXIndexFileName – устанавливает IDX-файл с именем IDXIndexFileName в качестве контролирующего.

[TAG] TagName [OF CDXFileName] – устанавливает в качестве управляющего тег с именем TagName CDX-файла CDXFileName. Опция OF CDXFileName употребляется, если имеются одинаковые теги в разных открытых CDX-файлах таблицы.

Если открытый IDX-файл и тег открытого CDX-файла имеют одинаковые имена и опции TAG и OF CDXFileName опущены, то приоритет имеет IDX-файл.

ASCENDING | DESCENDING – обеспечивает отображение и обработку записей в возрастающем или убывающем порядке значений контролирующего индекса. На состав индексного файла или тега эти опция влияния не оказывают.

SET INDEX TO [IndexFileList | ?] [ORDER nIndexNumber
| IDXIndexFileName | [TAG] TagName [OF CDXFileName]
[ASCENDING | DESCENDING]] [ADDITIVE]

открывает один или более индексных файлов для текущей таблицы.

Опция и параметр:

IndexFileList – список имен открываемых индексных файлов. Имена файлов разделяются запятыми. В списке может присутствовать любое сочетание имен IDX- и CDX-файлов. Расширения могут быть опущены, если имена IDX- и CDX-файлов не совпадают. Имя файла может содержать путь. Если он опущен, то файл ищется в директории по умолчанию.

Первый индексный файл списка становится после выполнения команды управляющим. Записи, если первый элемент списка IndexFileList – это CDX-файл, будут отображаться и обрабатываться в порядке их физического расположения в таблице до тех пор, пока не выполнена команда SET ORDER TO TAG TagName.

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

Смысл прочих опций параметров см. в описании команды SET ORDER.

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

COPY INDEXES IndexFileList | ALL [TO CDXFileName]

создает составной индексный CDX-файл текущей таблицы из ее индексных IDX-файлов.

Опции и параметры:

IndexFileList – список имен IDX-файлов, индексные выражения которых используются для создания тегов CDX-файла. Имена файлов разделяются запятыми.

ALL – в составной CDX-файл войдут все открытые IDX-файлы текущей таблицы.

TO CDXFileName – имя создаваемого независимого составного CDX-файла.

COPY TAG TagName [OF CDXFileName] TO IndexFileName

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

Опция и параметр:

OF CDXFileName – имя открытого составного CDX-файла, содержащего тег TagName. Если опция опущена, то VFP берет первый тег структурного составного CDX-файла, если такового нет, то тег выбирается из открытого независимого составного CDX-файла.

DELETE TAG TagName1 [OF CDXFileName1]
[, TagName2 [OF CDXFileName2]].
DELETE TAG ALL [OF CDXFileName]

удаляют теги из составных индексных CDX-файлов.

Опции и параметры:

TagName1 [OF CDXFileName1] [, TagName2 [OF CDXFileName2]]. – список удаляемых тегов. Опция OF CDXFileName включается, если два или более тегов разных CDX-файлов имеют одинаковое имя.

ALL [OF CDXFileName] – удаляет все теги составного CDX-файла. Если опция OF CDXFileName опущена, то удаляются теги структурного CDX-файла; сам файл удаляется с диска и из заголовка таблицы вычищается ссылка на этот файл. В противном случае удаляются теги открытого CDX-файла, заданного параметром CDXFileName.

VFP выдает предупреждение, если удаляется первичный или кандидатный тег и SET SAFETY установлен в ON.

CLOSE INDEXES

закрывает, как и SET INDEX TO, все открытые индексные IDX- и составные независимые CDX-файлы таблицы текущей рабочей области. Структурный CDX-файл, автоматически открываемый вместе с таблицей, не закрывается.

Читайте также: