Разработка информационной системы "Библиотека" с использованием клиент-серверной технологии

Разработка базы данных для информационной системы "Библиотека". Системный анализ, инфологическое, даталогическое и физическое проектирование. Программирование бизнес-логики, разработка клиентского приложения. Создание web-приложения, web-доступ.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 15.09.2014
Размер файла 3,3 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

Федеральное агентство по образованию

Белгородский государственный университет

Факультет компьютерных наук и телекоммуникаций

Кафедра математического и программного обеспечения информационных систем

ПОЯСНИТЕЛЬНАЯ ЗАПИСКА

К КУРСОВОЙ РАБОТЕ

по дисциплине: "Базы данных".

на тему: "Разработка информационной системы "Библиотека" с использованием клиент-серверной технологии".

Студент: Н.Ю. Калашникова

Руководитель курсовой работы: В.М. Михелев

г. Белгород 2009

План

  • Введение
  • 1. СУБД Firebird
  • 2. Разработка базы данных для ИС "Библиотека"
  • 2.1 Системный анализ
  • 2.2 Инфологическое проектирование
  • 2.3 Даталогическое проектирование
  • 2.4 Физическое проектирование
  • 2.5 Программирование бизнес-логики
  • 3. Разработка клиентского приложения
  • 4. Создание Web приложения. Web-доступ
  • Заключение
  • Список используемых источников
  • Приложения

Введение

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

Сама база данных содержит шесть таблиц. При помощи приложения и web интерфейса пользователь может просматривать записи в БД и осуществлять все необхидимые действия для ведения базы.

Проект состоит из теоретической и практической частей. В первой части рассматривается реляционная система управления базами данных Firebird, во второй детально описываются этапы проектирования информационной системы: разработка базы данных, создание клиентского приложения, создание веб-приложения.

Целью данной курсовой работы является:

· Углубление теоретических и практических знаний в области баз данных и систем управления базами данных;

К задачам курсовой работы можно отнести следующее:

· Разработка базы данных в РСУБД Firebird;

· Создание приложения, основанного на клиент-серверной технологии;

· Создание веб-приложения.

Курсовая работа написана на 57 листах. Из них 28 листа - основной текст курсовой работы, 29 листов содержат полный код программ и вынесены в приложения. Курсовая работа содержит 15 рисунков, 3 таблицы.

информационная система приложение клиентский

1. СУБД Firebird

Общие сведения

Firebird является программным обеспечением для платформы клиент-сервер, разработанным специально для использования в локальных и глобальных компьютерных сетях. Соответственно, его ядро состоит из двух основных программ: сервер базы данных, который выполняется на сетевом хост-компьютере, и клиентская библиотека, через которую пользователи с удаленных рабочих станций соединяются и общаются с базой данных, управляемой сервером.

Firebird - серьезный программный продукт, созданный для установки в малых и больших сетях, он также обладает некоторыми полезными возможностями для автономных конфигураций. Его небольшой размер дает возможность одиночным разработчикам легко выполнять большие производственные разработки в домашнем офисе.

Firebird - это мощная, компактная реляционная система управления базами данных (РСУБД) с архитектурой клиент-сервер. Она может выполняться на разнообразных серверных и клиентских платформах, включая Windows, Linux и на некоторых других платформах UNIX, включая FreeBSD и Mac OS X. Это РСУБД промышленного применения, чьи возможности имеют высокий уровень соответствия стандартам SQL, при этом она реализует некоторые мощные расширения языка процедурного программирования конкретного производителя.

Опишем функции которые должны выполнять будущие приложения (Windows и Web): "Магазин строительных материалов"

Windows - приложение:

· Программа должна быть легка и удобна в использовании

· Иметь приятный интерфейс

· Содержать в себе как можно полную информацию об учебных заведениях

· Функция удаления записей

· Функция сортировки

· Функция добавления записи

· Фильтрация записей

· Поиск записей

· Отчеты на основе информации в БД

Web - приложение:

· Сайт должен быть легок и удобен в использовании

· Иметь приятный интерфейс

· Содержать в себе как можно полную информацию о товарах

· Позволять пользователю заносить дополнительную информацию, а так же удалять и изменять ошибочную информацию об учебных заведениях

2. Разработка базы данных для ИС "Библиотека"

2.1 Системный анализ

БД представляет структуру и совокупность организации, отношений, правил и процессов. Перед проектироваем структур и правил базы данных, необходимо провести системный анализ проблемы. Следует особенно подчеркнуть важность скрупулезного описания и анализа. Анализ логических данных является итеративным процессом детализации и поиска сути во множестве входных данных, задач и выходных данных, которые должны быть реализованы в базе данных.

В рамках данного курсового проекта разрабатывается база данных "Библиотека", которая станет основой для будущей информационной системы. Первым этапом проектирования БД является системный анализ, в ходе которого были выделены следующие ключевые объекты предметной области: читатель, книги, выдача книг. Между данными объектами существуют реальные связи, обеспечивающие полноту и целостность данных. Планируется, что в данной системе будут храниться все необходимые данные о структуре библиотеки и собственно о книгах.

После выполнения системного анализа можно приступать к следующему пункту проектирования - инфологическому проектированию.

2.2 Инфологическое проектирование

Для хранения информации в базе данных, нам необходимо разработать структуру БД. Определить какие таблицы (сущности) она в себя будет включать, какие поля (атрибуты) будут включать в себя таблицы. Для логического проектирования БД, мы будем использовать CASE средство ERwin. Цель инфологического моделирования - обеспечение наиболее естественных для человека способов сбора и представления той информации, которую предполагается хранить в создаваемой базе данных. Поэтому инфологическую модель данных пытаются строить по аналогии с естественным языком (последний не может быть использован в чистом виде из-за сложности компьютерной обработки текстов и неоднозначности любого естественного языка). Основными конструктивными элементами инфологических моделей являются сущности, связи между ними и их свойства. Стандартом при инфологическом моделировании БД, является модель "сущность - связь", ER - модель. Основой ER модели служат базовые понятия, соответствующие некоторому классу однотипных объектов. Сущность имеет уникальное имя в пределах моделированной системы, также в системе должны быть ключи. Объект которому соответствует понятие сущность имеет свой набор атрибутов - это характеристики определяющие свойства данной сущности.

Разрабатывая данную базу данных, можно выделить следующие сущности: типы товаров, товары, клиенты, производители, продавци, сделки. Каждая сущностей имеет собственные атрибуты. На основе этих данных строим следующую инфологическую модель (рис 1).

Рисунок 1. Инфологическая модель БД

Рисунок 2. Физическая модель БД

Получившаяся система является корректной т.к. содержит не избыточную информацию и приведена к 3 нормальной форме.

2.3 Даталогическое проектирование

Даталогическое проектирование позволяет разработать схемы БД, которые адекватно моделируют предметные области объектов и отражают связи с ними. Важной частью даталогического проектирования является нормализация разделение групп элементов данных с целью установления основных отношений, уменьшения избыточности и объединения связанных элементов данных в структуры, которыми можно эффективно манипулировать. Использование ненормализованных БД может привести к нарушению целостность базы данных.

Целью данного этапа проектирования БД является приведение базы данных "Библиотека" к третьей нормальной форме. Для того чтобы это сделать, необходимо последовательно привести базу данных от первой нормальной формы к третьей. Сначала приведем БД к первой нормальной форме, делая значения всех атрибутов во всех столбцах атомарными. Далее определяем первичные ключи и зависящие от них не ключевые поля. Затем создаем отдельную таблицу для каждого первичного ключа и перемещаем в неё этот ключ вместе с зависимыми не ключевыми полями. Теперь база данных находится во второй нормальной форме. Последним, что необходимо сделать для перевода БД в третью нормальную форму - определение зависимых полей и создание новой таблицы для каждого из таких полей. Тем самым, все поля в таблицах, приведенных к третьей нормальной форме, будут независимыми.

Выполнив операции по нормализации БД, приступаем к выполнению физического проектирования базы данных.

2.4 Физическое проектирование

После даталогического проектирования запускаем приложение администрирования баз данных Firebird IBExpert и, используя функции заложенные в этом программном средстве, создаем и регистрируем в системе новую базу данных Firebird "Библиотека". Создание базы данных инсталлирует инфраструктуру, необходимую для начала создания объектов. Первичным объектом для постоянного хранения данных в базе данных является таблица.

Приступая к созданию таблиц, предполагается, что уже выполнен анализ данных и подготовлена модель, а также имеется совершенно четкое представление о структурах главных таблиц и их взаимоотношениях. Исходя из данных, полученных при выполнении инфологического и даталогического проектирования, спроектировал таблицы и поля базы данных. Определяем ключевые поля и поля Not null (см. Таблица 1).

В данной базе данных для определения типов данных столбцов таблиц используются домены (см. Таблица 2). Домены в Firebird схожи с концепцией "типы данных, определенные пользователем". Хотя и невозможно создать новый тип данных, но можно задать набор атрибутов с одним из существующих типов данных и присвоить ему идентификатор домена. После этого можно использовать домен как параметр типа данных для определения столбцов любой таблицы. Преимущества инкапсуляции определения данных очевидны, так как в Firebird отсутствует логический, денежный и некоторые другие типы данных, но, используя домены, можно создать замену этим типам данных.

Таблица 1. ER - модель БД.

Имя таблицы

Имя поля

Тип

Длина

Десятичная часть

Имя домена

bibliotekor

Nomer_bibliotekorya

SMALLINT

D_INDEXTYPE

Nomer_otdela

SMALLINT

D_INDEXTYPE

Fio_bibliotekorya

VARCHAR

45

D_NAME

chitatel

Nomer_chitatelya

SMALLINT

D_INDEXTYPE

Familiya_4itatelya

VARCHAR

45

D_NAME

Imya_chitatelya

VARCHAR

45

D_NAME

adres

VARCHAR

40

D_ADRES

telefon

VARCHAR

15

D_TEL

Knigi

Nomer_knigi

SMALLINT

D_INDEXTYPE

Nomer_otdela

SMALLINT

D_INDEXTYPE

nazvanie_knigi

VARCHAR

45

D_NAME

kol_vo_stranic

SMALLINT

D_INDEXTYPE

avtor

VARCHAR

45

D_NAME

id

SMALLINT

D_INDEXTYPE

New_table

Nomer_knigi

SMALLINT

D_INDEXTYPE

Nomer_otdela

SMALLINT

D_INDEXTYPE

nazvanie_knigi

VARCHAR

45

D_NAME

kol_vo_stranic

SMALLINT

D_INDEXTYPE

avtor

VARCHAR

45

D_NAME

izmen

VARCHAR

45

D_NAME

data_tr

DATE

D_DATETYPE

otdel_knig

nazvanie_otdela

VARCHAR

45

D_NAME

Nomer_otdela

SMALLINT

D_INDEXTYPE

kol_vo_knig

SMALLINT

D_INDEXTYPE

telefon

VARCHAR

D_TEL

nomer_bibliotekorya

SMALLINT

D_INDEXTYPE

Vida4a_knig

Nomer_zapisi

SMALLINT

D_INDEXTYPE

Nomer_knigi

SMALLINT

D_INDEXTYPE

Nomer_bibliotekorya

SMALLINT

D_INDEXTYPE

Nomer_4itatelya

SMALLINT

D_INDEXTYPE

data_vyda4i_knigi

DATE

D_DATETYPE

data_vozvrata_knigi

DATE

D_DATETYPE

Таблица 2. Список доменов.

Имя домена

Тип

Длинна

Ограничения

D_INDEXTYPE

SMALLINT

VALUE>0

D_NAME

VARCHAR

45

D_ADRES

VARCHAR

40

D_TEL

VARCHAR

15

D_DATETYPE

DATE

VALUE<='TODAY'

Теперь, когда проработаны все теоретические аспекты создания базы данных, можно приступать к программированию доменов и таблиц. Для этого, запустив IBExpert, загружаем SQL редактор и выбираем меню Tools->SQL Editor.

В появившемся окне пишем скрипт для создания домена D_NAME:

CREATE DOMAIN D_NAME AS

VARCHAR (45) CHARACTER SET WIN1251

NOT NULL

COLLATE WIN1251

Подобным образом создал домены D_INDEXTYPE, D_ADRES, D_DATETYPE, D_TEL. (см. Приложение 1).

Создав домены, приступаем к созданию таблиц. Всего в БД будет создано шесть таблиц. Таблицы имеют связи, реализуемые с помощью первичных и вторичных ключевых полей. Кроме связей эти поля также влияют на целостность данных.

Средствами IBExpert создаем таблицу chitatel и указываем ключевые поля, в этой таблице будут храниться данные о типах мебели:

CREATE TABLE CHITATEL (

FAMILIYA_CHITATELYA D_NAME /* D_NAME = VARCHAR (45) NOT NULL */,

IMYA_CHITATELYA D_NAME /* D_NAME = VARCHAR (45) NOT NULL */,

OTCHESTVO D_NAME /* D_NAME = VARCHAR (45) NOT NULL */,

ULICA D_NAME /* D_NAME = VARCHAR (45) NOT NULL */,

NOMER_DOMA D_INDEXTYPE /* D_INDEXTYPE = INTEGER NOT NULL */,

TELEFON D_TEL /* D_TEL = VARCHAR (15) */,

NOMER_CHITATELYA D_INDEXTYPE NOT NULL /* D_INDEXTYPE = INTEGER NOT NULL */

);

-Задание первичного ключа

ALTER TABLE CHITATEL ADD PRIMARY KEY (NOMER_CHITATELYA);

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

-Создание генератора

CREATE GENERATOR GEN_ID_ CHITATEL;

-Создание триггера

CREATE OR ALTER TRIGGER CHITATEL_BI0 FOR CHITATEL

ACTIVE BEFORE INSERT OR UPDATE POSITION 0

AS

begin

IF (NEW. nomer_chitatelya is null) then

NEW. nomer_chitatelya=gen_id (gen_chitatel,1);

end

Подобным образом создаем остальные таблицы. Задаем для этих таблиц ключевые поля, вторичные ключи, разрабатываем генераторы и триггеры (см. Приложение 1).

2.5 Программирование бизнес-логики

В курсовом проекте клиентское приложение для информационной системы "Библиотека" будет придерживаться концепции "тонкого клиента". То есть, вся бизнес - логика должна быть реализована на сервере базы данных Firebird. РСУБД предоставляет широкий выбор вариантов программирования бизнес - логики позволяя написать просмотры, хранимые процедуры, триггеры, исключения. Средствами IBExpert создаем все необходимые просмотры (см. Листинг 1). Далее приступаем к созданию хранимых процедур на ввод, изменение и удаление данных для каждой таблицы. Кроме этого необходимо создать хранимые процедуры на выборку данных для составления отчетов.

В IBExpert загрузил SQL редактор, выбрав меню Tools->SQL Editor. В появившемся окне написал скрипт для создания процедур на ввод, изменение и удаление данных таблицы сhitatel:

-Процедура на удаление данных из таблицы chitatel

CREATE OR ALTER PROCEDURE DEL_CHIT (

n_chitat integer)

as

BEGIN

DELETE FROM chitatel

WHERE (nomer_CHITATELYA =: n_CHITAT);

END^

Затем создаем процедуру на добавление или изменение записи.

CREATE OR ALTER PROCEDURE ADD_CHIT (

familiya varchar (20),

name varchar (15),

otchestvo varchar (15),

ulica varchar (21),

n_doma smallint,

tel varchar (10))

as

begin

INSERT INTO chitatel (chitatel. familiya_chitatelya,chitatel. imya_chitatelya,chitatel. otchestvo,

chitatel. ulica,chitatel. nomer_doma,chitatel. telefon)

VALUES (: familiya,: name,: otchestvo,: ulica,: n_doma,: tel);

suspend;

end^

CREATE OR ALTER PROCEDURE RED_CHITATEL (

familiya varchar (20),

name varchar (10),

otchestvo varchar (14),

ulica varchar (20),

n_doma smallint,

tel varchar (10),

n_chit integer)

as

BEGIN

UPDATE chitatel

SET nomer_chitatelya=: n_chit,

nomer_doma =: n_doma,

familiya_chitatelya =: familiya,

imya_chitatelya =: name,

otchestvo=: otchestvo,

ULICA=: ulica,

telefon=: tel

WHERE (nomer_chitatelya =: n_chit);

when sqlcode - 530 do

exception key_ne_ice;

end^

Полный список хранимых процедур представлен в таблице 3.

Таблица 3. Название и назначение процедур

Название процедуры

Назначение

Add_chit

Добавление записи в таблице читатели

Add_biblio

Добавление записи в таблице библиотекари

Add_vyda4

Добавление записи в таблице выдача книг

Add_otdel

Добавление записи в таблице отделы книг

Add_knig

Добавление записи в таблице книги

Del_chit

Удаление записи в таблице читатели

Del _knig

Удаление записи в таблице книги

Del _otdel

Удаление записи в таблице отделы книг

Del _bibl

Удаление записи в таблице библиотекари

Del _vyda4a

Удаление записи в таблице выдача книг

Red_chitatel

Изменение записи в таблице читатели

Reg _otdel

Изменение записи в таблице отделы книг

Reg _knig

Изменение записи в таблице книги

Reg _bibl

Изменение записи в таблице библиотекари

Reg _vyda4

Изменение записи в таблице выдача книг

3. Разработка клиентского приложения

Часть разработанного интерфейса и выполнение различных действий при работе с БД будем рассматривать на примере таблицы "Читатель" так как, интерфейс остальных таблиц а так же действия над ними практически одинаковые.

1. Выполняем команду File->New->Other и выбираем значок Data Module на вкладке New.

2. В созданный модуль DB переносим компоненты IBDatabase1 и IBTransaction1.

3. Настраиваем свойства DatabaseName, DefaultTransaction для компонента IBDatabase1 и свойство DefaultDatabase для компонента IBTransaction1.

4. В созданный модуль FBDataModule переносим наборы данных TIBQuery. Формируем запросы ко всем главным таблицам, просмотрам, процедурам настроив свойство Query->SQL.

5. В тот же контейнер переносим компонентs TIBDataSource

6. Связываем источники данных с запросами и таблицами в свойстве DataSet.

7. Добавляем в модуль данных компонент IBStoredProc1 (рис.3) для реализации хранимых процедур, настроив свойства Database и Transaction

Рисунок 3. Наполнение модуля DB.

Данный DataModule не будет являться единственным. Приложение будет состоять из множества форм, к которым соответственно будут подключены различные DataModule.

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

8. Переносим на главную форму требуемые компоненты

9. Перетаскиваем на каждую форму необходимое количество компонентов DBGrid, для представления записей таблиц и свойством DataSource соединяем их с источником данных, а заголовки столбцов таблиц переименовываем в соответствующие названия полей.

10. Перетаскиваем необходимое количество других визуальных компонентов: TButton, TLabel, TEdit,

Рисунок 4. Внешний вид приложения и поиск.

16. Далее аналогичным образом создаем остальные формы, подключаем заголовочные файлы и в обработчиках событий кнопок.

17. Добавление реализуем через созданную ранее хранимую процедуру на добавление: ADD_CHIT, для этого поместим на DataModule2 компонент IBStoredProc3 и настроим у него следующие свойства:

DataBase=IBDatabase1; StoredProcName= ADD_CHIT.

Рисунок.5. Форма для таблицы читатели.

Для реализации фильтрации, поместим на форму два компонента Edit (для задания диапазона фильтрации данных) и компонент Button чтобы подать запрос для фильтрации

18. Для генерации отчетов добавляем на главную форму соответствующие кнопки и пишем необходимый код в обработчике событий (см. Приложение 2).

Для формирования отчетов также будут выделены отдельные формы.

Рисунок 6. отчет

19. Командой Run->Run компилируем, собираем и запускаем приложение.

Полный листинг программы представлен в Приложении 2.

4. Создание Web приложения. Web-доступ

Web приложение в технологии "Клиент-Сервер" представляет собой некий интерфейс между пользователем и базой данных, расположенной на сервере и состоящей под управлением какой-либо СУБД. Такие приложения отличаются от приложений Windows тем, что пользователю не требуется наличие никаких установленных дополнительно на компьютере программ, кроме Web-браузера. Все действия, которые требует выполнить такое приложение, выполняются непосредственно на сервере. Кроме того, приложение Windows является уже откомпилированным файлом, а Web-приложение интерпретируются сервером в момент обращения пользователя к данному приложению.

Для создания такого приложения будет использован язык программирования PHP - интерпретируемый, скриптовый язык программирования, созданный для генерации HTML-страниц на Web-сервере и работы с базами данных. А так же язык гипертекстовой разметки HTML для создания интерфейса приложения.

Итак, приложение будет содержать главную интерфейсную страницу с заголовком, меню и частью, куда будет загружаться контент.

Остальные страницы будут полностью написаны на PHP: страницы с добавлением данных в таблицы, удалением данных в таблицы и редактированием данных. Также будет реализован поиск по базе данных.

В результате приложение будет иметь следующую карту страниц:

Рисунок 7. Схема созданного Web-приложения

Листинги Web-приложения представлены в приложении "Созданное Web-приложение".

Доступ к приложению: http://172.23.30.98: 8080/ftp/1406124/apache/index.html

Рисунок 8. Главная страница

Рисунок.9. Таблица Читатели и редактирование

Рисунок.10. Результат редактирования

Рисунок.11. Удаление

Рисунок.12. Результат удаления

Рисунок.13. Поиск

Рисунок.14. Результаты поиска

Рисунок.14. Сортировка

Рисунок.15. Результаты сортировки

Заключение

В результате выполнения курсовой работы нами было создано два клиентских приложения "Библиотека", это Windows и web - приложения. Были достигнуты все поставленные цели и задачи: Углублены теоретические и практические знания в области баз данных и систем управления базами данных. Пользователям предоставляется широкая возможность одновременной работы в обоих приложениях с одной базой данных.

Работа над курсовым проектом позволила приобрести навыки создания информационных систем, основанных на клиент - серверной технологии с использованием РСУБД Firebird. База данных для информационной системы создана в среде РСУБД Firebird и разработана с помощью утилиты IBExpert.

Разработанная информационная система обладает всей необходимой для работы функциональностью и вполне может стать основой в деятельности библиотеки, т.к. web интерфейс является очень удобным приложением для работы с БД.

Список используемых источников

1. А.Я. Архангельский, "Программирование в C++ Builder 6". - М.: "БИНОМ", 2003 г.

2. Бори Х., "FIREBIRD. Руководство разработчика баз данных". - С-Пб.: "БХВ", 2006 г., 2-е издание.

3. Шамис В., "Borland C++ Builder 6.0". - С - Пб.: "Питер", 2005 г.

4. Похомов Б.И. C\C++ и Borland C++ Builder для студента. СПб.: БХВ-Петербург, 2006. - 448с.

5. Хомоненко А.Д., Ададуров С.Е. Работа с базами данных в C++ Builder. - СПб.: БХВ-Петербург, 2006. - 496 с: ил.

6. http://www.ibase.ru

Приложения

Приложение 1. SQL код создания БД

Создание таблиц

Читатель

/*** Tables ***/

/************************************************************/

CREATE TABLE CHITATEL (

FAMILIYA_CHITATELYA D_NAME /* D_NAME = VARCHAR (45) NOT NULL */,

IMYA_CHITATELYA D_NAME /* D_NAME = VARCHAR (45) NOT NULL */,

OTCHESTVO D_NAME /* D_NAME = VARCHAR (45) NOT NULL */,

ULICA D_NAME /* D_NAME = VARCHAR (45) NOT NULL */,

NOMER_DOMA D_INDEXTYPE /* D_INDEXTYPE = INTEGER NOT NULL */,

TELEFON D_TEL /* D_TEL = VARCHAR (15) */,

NOMER_CHITATELYA D_INDEXTYPE NOT NULL /* D_INDEXTYPE = INTEGER NOT NULL */

);

/************************************************************/

/*** Primary Keys ***/

/************************************************************/

ALTER TABLE CHITATEL ADD PRIMARY KEY (NOMER_CHITATELYA);

/***********************************************************/

/*** Indices ***/

/************************************************************/

CREATE INDEX FAMILIYA_CHITATELYA ON CHITATEL (FAMILIYA_CHITATELYA);

CREATE INDEX ULICA ON CHITATEL (ULICA);

/************************************************************/

/*** Triggers for tables ***/

/************************************************************/

/* Trigger: CHITATEL_BI0 */

CREATE OR ALTER TRIGGER CHITATEL_BI0 FOR CHITATEL

ACTIVE BEFORE INSERT OR UPDATE POSITION 0

AS

begin

IF (NEW. nomer_chitatelya is null) then

NEW. nomer_chitatelya=gen_id (gen_chitatel,1);

end

^

SET TERM; ^

/* Fields descriptions */

COMMENT ON COLUMN CHITATEL. NOMER_DOMA IS

'VALUE>0';

/************************************************************/

/*** Privileges ***/

/************************************************************/

Библиотекарь

CREATE TABLE BIBLIOTEKOR (

NOMER_BIBLIOTEKORYA D_INDEXTYPE NOT NULL /* D_INDEXTYPE = INTEGER NOT NULL */,

NOMER_OTDELA D_INDEXTYPE /* D_INDEXTYPE = INTEGER NOT NULL */,

FAMILIYA_BIBLIOTEKORYA D_NAME /* D_NAME = VARCHAR (45) NOT NULL */,

NAME_BIBLIOTEKORYA D_NAME /* D_NAME = VARCHAR (45) NOT NULL */

);

/************************************************************/

/*** Primary Keys ***/

/************************************************************/

ALTER TABLE BIBLIOTEKOR ADD CONSTRAINT PK_BIBLIOTEKOR PRIMARY KEY (NOMER_BIBLIOTEKORYA);

/************************************************************/

/*** Foreign Keys ***/

/************************************************************/

ALTER TABLE BIBLIOTEKOR ADD CONSTRAINT FK_BIBLIOTEKOR_1 FOREIGN KEY (NOMER_OTDELA) REFERENCES OTDEL_KNIG (NOMER_OTDELA);

/**********************************************************/

/*** Indices ***/

/************************************************************/

CREATE INDEX FAM ON BIBLIOTEKOR (FAMILIYA_BIBLIOTEKORYA);

/************************************************************/

/*** Triggers ***/

/************************************************************/

SET TERM ^;

/************************************************************/

/*** Triggers for tables ***/

/***********************************************************/

/* Trigger: BIBLIOTEKOR_BI0 */

CREATE OR ALTER TRIGGER BIBLIOTEKOR_BI0 FOR BIBLIOTEKOR

ACTIVE BEFORE INSERT OR UPDATE POSITION 0

AS

begin

IF (NEW. nomer_bibliotekorya is null) then

NEW. nomer_bibliotekorya=gen_id (gen_bibliotekar,1);

end

^

SET TERM; ^

/* Fields descriptions */

COMMENT ON COLUMN BIBLIOTEKOR. NOMER_BIBLIOTEKORYA IS

'VALUE>0';

COMMENT ON COLUMN BIBLIOTEKOR. NOMER_OTDELA IS

'VALUE>0';

Книги

CREATE TABLE KNIGI (

NOMER_KNIGI D_INDEXTYPE NOT NULL /* D_INDEXTYPE = INTEGER NOT NULL */,

NOMER_OTDELA D_INDEXTYPE /* D_INDEXTYPE = INTEGER NOT NULL */,

NAZVANIE_KNIGI D_NAME /* D_NAME = VARCHAR (45) NOT NULL */,

KOL_VO_STRANIC D_INDEXTYPE /* D_INDEXTYPE = INTEGER NOT NULL */,

AVTOR D_NAME /* D_NAME = VARCHAR (45) NOT NULL */

);

/************************************************************/

/*** Primary Keys ***/

/************************************************************/

ALTER TABLE KNIGI ADD CONSTRAINT PK_KNIGI PRIMARY KEY (NOMER_KNIGI);

/***********************************************************/

/*** Foreign Keys ***/

/************************************************************/

ALTER TABLE KNIGI ADD CONSTRAINT FK_KNIGI_1 FOREIGN KEY (NOMER_OTDELA) REFERENCES OTDEL_KNIG (NOMER_OTDELA);

/************************************************************/

/*** Indices ***/

/************************************************************/

CREATE INDEX "_KNIGA" ON KNIGI (NAZVANIE_KNIGI);

/************************************************************/

/*** Triggers ***/

/************************************************************/

SET TERM ^;

/************************************************************/

/*** Triggers for tables ***/

/************************************************************/

/* Trigger: KNIGI_BI0 */

CREATE OR ALTER TRIGGER KNIGI_BI0 FOR KNIGI

ACTIVE BEFORE INSERT OR UPDATE POSITION 0

AS

begin

IF (NEW. nomer_knigi is null) then

NEW. nomer_knigi=gen_id (gen_knigi,1);

end

^

/* Trigger: KNIGI_HIST_BI0 */

CREATE OR ALTER TRIGGER KNIGI_HIST_BI0 FOR KNIGI

ACTIVE BEFORE INSERT POSITION 0

AS

declare variable nomer_knigi_tr smallint;

declare variable nomer_otdela_tr smallint;

declare variable nazvanie_knigi_tr varchar (45);

declare variable kol_vo_stranic_tr smallint;

declare variable avtor_tr varchar (45);

declare variable IZMEN_TR varchar (45);

declare variable DATA_TR date;

begin

DATA_TR=current_date;

if (inserting) then

begin

DATA_TR=current_date;

nomer_knigi_tr=new. nomer_knigi;

IZMEN_TR='добавление';

nomer_otdela_tr=new. nomer_otdela;

nazvanie_knigi_tr=new. nazvanie_knigi;

kol_vo_stranic_tr=new. kol_vo_stranic;

avtor_tr=new. avtor;

end

end

^

SET TERM; ^

/* Fields descriptions */

COMMENT ON COLUMN KNIGI. NOMER_KNIGI IS

'VALUE>0';

COMMENT ON COLUMN KNIGI. NOMER_OTDELA IS

'VALUE>0';

COMMENT ON COLUMN KNIGI. KOL_VO_STRANIC IS

'VALUE>0';

Исторя

CREATE TABLE NEW_TABLE (

ID SMALLINT NOT NULL,

NOMER_KNIGI SMALLINT,

NOMER_OTDELA SMALLINT,

NAZVANIE_KNIGI VARCHAR (45),

KOL_VO_STRANIC SMALLINT,

AVTOR VARCHAR (45),

IZMEN VARCHAR (45),

DATA_TR DATE

);

/************************************************************/

/*** Primary Keys ***/

/************************************************************/

ALTER TABLE NEW_TABLE ADD CONSTRAINT PK_NEW_TABLE_1 PRIMARY KEY (ID);

Отдел книг

CREATE TABLE OTDEL_KNIG (

NAZVANIE_OTDELA D_NAME /* D_NAME = VARCHAR (45) NOT NULL */,

NOMER_OTDELA D_INDEXTYPE NOT NULL /* D_INDEXTYPE = INTEGER NOT NULL */,

KOL_VO_KNIG D_INDEXTYPE /* D_INDEXTYPE = INTEGER NOT NULL */,

TELEFON D_TEL /* D_TEL = VARCHAR (15) */,

NOMER_BIBLIOTEKORYA D_INDEXTYPE /* D_INDEXTYPE = INTEGER NOT NULL */

);

/************************************************************/

/*** Primary Keys ***/

/************************************************************/

ALTER TABLE OTDEL_KNIG ADD CONSTRAINT PK_OTDEL_KNIG PRIMARY KEY (NOMER_OTDELA);

/************************************************************/

/*** Indices ***/

/************************************************************/

CREATE INDEX NAZV ON OTDEL_KNIG (NAZVANIE_OTDELA);

/************************************************************/

/*** Triggers ***/

/*************************************************************

SET TERM ^;

/************************************************************/

/*** Triggers for tables ***/

/************************************************************/

/* Trigger: OTDEL_BI0 */

CREATE OR ALTER TRIGGER OTDEL_BI0 FOR OTDEL_KNIG

ACTIVE BEFORE INSERT OR UPDATE POSITION 0

AS

begin

IF (NEW. nomer_otdela is null) then

NEW. nomer_otdela=gen_id (gen_otdel_knig,1);

end

^

SET TERM; ^

/* Fields descriptions */

COMMENT ON COLUMN OTDEL_KNIG. NOMER_OTDELA IS

'VALUE>0';

COMMENT ON COLUMN OTDEL_KNIG. KOL_VO_KNIG IS

'VALUE>0';

COMMENT ON COLUMN OTDEL_KNIG. NOMER_BIBLIOTEKORYA IS

'VALUE>0';

Выдача книг

CREATE TABLE VIDA4A_KNIG (

NOMER_ZAPISI D_INDEXTYPE NOT NULL /* D_INDEXTYPE = INTEGER NOT NULL */,

NOMER_KNIGI D_INDEXTYPE /* D_INDEXTYPE = INTEGER NOT NULL */,

NOMER_BIBLIOTEKORYA D_INDEXTYPE /* D_INDEXTYPE = INTEGER NOT NULL */,

NOMER_CHITATELYA D_INDEXTYPE /* D_INDEXTYPE = INTEGER NOT NULL */,

DATA_VYDA4I_KNIGI D_DATETYPE /* D_DATETYPE = DATE NOT NULL */,

DATA_VOZVRATA_KNIGI D_DATETYPE /* D_DATETYPE = DATE NOT NULL */

);

/************************************************************/

/*** Primary Keys ***/

/************************************************************/

ALTER TABLE VIDA4A_KNIG ADD CONSTRAINT PK_VIDA4A_KNIG PRIMARY KEY (NOMER_ZAPISI);

/**********************************************************/

/*** Foreign Keys ***/

/************************************************************/

ALTER TABLE VIDA4A_KNIG ADD CONSTRAINT FK_VIDA4A_KNIG_1 FOREIGN KEY (NOMER_KNIGI) REFERENCES KNIGI (NOMER_KNIGI);

ALTER TABLE VIDA4A_KNIG ADD CONSTRAINT FK_VIDA4A_KNIG_2 FOREIGN KEY (NOMER_BIBLIOTEKORYA) REFERENCES BIBLIOTEKOR (NOMER_BIBLIOTEKORYA);

/************************************************************/

/*** Triggers ***/

/************************************************************/

SET TERM ^;

/************************************************************/

/*** Triggers for tables ***/

/************************************************************/

/* Trigger: VYDACHA_KNIG_BI0 */

CREATE OR ALTER TRIGGER VYDACHA_KNIG_BI0 FOR VIDA4A_KNIG

ACTIVE BEFORE INSERT OR UPDATE POSITION 0

AS

begin

IF (NEW. nomer_zapisi is null) then

NEW. nomer_zapisi=gen_id (gen_vida4a_knig,1);

end^

SET TERM; ^

/* Fields descriptions */

COMMENT ON COLUMN VIDA4A_KNIG. NOMER_ZAPISI IS

'VALUE>0';

COMMENT ON COLUMN VIDA4A_KNIG. NOMER_KNIGI IS

'VALUE>0';

COMMENT ON COLUMN VIDA4A_KNIG. NOMER_BIBLIOTEKORYA IS

'VALUE>0';

COMMENT ON COLUMN VIDA4A_KNIG. NOMER_CHITATELYA IS

'VALUE>0';

Представления

/* View: KNIGI_VIEW */

CREATE VIEW KNIGI_VIEW (

NOMER_KNIGI,

NOMER_OTDELA,

NAZVANIE_KNIGI,

KOL_VO_STRANIC,

AVTOR)

AS

select knigi. nomer_knigi,otdel_knig. nomer_otdela,knigi. nazvanie_knigi,knigi. kol_vo_stranic,knigi. avtor

from knigi,otdel_knig

where knigi. nomer_otdela=otdel_knig. nomer_otdela

;

/* View: VOZVRAT_VIEW */

CREATE VIEW VOZVRAT_VIEW (

FAMILIYA_CHITATELYA,

IMYA_CHITATELYA,

OTCHESTVO,

NOMER_CHITATELYA,

NOMER_KNIGI,

NAZVANIE_KNIGI,

DATA_VOZVRATA_KNIGI)

AS

select chitatel. familiya_chitatelya,chitatel. imya_chitatelya,chitatel. otchestvo,

vida4a_knig. nomer_chitatelya,vida4a_knig. nomer_knigi,knigi. nazvanie_knigi,

vida4a_knig. data_vozvrata_knigi

from chitatel,vida4a_knig,knigi

where chitatel. nomer_chitatelya=vida4a_knig. nomer_chitatelya and knigi. nomer_knigi=vida4a_knig. nomer_knigi

;

Хранимые процедуры Редактирование и удаление данных

begin

INSERT INTO chitatel (chitatel. familiya_chitatelya,chitatel. imya_chitatelya,chitatel. otchestvo,

chitatel. ulica,chitatel. nomer_doma,chitatel. telefon)

VALUES (: familiya,: name,: otchestvo,: ulica,: n_doma,: tel);

suspend;

end

begin

INSERT INTO bibliotekor (bibliotekor. nomer_otdela,

bibliotekor. familiya_bibliotekorya,

bibliotekor. name_bibliotekorya)

VALUES (: n_otdel,: familiya,: name);

suspend;

end

begin

insert into vida4a_knig (nomer_knigi,nomer_chitatelya,

nomer_bibliotekorya,data_vyda4i_knigi,data_vozvrata_knigi)

values (: n_knigi,: n_biblio,: n_4itatelya,: data_vyd,: data_vozv);

suspend;

end

begin

insert into otdel_knig (otdel_knig. nazvanie_otdela,otdel_knig. kol_vo_knig,

otdel_knig. TELEFON,otdel_knig. nomer_bibliotekorya)

values (: nazvanie,: kol_knig,: telefon,: n_biblio);

suspend;

end

BEGIN

INSERT INTO knigi (knigi. nomer_otdela,knigi. nazvanie_knigi, knigi. kol_vo_stranic,knigi. avtor)

VALUES (: n_otdela,: new_nazvanie,: kol_vo_stranic,: avtor);

suspend;

end

BEGIN

DELETE FROM vida4a_knig

WHERE (nomer_zapisi =: n_zapisi);

END

BEGIN

DELETE FROM otdel_knig

WHERE (nomer_otdela =: n_otdela);

END

BEGIN

DELETE FROM knigi

WHERE (nomer_knigi =: n_knigi);

END

BEGIN

DELETE FROM bibliotekor

WHERE (nomer_bibliotekorya =: n_biblio);

END

BEGIN

DELETE FROM chitatel

WHERE (nomer_CHITATELYA =: n_CHITAT);

END

BEGIN

UPDATE chitatel

SET nomer_chitatelya=: n_chit,

nomer_doma =: n_doma,

familiya_chitatelya =: familiya,

imya_chitatelya =: name,

otchestvo=: otchestvo,

ULICA=: ulica,

telefon=: tel

WHERE (nomer_chitatelya =: n_chit);

when sqlcode - 530 do

exception key_ne_ice;

end

BEGIN

UPDATE bibliotekor

SET nomer_bibliotekorya =: n_biblio,

nomer_otdela =: n_otdela, familiya_bibliotekorya =: familiya,

name_bibliotekorya=: name

WHERE (nomer_bibliotekorya =: n_biblio);

End

BEGIN

UPDATE vida4a_knig

SET nomer_zapisi=: n_zapisi,

nomer_knigi =: n_knigi,

nomer_chitatelya =: n_chit,

nomer_bibliotekorya =: n_biblio,

data_vyda4i_knigi=: data_vyd,

data_vozvrata_knigi=: data_vozvr

WHERE (nomer_zapisi =: n_zapisi);

when sqlcode - 530 do

exception key_ne_ice;

end

BEGIN

UPDATE otdel_knig

SET nazvanie_otdela=: name_ot,

nomer_otdela =: n_otel,

kol_vo_knig =: kol_knig,

nomer_bibliotekorya =: n_biblio,

telefon=: tel

WHERE (nomer_otdela =: n_otel);

when sqlcode - 530 do

exception key_ne_ice;

end

BEGIN

if (: KOL_VO_STRANIC<=0) then exception stranicy;

else

BEGIN

UPDATE knigi

SET nomer_knigi =: n_knigi,

nomer_otdela =: n_otdela, nazvanie_knigi =: new_nazvanie,

kol_vo_stranic =: kol_vo_stranic,

avtor =: avtor

WHERE (nomer_knigi =: N_KNIGI);

when sqlcode - 530 do

exception key_ne_ice;

end

END

Домены

CREATE DOMAIN D_ADRES AS

VARCHAR (40) CHARACTER SET WIN1251

NOT NULL

COLLATE WIN1251;

CREATE DOMAIN D_DATETYPE AS

DATE

NOT NULL;

CREATE DOMAIN D_INDEXTYPE AS

INTEGER

NOT NULL;

COMMENT ON DOMAIN D_INDEXTYPE IS

'VALUE>0';

CREATE DOMAIN D_NAME AS

VARCHAR (45) CHARACTER SET WIN1251

NOT NULL

COLLATE WIN1251;

CREATE DOMAIN D_TEL AS

VARCHAR (15) CHARACTER SET WIN1251

COLLATE WIN1251;

Приложение 2. Листинг клиентского приложения

// ---------------------------------------------------------------------------

#include <vcl. h>

#pragma hdrstop

#include "Unit1. h"

#include "Unit2. h"

#include "Unit3. h"

// ---------------------------------------------------------------------------

#pragma package (smart_init)

#pragma resource "*. dfm"

TForm1 *Form1;

// ---------------------------------------------------------------------------

__fastcall TForm1:: TForm1 (TComponent* Owner)

: TForm (Owner)

{

}

// ---------------------------------------------------------------------------

void __fastcall TForm1:: Edit1Change (TObject *Sender)

{

if (RadioButton1->Checked==true)

{Set<TLocateOption,0,1> flags;

flags << loPartialKey;

if (! DataModule2->IBTable2->IsEmpty ())

DataModule2->IBTable2->Locate ("nomer_knigi", Edit1->Text, flags); }

if (RadioButton2->Checked==true)

{Set<TLocateOption,0,1> flags;

flags << loPartialKey;

if (! DataModule2->IBTable2->IsEmpty ())

DataModule2->IBTable2->Locate ("nazvanie_knigi", Edit1->Text, flags); }

if (RadioButton3->Checked==true)

{Set<TLocateOption,0,1> flags;

flags << loPartialKey;

if (! DataModule2->IBTable2->IsEmpty ())

DataModule2->IBTable2->Locate ("avtor", Edit1->Text, flags); }

}

// ---------------------------------------------------------------------------

void __fastcall TForm1:: Button1Click (TObject *Sender)

{

DataModule2->IBStoredProc1->ParamByName ("familiya") - >AsString=Edit2->Text;

DataModule2->IBStoredProc1->ParamByName ("name") - >AsString=Edit3->Text;

DataModule2->IBStoredProc1->ParamByName ("otchestvo") - >AsString=Edit4->Text;

DataModule2->IBStoredProc1->ParamByName ("ulica") - >AsString=Edit5->Text;

DataModule2->IBStoredProc1->ParamByName ("n_doma") - >AsString=Edit6->Text;

DataModule2->IBStoredProc1->ParamByName ("tel") - >AsString=Edit7->Text;

DataModule2->IBStoredProc1->ParamByName ("n_chit") - >AsString=Edit10->Text;

DataModule2->IBStoredProc1->Prepare ();

DataModule2->IBStoredProc1->ExecProc ();

DataModule2->IBTable3->Active=false;

DataModule2->IBTable3->Active=true;

}

// ---------------------------------------------------------------------------

void __fastcall TForm1:: Button2Click (TObject *Sender)

{

DataModule2->IBStoredProc2->ParamByName ("familiya") - >AsString=Edit2->Text;

DataModule2->IBStoredProc2->ParamByName ("name") - >AsString=Edit3->Text;

DataModule2->IBStoredProc2->ParamByName ("otchestvo") - >AsString=Edit4->Text;

DataModule2->IBStoredProc2->ParamByName ("ulica") - >AsString=Edit5->Text;

DataModule2->IBStoredProc2->ParamByName ("n_doma") - >AsString=Edit6->Text;

DataModule2->IBStoredProc2->ParamByName ("tel") - >AsString=Edit7->Text;

DataModule2->IBStoredProc2->Prepare ();

DataModule2->IBStoredProc2->ExecProc ();

DataModule2->IBTable3->Active=false;

DataModule2->IBTable3->Active=true;

}

// ---------------------------------------------------------------------------

void __fastcall TForm1:: Button3Click (TObject *Sender)

{

DataModule2->IBStoredProc3->ParamByName ("n_CHITAT") - >AsString=Edit8->Text;

DataModule2->IBStoredProc3->Prepare ();

DataModule2->IBStoredProc3->ExecProc ();

DataModule2->IBTable3->Active=false;

DataModule2->IBTable3->Active=true;

}

// ---------------------------------------------------------------------------

void __fastcall TForm1:: Button5Click (TObject *Sender)

{

DataModule2->IBTable3->Active=false;

DataModule2->IBTable3->Filtered=false;

DataModule2->IBTable3->Filter="NOMER_CHITATELYA='"+Edit9->Text+"'";

DataModule2->IBTable3->Active=true;

DataModule2->IBTable3->Filtered=true;

}

// ---------------------------------------------------------------------------

void __fastcall TForm1:: Button4Click (TObject *Sender)

{

DataModule2->IBTable3->Filtered=false;

}

// ---------------------------------------------------------------------------

void __fastcall TForm1:: Button6Click (TObject *Sender)

{

if (RadioButton4->Checked==true)

{DataModule2->IBTable3->IndexName="RDB$PRIMARY1"; }

else if (RadioButton5->Checked==true)

{DataModule2->IBTable3->IndexName="familiya_chitatelya"; }

else if (RadioButton6->Checked==true)

{DataModule2->IBTable3->IndexName="ulica"; }

}

// ---------------------------------------------------------------------------

void __fastcall TForm1:: Button7Click (TObject *Sender)

{

DataModule2->IBStoredProc4->ParamByName ("n_biblio") - >AsString=Edit11->Text;

DataModule2->IBStoredProc4->ParamByName ("n_otdela") - >AsString=Edit12->Text;

DataModule2->IBStoredProc4->ParamByName ("familiya") - >AsString=Edit13->Text;

DataModule2->IBStoredProc4->ParamByName ("name") - >AsString=Edit14->Text;

DataModule2->IBStoredProc4->Prepare ();

DataModule2->IBStoredProc4->ExecProc ();

DataModule2->IBTable4->Active=false;

DataModule2->IBTable4->Active=true;

}

// ---------------------------------------------------------------------------

void __fastcall TForm1:: Button8Click (TObject *Sender)

{

DataModule2->IBStoredProc5->ParamByName ("n_biblio") - >AsString=Edit11->Text;

DataModule2->IBStoredProc5->ParamByName ("n_otdel") - >AsString=Edit12->Text;

DataModule2->IBStoredProc5->ParamByName ("familiya") - >AsString=Edit13->Text;

DataModule2->IBStoredProc5->ParamByName ("name") - >AsString=Edit14->Text;

DataModule2->IBStoredProc5->Prepare ();

DataModule2->IBStoredProc5->ExecProc ();

DataModule2->IBTable4->Active=false;

DataModule2->IBTable4->Active=true;

}

// ---------------------------------------------------------------------------

void __fastcall TForm1:: Button9Click (TObject *Sender)

{

DataModule2->IBStoredProc6->ParamByName ("n_biblio") - >AsString=Edit15->Text;

DataModule2->IBStoredProc6->Prepare ();

DataModule2->IBStoredProc6->ExecProc ();

DataModule2->IBTable4->Active=false;

DataModule2->IBTable4->Active=true;

}

// ---------------------------------------------------------------------------

void __fastcall TForm1:: Button10Click (TObject *Sender)

{

DataModule2->IBTable4->Active=false;

DataModule2->IBTable4->Filtered=false;

DataModule2->IBTable4->Filter="Nomer_BIBLIOtekorya='"+Edit16->Text+"'";

DataModule2->IBTable4->Active=true;

DataModule2->IBTable4->Filtered=true;

}

// ---------------------------------------------------------------------------

void __fastcall TForm1:: Button12Click (TObject *Sender)

{

if (RadioButton7->Checked==true)

{DataModule2->IBTable4->IndexName="pk_bibliotekor"; }

else if (RadioButton8->Checked==true)

{DataModule2->IBTable4->IndexName="fam"; }

}

// ---------------------------------------------------------------------------

void __fastcall TForm1:: Button11Click (TObject *Sender)

{

DataModule2->IBTable4->Filtered=false;

}

// ---------------------------------------------------------------------------

void __fastcall TForm1:: Button13Click (TObject *Sender)

{

DataModule2->IBStoredProc7->ParamByName ("n_knigi") - >AsString=Edit17->Text;

DataModule2->IBStoredProc7->ParamByName ("n_otdela") - >AsString=Edit18->Text;

DataModule2->IBStoredProc7->ParamByName ("new_nazvanie") - >AsString=Edit19->Text;

DataModule2->IBStoredProc7->ParamByName ("kol_vo_stranic") - >AsString=Edit20->Text;

DataModule2->IBStoredProc7->ParamByName ("avtor") - >AsString=Edit21->Text;

DataModule2->IBStoredProc7->Prepare ();

DataModule2->IBStoredProc7->ExecProc ();

DataModule2->IBTable5->Active=false;

DataModule2->IBTable5->Active=true;

}

// ---------------------------------------------------------------------------

void __fastcall TForm1:: Button14Click (TObject *Sender)

{

DataModule2->IBStoredProc8->ParamByName ("n_otdela") - >AsString=Edit18->Text;

DataModule2->IBStoredProc8->ParamByName ("new_nazvanie") - >AsString=Edit19->Text;

DataModule2->IBStoredProc8->ParamByName ("kol_vo_stranic") - >AsString=Edit20->Text;

DataModule2->IBStoredProc8->ParamByName ("avtor") - >AsString=Edit21->Text;

DataModule2->IBStoredProc8->Prepare ();

DataModule2->IBStoredProc8->ExecProc ();

DataModule2->IBTable5->Active=false;

DataModule2->IBTable5->Active=true;

}

// ---------------------------------------------------------------------------

void __fastcall TForm1:: Button15Click (TObject *Sender)

{

DataModule2->IBStoredProc9->ParamByName ("n_knigi") - >AsString=Edit22->Text;

DataModule2->IBStoredProc9->Prepare ();

DataModule2->IBStoredProc9->ExecProc ();

DataModule2->IBTable5->Active=false;

DataModule2->IBTable5->Active=true;

}

// ---------------------------------------------------------------------------

void __fastcall TForm1:: Button16Click (TObject *Sender)

{


Подобные документы

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.