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

Сопутствующие команды в Microsoft Visual FoxPro

« Назад

Команда

SET TABLEVALIDATE TO [nLevel]

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

Параметр:

nLevel – устанавливает уровень проверки таблицы; задается как сумма приведенных в табл. 15.6 значений.

Таблица 15.6

Значения для параметра nLevel

Номер бита

Значение

Описание

0

0

Не выполняется проверка таблицы

0

1

Проверяется число записей при открытии таблицы

1

2

Проверяется число записей при открытии таблицы число записей при их добавлении (вставке) в момент записи их записи

2

4

Подавляется сообщение File is in use (Error 3), если заголовок таблицы не может быть заблокирован при ее открытии. Дополнительно в установке nLevel должен быть определен бит 1

3

8

Проверяет заголовок таблицы перед записью добавленных записей на диск и модификацией заголовка

Установку TABLEVALIDATE можно задать в файле конфигурации:

TABLEVALIDATE = nLevel

Если работа с таблицей ведется в режиме монопольного доступа и SET TABLEVALIDATE установлен в 8 или в большее значение, то эта установка игнорируется.

Команда

FLUSH

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

VFP автоматически сохраняет изменения на диск, когда

  • закрывается таблица посредством USE, CLOSE ALL или CLOSE DATABASES (сохраняются изменения для закрываемых файлов);

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

Команда

SET AUTOINCERROR ON | OFF

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

Употребляется при работе с такими командами, как APPEND FROM и INSERT INTO.

Опции:

ON – (по умолчанию действует) ошибка генерируется.

OFF – ошибка не генерируется; для autoinc-поля используется соответствующее значение, подаваемое значение игнорируется.

Замечание. Таблица (курсор), когда открывается, наследует установку SET AUTOINCERROR. Последующее изменение установки команды в текущей сессии данных не изменяет установки открытых таблиц (курсоров). Для курсора это осуществляется функцией CURSORSETPROP( ).

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

Команда

SET BLOCKSIZE TO nBytes

задает размер блока, используемый при размещении memo-полей на диске.

Параметр:

nBytes – размер блока в байтах, используемый при размещении memo-полей на диске. Если nBytes = 0, то размер блока – 1 байт. Если 1 ≤ nBytes ≤ 32, то размер блока равен 512 * nBytes. Если nBytes > 32, то размер блока равен nBytes.

При задании nBytes > 32 можно получить существенную экономию дисковой памяти.

По умолчанию SET BLOCKSIZE установлен в 64. Для изменения размера блока уже существующего файла следует произвести соответствующую установку SET BLOCKSIZE, а затем выполнить копирование таблицы и ее memo-файла (команда COPY TO). Скопированная таблица будет использовать новый размер блока.

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

Команда

SET DELETED ON | OFF

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

Опции:

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

OFF – (по умолчанию) задает режим обработки помеченных для удаления записей.

Замечание. SQL – SELECT выбирает, если SET DELETED установлен в OFF, записи с пометкой удаления, сохраняя ее в результате.

SET DELETED игнорируется, если по умолчанию диапазон команды – это текущая запись или если параметром Scope задается одна запись. Исключение составляет команда SEEK, всегда учитывающая SET DELETED. Команды INDEX и REINDEX всегда игнорируют SET DELETED, индексирую все записи таблицы.

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

Команда

SET EXCLUSIVE ON | OFF

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

Опции:

ON – (по умолчанию для глобальной сессии данных) задает режим монопольного доступа. В отличие от FLOCK( ) команда SET EXCLUSIVE ON также препятствует доступу "только для чтения".

Команды INSERT, INSERT BLANK, MODIFY STRUCTURE, PACK, REINDEX и ZAP могут выполняться, если таблица открыта монопольно.

Второй способ открыть таблицу монопольно – это использовать команду USE с опцией EXCLUSIVE.

OFF – (по умолчанию для частных сессий данных) обеспечивает, если с командой USE не употребляется опция EXCLUSIVE, открытие таблиц для разделяемого доступа.

Замечание. Выполнение SET EXCLUSIVE не изменяет статус ранее открытых таблиц.

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

Команды

SET FIELDS ON | OFF | LOCAL | GLOBAL

и

SET FIELDS TO [[FieldName1 [, FieldName2 ...]]
                   | ALL [LIKE Skeleton | EXCEPT Skeleton]]

задают поля, к которым может быть осуществлен доступ.

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

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

OFF – (по умолчанию) доступны все поля всех таблицы.

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

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

Команда SET FIELDS GLOBAL обеспечивает доступ к полям таблиц, открытых в разных рабочих областях, без обращения к команде SET COMPATIBLE TO DB4.

TO [FieldName1 [, FieldName2 ...]] – задает имена доступных полей. Имени поля должен предшествовать псевдоним, если:

  • таблица не является текущей;

  • имя поля текущей таблицы совпадает с именем поля иной таблицы (оба поля должны иметь псевдонимы).

Список полей может содержать операторы, создающие вычисляемые поля. Формат оператора:

<имя вычисляемого поля> = <выражение>

Вычисляемые поля содержат данные, доступные только для чтения.

Поля нетекущих таблиц и вычисляемые поля будут доступны, если SET FIELDS установлен в GLOBAL или SET COMPATIBLE установлен в DB4 или ON. Если выражение оценивается как строка, то на тип результата оказывает воздействие установка команды SET VARCHARMAPPING.

Пример:

close databases

open database d:\HomeLibrary\HomeLibrary.dbc

use Books

set compatible to DB4

&& Задаем вычисляемое поле BookPrice

set fields to BookPrice = Rtrim(Book) + ', ' + Transform(Price)

&& Просмотр вычисляемого поля; результат см. на рис. 15.8

browse last

213.1.-Вычисляемое-поле-BookPrice-заданное-SET-FIELDS

Рис. 15.8. Вычисляемое поле BookPrice, заданное SET FIELDS

Замечание. Если установка SET COMPATIBLE в DB4 или ON не выполнена, то при выполнении приведенной программы возникнет ошибка No fields found to process.

ALL – разрешает доступ ко всем полям.

ALL LIKE Skeleton | EXCEPT Skeleton – разрешает доступ к полям, удовлетворяющим маске Skeleton (LIKE) или ей неудовлетворяющим (EXCEPT). Маска Skeleton может содержать символы * и ?.

Пример:

set fields to all like A*, P* except PRT*

Команда SET FIELDS TO является аддитивной: команда с новым списком полей добавляет этот список в уже существующий.

Выполнение SET FIELDS TO со списком полей или с ALL устанавливает SET FIELDS в ON; выполнение без единой опции – в OFF.

SET FIELDS LOCAL | GLOBAL действует, когда SET FIELDS установлен в ON.

Вызов SET FIELDS TO без единой опции удаляет все поля из SET FIELDS-списка.

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

Команда

CLEAR FIELDS

освобождает список полей, созданный SET FIELDS и устанавливает SET FIELDS в OFF. Отличается от SET FIELDS TO тем, что освобождает списки полей для всех рабочих областей. Кроме того, SET FIELDS TO не выполняет неявно SET FIELDS OFF.

Команда

SET COMPATIBLE FOXPLUS | OFF | DB4 | ON [PROMPT | NOPROMPT]

управляет совместимостью с Microsoft FoxBASE+ и другими языками.

Опции:

FOXPLUS | OFF – позволяет выполнение программы FoxBASE+ в VFP без изменений.

DB4 | ON – влияет на поведение перечисленных в табл. 15.7 команд и функций.

Таблица 15.7

Команды и функции, на которые влияет установка SET COMPATIBLE

ACTIVATE SCREEN

ACTIVATE WINDOW

APPEND MEMO

BROWSE

DECLARE

DIMENSION

GO | GOTO

FSIZE( )

INKEY( )

LASTKEY( )

LIKE( )

Команды меню

PLAY MACRO

RUN | !

SET FIELDS

SET MESSAGE

SET MEMOWIDTH

SET PRINTER TO FileName

STORE

SUM

TRANSFORM( ) (с числовыми кодами в PICTURE)

SELECT( )

SYS(2001, "COLOR")

 

PROMPT – появляется Convert Memos-диалог, когда открывается dBASE-таблица с memo-полем. Если memo-поле при открытии dBASE-таблицы не преобразовано в формат VFP, то это можно сделать позже, употребив команду COPY TO с опцией TYPE FOXPLUS.

NOPROMPT – Convert Memos-диалог не появляется, и dBASE memo-файл преобразовывается в формат VFP автоматически.

Команда

SET FILTER TO [lExpression] [IN nWorkArea | cTableAlias]

задает условия, такие, что отвечающие им записи текущей или указанной опцией IN таблицы доступны. Записи, этим условиям не отвечающие, недоступны. То есть они не отображаются, например, в Browse-окне, не могут быть найдены командами LOCATE и SEEK (или функцией SEEK), удалены и т. д.

Параметр:

lExpression – условия, которым должны удовлетворять записи.

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

Выполнение SET FILTER TO без lExpression отключает фильтр текущей или указанной опцией IN таблицы.

Фильтр устанавливается для каждой таблицы отдельно.

Условия, заданные SET FILTER, не оцениваются, пока выполняется изменение позиции DBF-файла.

Установки SET FILTER не оказывают влияния на SQL-команды (DELETE, SELECT и др.)

Пример. SET FILTER делает доступными записи только с четными значениями поля AuthorId.

close databases

open database d:\HomeLibrary\HomeLibrary.dbc

use Authors order AuthorId

&& Задаем условие доступности записей

set filter to Mod(AuthorId, 2) = 0 in Authors

&& Просмотр таблицы; результат см. на рис. 15.9

browse last

213.2.-Действие-set-filter-to-mod

Рис. 15.9. Действие set filter to mod(AuthorId, 2) = 0

Если выполнить при установленном фильтре

? Seek(1)    && Ищем автора с AuthorId = 1

то на экране появится .F., хотя запись с таким значением AuthorId в таблице имеется.

Выполним теперь

set filter to

? Seek(1)                             && Напечатает: .T.

При действующем set filter to Mod(AuthorId, 2) = 0 команда

delete for AuthorId = 1

будет нерезультативной – пометка удаления проставлена не будет. Однако SQL-команда

delete from Authors where AuthorId = 1

в записи с AuthorId = 1 пометку удаления разместит.

Команда

SET FULLPATH ON | OFF

определяет, будут ли функции CDX( ), DBF( ), MDX( ) и NDX( ) возвращать полное имя файла или только имя файла с именем диска.

Полное имя возвращается, если задана опция ON.