Анимация
JavaScript
|
Главная Библионтека Наннвнованне мояеян Рабочий объен (кдб см К-дяДО щнлицдрп8 Мощность [в с)[Унн Grand Rix 14 ЭП1 Turbo jlGBoHfif Range ftoyer 4.6 Safrane 3.0 FiJjirg Spur 6.75 Cordoba i.a "ZJ 213,0; Прннвр Количестве цнлиццров должно быть болше или равно 1 kejJ 3iuto Рис. 6.5. Не следует включать в правила проверки никаких команд или функций, которые пытаются переместить указатель записи в текущей рабочей области, то есть в той рабочей области, для которой эти правила проверяются. Включение в правила проверки таких команд и функций, как SEEK, LOCATE, SKIP, APPEND, APPEND BLANK, INSERT, AVERAGE, COUNT, BROWSE или REPLACE FOR, может привести к повторному срабатыванию правил, создавая ошибочную ситуацию. Такая ситуация называется рекурсией. В Visual FoxPro триггеры определяются и хранятся как свойства для заданной таблицы. Если таблица удаляется из базы данных, то связанные с ней триггеры тоже удаляются. Триггеры срабатывают после проверки всех прочих ограничений, таких как правила проверки, уникальность первичного ключа, допустимость пустых значений. В отличие от правил уровней полей и записей, триггеры не срабатывают для буферизованных данных. Триггеры можно создавать в Конструкторе таблиц или с помощью команды CREATE TRIGGER. Для таблицы может быть задано по одному триггеру на каждое из событий: INSERT, UPDATE или DELETE. В каждый момент времени таблица может иметь максимум три триггера. Значением триггера может быть истина (.Т.) или ложь (.F.). Для установки триггера в диалоговом окне Table Properties Конструктора таблиц введите в одно из полей ввода - INSERT, UPDATE или DELETE Trigger - выражение триггера или имя хранимой процедуры, содержащей выражение триггера. Программно можно использовать предложение CHECK в команде CREATE TRIGGER. Предположим, при продаже очередного автомобиля 27 числа каждого месяца требуется формировать запрос о результатах продажи за текущий месяц. Чтобы этого добиться, можно задать триггер на операцию Insert для таблицы Sale. Триггер устанавливается на операцию INSERT (а не на операцию DELETE или UPDATE), поскольку требуется, чтобы триггер срабатывал при добавлении новой записи. При создании триггера можно указать функцию ri insert sale() как триггер вставки таблицы Sale (рис. 6.6). Эту функцию необходимо описать в хранимой процедуре: ",у Table Properties Validation Rule: Validation Text: INSERT Trigger: UPDATE Trigger: DELETE Trigger: .jT:insert jalef] .ji update salef] ri delete sale() Рис. 6.6. PROCEDURE ri insert sale IF DAY(DATE()) = 27 WAIT WINDOW Формирование отчета NOWAIT SELECT FROM Sale ; WHERE MONTH(Sale.date sale) = MONTH(DATE()); INTO CURSOR Sale Month Current ENDIF ENDPROC Триггеры для событий UPDATE и DELETE задаются аналогично. После создания таблицы ее структура и свойства могут быть в любое время модифицированы. Для полей можно добавить, изменить или удалить имена, размеры, типы данных, значения по умолчанию, правила проверки, комментарии и заголовки. Структура таблицы может быть изменена как в среде Конструктора таблиц, так и программно с помощью команды ALTER TABLE. Например, можно изменить структуру связанной с базой данных таблицы Sale с помощью следующих команд: OPEN DATABASE Auto Store USE Sale EXCLUSIVE MODIFY STRUCTURE После этого открывается Конструктор таблиц. Для создания свободной таблицы в Project Manager выберите пункт Free Tables, а затем нажмите кнопку New, чтобы вызвать Конструктор таблиц. Для программного создания свободной таблицы используйте команду CREATE TABLE без открытых баз данных. Следующий программный код создает свободную таблицу Order , состоящую из четырех полей с именами key order, key customer, key model, key salman: CLOSE DATABASES CREATE TABLE Order (key order I, ; key customer I, ; key model I, ; key salman I) Новая таблица является свободной, поскольку в момент ее создания не было открытых баз данных. Если требуется перемещаться по записям таблицы, просматривать их или манипулировать ими в некотором заданном порядке, то следует использовать индекс. Индекс Visual FoxPro представляет собой файл указателей, логически упорядоченных в соответствии со значениями индексного ключа. Индексный файл отделен от файла таблицы (DBF-файла) и не изменяет физический порядок расположения записей в таблице. При создании индекса создается файл, поддерживающий указатели на записи в DBF-файле. Если требуется работать с записями в некотором порядке, то следует выбрать соответствующий индекс, чтобы установить тот порядок, в котором будут видимы и доступны записи таблицы. Первоначально при создании таблицы Visual FoxPro создает файл DBF и если имеются поля примечаний и General, то связанный с ним FPT-файл. В это время не создается никаких индексных файлов. Записи запоминаются в новой таблице в порядке ввода. При просмотре новой таблицы записи видны в том порядке, в котором они вводились. Обычно требуется просматривать записи и иметь к ним доступ в некотором заданном порядке. Например, может потребоваться, чтобы записи в таблице клиентов были отсортированы в алфавитном порядке названий компаний. Если нужно задать порядок доступа к записям и порядок их просмотра, следует создать для таблицы индексный файл путем создания для таблиц первого способа упорядочения или индексного ключа. Тогда можно будет устанавливать порядок записей в таблице в соответствии с индексным ключом и получать доступ к записям таблицы в новом порядке. Как задать для таблицы индексный ключ? В Конструкторе таблиц на вкладке Index введите информацию об индексном ключе. Установите Regular в качестве типа индекса или используйте команду INDEX. Например, следующий программный код открывает таблицу Model и создает индексный ключ для поля key body. Ключевое слово TAG и следующее за ним "key body" задают имя или тег для нового индексного ключа. USE Model INDEX ON key body TAG key body В этом примере тег индексного ключа имел то же имя, что и индексируемое поле. Эти имена не обязательно должны совпадать, для индексного ключа можно задать и другое имя. После создания с помощью команды INDEX индекса Visual FoxPro автоматически использует этот индекс, чтобы установить порядок записей в таблице. Например, если ввести данные в таблицу из предыдущего примера и просмотреть ее в окне просмотра, то записи будут отсортированы по полю key body. При создании первого индексного ключа таблицы в предыдущем примере Visual FoxPro автоматически создал новый файл - MODEL.CDX, в котором запоминаются индексные ключи. Индексный CDX-файл, называемый структурным составным индексом, представляет собой наиболее общий и важный тип индексных файлов Visual FoxPro. Обратите внимание на следующие свойства структурного CDX-файла: • Автоматически открывается при открытии таблицы. • В одном индексном файле может содержаться несколько вариантов упорядочения записей или индексных ключей. • Автоматически поддерживает операции добавления, изменения или удаления записей таблицы. Visual FoxPro предлагает дополнительно еще два вида индексных файлов: неструктурные СDХ-файлы и файлы с одним ключом - IDX-файлы. Однако СDХ-файлы, или структурные составные компактные индексы, представляют наиболее важный вид индексов. Остальные два вида индексов употребляются реже. Visual FoxPro поддерживает четыре типа индексов: первичные, кандидаты, уникальные и обычные. Тип индекса определяет, допустимы или нет повторяющиеся значения полей и записей. Первичный индекс (Primary) - это единственный индекс в таблице, который определяет уникальное ключевое значение для ее записей. Следовательно, он запрещает повторяющиеся значения в заданных полях или в выражении. Для таблицы может быть создан только один первичный индекс. При попытке задать первичный индекс для поля, в котором уже имеются повторяющиеся значения, Visual FoxPro выдает сообщение об ошибке. Индекс-кандидат (Candidate) - это индекс, который удовлетворяет требованиям к первичному индексу, но может быть не единственным в таблице. Он также запрещает повторяющиеся значения в заданных полях или выражении. Название "кандидат" относится к основному свойству индекса: поскольку он запрещает дублирующие значения, то этот индекс можно использовать в качестве первичного индекса для таблицы. При попытке задать индекс-кандидат для поля, в котором уже имеются повторяющиеся значения, Visual FoxPro выдает сообщение об ошибке. Первичные индексы и индексы-кандидаты создаются с помощью команд CREATE TABLE или ALTER TABLE. При определении постоянного отношения типа "один ко многим" или "один к одному" можно использовать со стороны "один" как первичный индекс, так и индекс-кандидат. Для создания первичного индекса или индекса-кандидата на вкладке Index Конструктора таблиц выберите тип индекса Primary или Candidate и создайте индекс (рис. 6.7) или используйте команду ALTER TABLE. 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 [ 51 ] 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 |