« Поставить закладку » « Сделать стартовой »

« Форумы » « Блоги » « Статьи » « Новости » « Файлы » « Realcoding IRC » « Site map » « Поиск »


Главная Главная
Анонсы Анонсы
Форумы Форумы
Каталог Каталог
Поиск Поиск
Опросы Опросы
Книжный магазин Книжный магазин
Реклама на сайте
Публикации Публикации
Партнеры Партнеры
Карта Карта сайта
Рассылки Рассылки
RSS экспорт
Настройки Настройки
О нас пишут О нас пишут
Контакты Контакты
Гостевая книга Гостевая книга


ПнВтСрЧтПтСбВс
      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  
    Популярное
MICROSOFT DYNAMICS: «Эффективное управление бизнес-процессами в инвестиционно-строительных компаниях: отраслевое решение КОРУС|Строительство на базе ERP-системы Microsoft Dynamics NAV».

HyperText Transfer Protocol - протокол обмена WWW - серверов

Функция AccessResource

Использование диалоговых окон

Измотай нервы врагу ближнему!!!

Использование компонента TWebBrowser

Использование ActiveX-компонентов в форме

Оптимизация для поисковых систем страниц с JavaScript и таблицами стилей

Новые формы HTML5

Cокеты и особенности их реализации в библиотеке wxWidgets




    Архив файлов



    Сообщества

    Документация

    Кто на сайте
Вы не зарегистрированы.
Имя:

Пароль:

Запомнить

Регистрация позволит Вам пользоваться дополнительными сервисами.
Сейчас на сайте:
Гостей: 174
Пользователей: 0

Статьи:: Базы данных :: Microsoft FoxPro :: Условия достоверности, хранимые процедуры, триггеры, представления данных :: Использование триггеров и хранимых процедур



отправить ссылку другу версия для печати  Обсудить на форуме

Использование триггеров и хранимых процедур

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



Определение значения поля при добавлении новой записи

Рассмотрим следующий пример. Чтобы создать для таблицы customer первичный ключ, в таблицу было добавлено поле, содержащее код клиента. Информация в данное поле должна заноситься программно, чтобы не нарушалась уникальность ключа. Для формирования и записи в таблицу кода клиента при добавлении новой записи создадим хранимую процедуру GetAutoNewNum.

  1. Откройте окно проекта sales.
  2. Создайте в базе данных sales таблицу Records, которая будет использоваться для хранения последних введенных значений кода. Данная таблица содержит два поля. Первое поле предназначено для ввода наименования таблицы, второе — для указания последнего введенного числового кода в данную таблицу. При вызове хранимой процедуры значение второго поля указанной таблицы увеличивается на единицу, и процедура возвращает новое значение кода. Введите в созданную таблицу название таблицы Customer и число, указывающее количество записей, содержащихся в ней.
  3. Выберите в окне проекта таблицу customer и нажмите кнопку Modify (Модифицировать).
  4. Для определения свойств поля, содержащего код клиента, перейдите на вкладку Fields (Поля).
  5. В поле ввода Default value (Значение по умолчанию) области Field validation (Проверка правильности ввода) задайте вызов функции GetAutoNewNum о , введя Getautonewnum("'Customer ") (рис. 14.4).
  6. Нажмите кнопку ОК для закрытия конструктора таблицы.
  7. Теперь необходимо определить функцию 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

gl14-4.jpg

Рис. 14.4. Задание вызова хранимой процедуры

Проверка удовлетворения введенных значений заданному условию

В данном примере определим условие проверки достоверности ввода данных для таблицы ordsaied, содержащей информацию о заказе. Например, при формировании накладной отпуска товара в кредит необходимо сравнивать итоговую сумму заказываемых товаров с максимально допустимым кредитом для данного клиента, содержащимся в таблице customer. Проверку будем осуществлять при вводе каждой позиции заказа.

  1. Откройте окно проекта sales.
  2. Выберите в окне проекта таблицу ordsaied и нажмите кнопку Modify (Модифицировать).
  3. Для определения свойств таблицы перейдите на вкладку Table (Таблица).
  4. В поле ввода Rule (Условие) области Record validation (Проверка правильности ввода записи) задайте вызов функции checkMaxCredit о, которая сравнивает итоговую сумму заказа с максимально допустимым кредитом клиента.
  5. В поле Message (Сообщение) области Record validation введите текст сообщения (рис. 14.5) "Вы превысили допустимую сумму кредита клиента".
gl14-5.jpg

Рис. 14.5. Определение условия достоверности данных

  1. Определим функцию CheckMaxCredit как свойство базы данных, поэтому создадим ее в виде хранимой процедуры.

Для создания хранимой процедуры 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:

  1. Откройте окно проекта sales.
  2. Выберите таблицу customer, содержащую список товаров, и нажмите кнопку Modify (Модифицировать).
  3. Для определения свойств таблицы перейдите на вкладку Table (Таблица) конструктора таблиц.
  4. В поле ввода Insert trigger (Триггер добавления) задайте вызов функции AddNewCustomer о, которая добавляет новую запись в таблицу Newcustomer.
  5. Для добавления новой хранимой процедуры AddNewCustomer откройте окно редактирования хранимых процедур и добавьте в него следующий текст:

procedure AddNewCustomer

nCurCdCustomer= icdCustomer

SELECT NewCustomer

APPEND BLANK

REPLACE icdCustomer WITH nCurCdCustomer

SELECT NewCustomer

RETURN .T.





{BLOCK|article|lastarticle||non.tpl}

Цитата дня (все,добавить):

Портал фрилансеров

работа на дому


    Рубрикатор

Программирование

C/С++
Обучение
Windows API
XAML
Моделирование
Паттерны
Visual Basic 7 .NET
WxWidgets
Функции WinApi
Функции С++
Разработка под Mac OS
Eiffel
Visual Studio 2008
UI дизайн
Алгоритмы
Конкурсные статьи
Turbo Pascal
Visual Studio
CASE-средства
Visual Studio 2005
Без VCL
Delphi
Тех. документация
Тестирование
Software Testing
ООП
TCP/IP
Google Android
Windows Installer
.NET Framework
Драйвера
C# C Sharp
Справка
Проектирование
Информ. системы
Visual Basic
Assembler
Оптимизация кода
Gtk+
Компоненты
Реинжиниринг
Управление проектами
Extreeme programming
Lotus Notes
Алгебраическое проектирование


Интернет технологии

PHP
Perl
ASP
WAP
Cookies
SSI
CGI
Web Servers
VB Script
DNS
CSS
XML
Html
Java Script
Java2ME
Firewall
Flash
.htaccess
Apache
VRML
Протоколы
Поисковые системы
Технология JAVA
Учебник по PHP
Учебник по JavaScript
Учебник по XML
Java Q&A
AJAX
DHTML
XHTML
Dreamweaver
Web 2.0
Python
Вебмастеру
Cisco
Ruby on Rails
Silverlight

Базы данных

Access
InterBase
MySQL
Oracle
ADO .NET
Основы SQL
Учебник по Access 2002
MS
Microsoft FoxPro
Доступ к данным
XML в MS SQL Server 2000
ODBC и MyODBC
Обучение
Caché
DB2
PostgresSQL
Sybase
Теория
Хранилища данных
Безопасность
Реляционные данные
MySQL и mSQL

Остальное:

Разное
Обзоры книг
Безопасность
Графика и дизайн
Юмор
Linux
Фракталы
Microsoft Axapta
Многоядерность
Сети
Microsoft Office
Работа
MS-DOS
Криптография
Графика и игроделание
Новости SDK
Системы защиты
Учебник по AutoCad
CVS
Windows XP
Windows Server 2003
Windows Vista
Windows 7
Мероприятия