В реляционных базах данных, к которым относится и Visual FoxPro, для управления данными могут использоваться не только прикладные програм мы, но и непосредственно сервер базы данных. Такая возможность реал ту ется с помощью условий достоверности ввода данных, триггеров и храни мых процедур, которые являются неотъемлемой частью базы данных.
Удобным средством просмотра хранящейся в базе данных информации я и ляются представления данных, которые содержат результат выборки из о.пнш или нескольких таблиц, удовлетворяющих заданному условию. Предстан кния данных имеют много общего с запросами и таблицами. Так же, как и для запросов, вы можете связывать несколько таблиц, указывать отображаемые поля, задавать условие выборки. Просмотр представления данных orv ществляется аналогично просмотру таблицы Visual FoxPro.
Условия достоверности ввода данных на уровне записей
Условия достоверности позволяют контролировать ввод данных среде там и сервера на уровне записей и полей таблицы. В первом случае условие опрг деляется в окне ввода свойств таблицы, а во втором — в окне свойств и<> ш таблицы. Проверка на уровне записи обычно используется, если необходима проверка при добавлении или удалении записи, а также, если условие про верки изменения записи требует анализа более одного поля.
При определении условий достоверности ввода данных используются трипе ры и хранимые процедуры. Триггеры задают действия, выполняемые прибавлении, удалении или изменении записей таблицы. Хранимые процедуры cо держат наиболее часто используемые процедуры, выполняемые сервером (и нл данных. Если вы определили условия достоверности ввода данных, их при верка осуществляется независимо от способа изменения данных в таблице
Для определения свойств таблицы откройте окно конструктора для выбранной таблицы и перейдите на вкладку Table (Таблица) (рис. 14.1).
Рис. 14.1. Определение свойств таблицы
Для определения достоверности ввода данных могут использоваться триггеры добавления и изменения и поля ввода Rule (Условие) и Message (Сообщение) области Record validation (Проверка правильности ввода записей). В поле Rule (Условие) вводится логическое выражение, которое может содержать вызов хранимой процедуры. Если значение этого выражения равно True (Истина), то считается, что введены допустимые данные и разрешается переход на другую запись или закрытие таблицы. В противном случае выводится сообщение об ошибке, которое было задано в поле Message (Сообщение).
В Visual FoxPro для таблиц, входящих в состав базы данных, вы можете определить триггеры, приведенные в табл. 14.1.
Таблица 14.1. Триггеры
Триггер | Описание |
Insert (Вставить) | Определяет действия, которые будут выполняться после добавления новой записи в таблицу |
Update (Обновить) | Определяет действия, которые будут выполняться после изменения записи таблицы |
Delete (Удалить) | Определяет действия, которые будут выполняться после удаления записи из таблицы |
Для определения триггеров введите в поля ввода Insert trigger (Вставить триггер), Update trigger (Обновить триггер) или Delete trigger (Удалить триггер) вкладки Table (Таблица) окна конструктора выбранной таблицы операторы сравнения, вызов хранимой процедуры или любое логическое выражение. Если результат вычисления выражения равен True (Истина), то считается, что введены допустимые значения. В противном случае сохранения введенных данных не происходит и формируется сообщение об ошибке. При использовании хранимых процедур вы сможете не только проверить условие достоверности ввода данных, но и задать действия, выполняемые при добавлении, удалении и изменении данных.
Вызов триггера Delete (Удалить) осуществляется:
Вызов триггера insert (Вставить) осуществляется в следующих случаях:
Триггер update (Обновить) вызывается, когда:
При использовании триггеров необходимо учитывать ограничения, имеющиеся в Visual FoxPro.
Для удаления триггера в окне конструктора перейдите на вкладку Table (Таблица) и очистите поле ввода выражения для триггера или используйте Команду DELETE TRIGGER.
Для создания хранимой процедуры выполните следующие действия:
Рис. 14.2. Для создания хранимой процедуры предназначена группа Stored Procedures окна проекта
Рис. 14.3. Окно редактирования хранимых процедур
Предупреждение
Редактирование или удаление хранимых процедур, которые Visual FoxPro создал автоматически при определении условия целостности данных, могут привести к непредсказуемым последствиям.
Для редактирования хранимых процедур в Visual FoxPro вы можете использовать команду MODIFY PROCEDURE, которая открывает окно редактирования хранимых процедур текущей базы данных.
Для удаления хранимой процедуры необходимо в окне редактирования выделить текст удаляемой процедуры и нажать клавишу <Delete> или в окне конструктора проекта установить курсор на ее наименование и выполнить команду Remove (Удалить) окна проекта.
Использование триггеров и хранимых процедур
Рассмотрим несколько примеров использования триггеров и хранимых процедур для определения условия достоверности ввода данных и начальных значений полей таблицы.
Определение значения поля при добавлении новой записи
Рассмотрим следующий пример. Чтобы создать для таблицы customer первичный ключ, в таблицу было добавлено поле, содержащее код клиента. Информация в данное поле должна заноситься программно, чтобы не нарушалась уникальность ключа. Для формирования и записи в таблицу кода клиента при добавлении новой записи создадим хранимую процедуру GetAutoNewNum.
FUNCTION GetAutoNewNum
LPARAMETERS cNameAliasGANN
LOCAL nDefaultValueGANN
IF TYPE("cNameAliasGANN")="L"
= GetMessage ("Нужно ввести имя таблицы для определения начального
значения в таблице"+ALIAS()+"!",48,"Функция GetAutoNewNum")
RETURN 1
ENDIF
cNameAliasGANN=ALLTRIM (UPPER (cNameAliasGANN) )
DO OpenTable WITH "SALES!RECORDS", 1
IF !SEEK{cNameAliasGANN)
APPEND BLANK
REPLACE NameOfTable WITH cNameAliasGANN
REPLACE ColRecordsInTable WITH 1
ELSE
REPLACE ColRecordsInTable WITH ColRecordsInTable+1
ENDIF
nDefaultValueGANN=ColRecords!nTable
SELECT (cNameAliasGANN)
RETURN nDefaultValueGANN
Рис. 14.4. Задание вызова хранимой процедуры
Проверка удовлетворения введенных значений заданному условию
В данном примере определим условие проверки достоверности ввода данных для таблицы ordsaied, содержащей информацию о заказе. Например, при формировании накладной отпуска товара в кредит необходимо сравнивать итоговую сумму заказываемых товаров с максимально допустимым кредитом для данного клиента, содержащимся в таблице customer. Проверку будем осуществлять при вводе каждой позиции заказа.
Рис. 14.5. Определение условия достоверности данных
Для создания хранимой процедуры CheckMaxCredit в окне редактирования хранимых процедур, которое содержит ранее созданные программы, введите следующий текст:
procedure CheckMaxCredit
nCdOrder=Ordsaled.icdOrder && номер текущего заказа
* вычисляем сумму всех введенных позиций заказа
SELECT SUM(Ordsaied.nQuant*Ordsaled.nUnitPrice);
FROM Ordsalem, Ordsaied;
WHERE Ordsalem.icdOrder = Ordsaied.icdOrder;
AND Ordsaied.icdOrder=nCdOrder;
INTO ARRAY nSum
* определяем максимальный кредит клиента из таблицы Customer
SELECT Customer
SEEK Ordsalem.icdCustomer
* если запись о данном покупателе в таблице Customer есть, возвращаем
* результат сравнения суммы заказа с максимальным кредитом
IF FOUND( )
RETURN nSum(l) < CUSTOMER.yCreditLimit
ELSE
RETURN .F.
ENDIF
RETURN
Действия, выполняемые при добавлении новых записей
Триггеры позволяют не только проверять условие достоверности ввода данных на уровне записей, но и выполнять требуемые действия при добавлении, удалении и изменении записей. Рассмотрим один из примеров использования триггера insert.
В некоторых случаях полезно иметь таблицу, в которой содержится список новых покупателей, которые обратились в вашу фирму за последний месяц. Данная таблица очищается в начале каждого месяца и может использоваться для рассылки рекламной информации новым покупателям. Для хранения списка новых покупателей используется таблица Newcustomer.
В данном примере определим триггер insert для таблицы customer:
procedure AddNewCustomer
nCurCdCustomer= icdCustomer
SELECT NewCustomer
APPEND BLANK
REPLACE icdCustomer WITH nCurCdCustomer
SELECT NewCustomer
RETURN .T.
Условия достоверности ввода данных на уровне поля таблицы
Для определения условия достоверности ввода данных на уровне поля таблицы используется область Field validation (Проверка правильности ввода) вкладки Fields (Поля) окна конструктора таблиц. В поле Rule (Условие) задается логическое выражение, а в поле Message (Сообщение) — сообщение, отображаемое на экране, если логическое выражение возвращает значение False (Ложь).
Определим условие достоверности данных для поля nquant, содержащего количество купленного товара, таблицы ordsaied. При вводе количества товара необходимо автоматически проверять его фактическое количество на складе.
Для определения данного условия достоверности данных выполните следующие действия:
procedure CheckQuant nCdGoods = Ordsaied.iCdGoods
* определяем фактическое количество товара SELECT nFactQuant;
FROM Goods;
WHERE iCdGoods = nCdGoods;
INTO ARRAY nQuant
* сравниваем заказанное количество с имеющимся на складе
RETURN Ordsaied.nQuant(1) <= nQuant(1)
Рис. 14.6. Определение условия достоверности для поля nquant
Использование представлений данных
Таблицы базы данных предназначены для хранения данных, а для просмотра данных предпочтительнее использовать представления данных, которые позволяют объединять связанные таблицы, выбирать интересующие вас поля таблиц или объединить несколько полей в одно поле, вычислять итоговые значения, определять новые имена для выбираемых полей таблицы и задавать условие выборки данных. После создания представления данных вы можете использовать его как обычную таблицу в формах, отчетах и при создании запросов.
Представления являются незаменимым средством для ограничения доступа пользователей к отдельным записям таблиц. В этом случае вся работа с базой данных осуществляется через представления данных.
Замечание
Описание представления данных хранится в словаре базы данных, поэтому для их просмотра вы должны предварительно открыть базу данных.
Для создания представления используется конструктор представлений данных. Существует несколько альтернативных способов его вызова.
Замечание
При любом из вариантов вызова для создания представления данных вы можете воспользоваться услугами мастера, который аналогичен мастеру создания запросов.
При вызове конструктора представлений открывается диалоговое окно Add Table and View (Добавить таблицу или представление данных), позволяющее разместить в конструкторе таблицы и созданные ранее представления данных. Для отображения представлений в этом диалоговом окне необходимо в области Select (Выбор) установить опцию Views (Представления данных). Выбрав необходимую таблицу или представление данных, перенесите их в конструктор, нажав кнопку Add (Добавить). Сформировав список таблиц, нажмите кнопку Close (Закрыть) для закрытия диалогового окна Add Table and View (Добавить таблицу или представление). Выбранные таблицы размещаются в открывшемся на экране окне конструктора представлений данных (рис. 14.7).
Окно конструктора представлений данных похоже на окно конструктора запросов и отличается от последнего некоторыми дополнительно предоставляемыми функциями.
Для формирования представления данных вы можете использовать команды меню Query (Запрос) и кнопки на панели инструментов View Designer (Конструктор представления данных). Функции кнопок панели инструментов View Designer описаны в табл. 14.2.
Рис. 14.7. Окно конструктора представлений данных
Таблица 14.2. Назначение кнопок панели инструментов View Designer
Кнопка | Название | Назначение |
Add Table (Добавить таблицу) | Добавляет в представление новую таблицу или представление данных | |
Remove Table (Удалить таблицу) | Удаляет выбранную таблицу из запроса | |
Add Join (Добавить объединение) |
Открывает диалоговое окно Join Condition
(Условие объединения) для задания условия объединения таблиц |
|
Show the SQL windows
(Показать SQL-оператор) |
Открывает диалоговое окно, в котором отображается SQL-оператор, соответствующий созданному представлению данных | |
Maximize the table view (Раскрыть панель представления таблиц) | Раскрывает на весь экран панель отображения используемых в представлении таблиц. Повторное нажатие на эту кнопку возвращает панели первоначальный размер |
Сохранение созданного представления данных
Сформированное в окне конструктора представление данных можно сохранить, выполнив следующие действия:
Замечание
Обратите внимание, что в отличие от сохранения запроса, вам не требуется указывать место расположения представления, т. к. описание представления хранится в самой базе данных.
Рис. 14.8. Задание имени представления данных
Для открытия сохраненного представления данных из окна проекта необходимо установить на него курсор и нажать кнопку Modify (Модифицировать).
После задания в окне конструктора представлений условий для выбора записей и указания результирующих полей, вы можете просмотреть результаты выполнения представления данных.
Для этого выполните одно из следующих действий.
На экране появится сформированное представление данных.
Для просмотра созданного представления данных вы можете также использовать окно проекта или окно Data Session (Окно данных). Чтобы просмотреть представления данных в окне проекта, достаточно установить на него курсор и нажать кнопку Browse (Обзор). Если вы просматриваете представление в окне Data Session (Окно данных), откройте его как обычную таблицу и нажмите кнопку Browse (Обзор).
Просмотр объема продаж товаров клиентам
Рассмотрим пример создания представления данных, которое содержит итоговую сумму покупок клиентов. Представление данных будет содержать наименование предприятия, наименование товара и итоговую сумму покупок клиентом каждого товара.
Если в конструкторе базы данных вы определили постоянные связи между таблицами, то в окне конструктора они установятся автоматически.
SUM(Ordsaled.nQuant * Ordsaled.nUnitPrice)
Вы можете просмотреть созданное представление данных в окне Data Session (Окно данных). Для этого выполните следующие действия:
Рис. 14.9. Выбор представления данных
Замечание
При открытии представления данных в окне Data Session (Окно данных) показывается не только выбранное представление, но и все таблицы, используемые при его создании (рис, 14.10).
Рис. 14.10. Окно Data Session после открытия представления данных Sumcust
Совет
Для открытия представления данных вы можете также в командном окне или в программе воспользоваться командой USE.
Параметры представления данных
В Visual FoxPro при создании представления данных вы можете задать параметры представления. Значения этих параметров будут запрашиваться при открытии представления. Например, в предыдущем примере мы создали представление данных, которое содержит итоговые объемы продаж товаров. Использование параметров позволит вам выбирать не все продажи, а объем продаж за определенный интервал времени, продажи конкретного товара или покупки определенного клиента.
При открытии представления, для которого заданы параметры, запрашиваются значения заданных параметров, и выборка данных осуществляется с учетом введенных значений. Для определения параметров используется команда View Parameters (Параметры представления данных) из меню Query (Запрос).
Добавим в созданное в предыдущем примере представление данных параметр, указывающий дату, для которой будет осуществляться выборка.
Замечание
Вопросительный знак перед именем параметра является признаком использования параметра.
Замечание
Если при создании представления данных вы задали несколько параметров, то для ввода значения каждого параметра будет открываться отдельное окно.
Замечание
Диалоговое окно View Parameter (Параметры представления данных) для ввода значения параметра рекомендуется использовать только при отладке представления. Вы можете определить переменные, наименования которых совпадают с именем параметра, и присвоить им требуемые значения в программе или в форме. В этом случае при открытии представления параметры запрашиваться не будут.
В Visual FoxPro представления данных могут использоваться не только для просмотра результатов выборки данных, но и для редактирования таблиц, которые использовались при его создании. Создавая представления данных, вы можете указать признак редактирования выбираемых полей базовых таблиц. Таким образом, вы можете задать список полей для просмотра и редактирования. Например, при изменении фамилии, имени и отчества клиента вы должны видеть на экране наименование фирмы, фамилию, имя и отчество клиента, но можете редактировать только поля, содержащие фамилию, имя и отчество.
Для определения таблиц и полей, которые будут изменяться при модификации данных с помощью представления, используется вкладка Update Criteria (Критерий обновления).
Перечень всех таблиц, поля которых используются для создания представления, приведен в раскрывающемся списке Table (Таблица). При выборе таблицы из этого списка в области Field name (Имя таблицы) отображается список выбранных полей. Для каждого поля вы можете определить признаки ключевого поля и разрешения модификации, которые устанавливаются с помощью флажка в столбцах, заголовки которых содержат изображение ключа и карандаша соответственно.
Кнопка Reset Key (Сброс ключа) устанавливает исходное состояние флажков разрешения модификации и ключевых полей. При этом сбрасываются все флажки в столбце разрешения модификации, а флажки в столбце признака ключевых полей устанавливаются только для тех полей, которые являются первичными ключами.
Кнопка Update All (Обновить все) устанавливает флажки в столбце разрешения модификации для всех полей, кроме ключевых.
Замечание
Все выбранные на вкладке Update Criteria (Критерий обновления) параметры действительны только в том случае, если установлен флажок Send SQL updates (Отправить SQL-обновление).
Установка редактируемых полей
Рассмотрим последовательность действий при создании представления данных, позволяющего редактировать информацию в полях, содержащих фамилию, имя и отчество клиента.
Вещество и поле не есть что-то отдельное от эфира, также как и человеческое тело не есть что-то отдельное от атомов и молекул его составляющих. Оно и есть эти атомы и молекулы, собранные в определенном порядке. Также и вещество не есть что-то отдельное от элементарных частиц, а оно состоит из них как базовой материи. Также и элементарные частицы состоят из частиц эфира как базовой материи нижнего уровня. Таким образом, всё, что есть во вселенной - это есть эфир. Эфира 100%. Из него состоят элементарные частицы, а из них всё остальное. Подробнее читайте в FAQ по эфирной физике.