Программирование >>  Разработка пользовательского интерфейса 

1 ... 49 50 51 [ 52 ] 53 54 55 ... 147


Table Designer

Jable Name: I model

Database:

I c:\proect book\aLito store dbc

Table Properties..

Table

Name

TiJpe

Index

Width DecimalNULL

keiJ model name mode! keiJ firm swept volume

Cancel

quantitiJ drunf1

capacitiJ torgue

Integer 4

Character 20

Integer 4

Numeric- Э V

Numeric 3 0

Numeric. 5 } V

Numeric 5 1 т Delete

Insert

pField Properties ( quantiti) drum ]

Validation R ule: quantitiii drum=> 1

Validation Text: [ Количество цилнидро

Default Value:

Caption: I Кол-во цилиндров

iield Comment:

c:\project book\model.dbf

Records: 37 Fields: 20 Length:

Рис. 6.4. Задание правил проверки и сообщения об ошибке в Конструкторе таблиц

Следующий программный код вводит для таблицы Model правило проверки, требующее, чтобы значения, вводимые в поле quantity drum, были не меньше единицы:

ALTER TABLE Model ;

ALTER COLUMN quantity drum SET CHECK quantity drum >> =

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

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

Для задания сообщения о нарушении правил проверки полей в Конструкторе таблиц введите сообщение в поле ввода Validation Text в группе Field Properties (рис.6.4) или используйте необязательный параметр ERROR в выражении CHECK в команде CREATE TABLE или ALTER TABLE.

Следующий фрагмент программы вводит для таблицы Model правило проверки, требующее, чтобы значения, вводимые в поле quantity drum, были не меньше единицы, а также определяет сообщение об ошибке:

ALTER TABLE Model ;

ALTER COLUMN quantity drum SET CHECK quantity drum >>= 1 ; ERROR Количество цилиндров должно быть больше или равно 1

Если пользователь попытается ввести значение меньше 1, Visual FoxPro выведет диалоговое окно с заданным сообщением об ошибке и неверное значение будет отвергнуто (рис. 6.5). Чтобы задать собственное сообщение об ошибке, можно использовать и выражение SET CHECK в команде ALTER TABLE с необязательным параметром ERROR.



Наннвнованне мояеян Рабочий объен (кдб см К-дяДО щнлицдрп8 Мощность [в с)[Унн

Grand Rix 14

ЭП1 Turbo jlGBoHfif Range ftoyer 4.6 Safrane 3.0 FiJjirg Spur 6.75 Cordoba i.a

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, в котором запоминаются индексные ключи.



1 ... 49 50 51 [ 52 ] 53 54 55 ... 147

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика