Реферат по предмету "Информатика, программирование"


Создание базы данных для организации

Содержание
Введение
1. Анализ предметной области
1.1 Общее описаниепредметной области
1.2 Описание информационныхпроцессов проходящих в предметной област
1.3 Обоснованиенеобходимости автоматизации
2. Проектирование
2.1 Построение диаграммыпотоков данных
2.2 ПостроениеИнфологической Модели
2.3 Обоснование выбораСУБД и языка программирования
2.4 Построениедаталогической модели
3. Разработка приложения
3.1 Выбор среды реализации
3.2 Особенности разработкиприложения
3.3 Разработкапользовательского интерфейса
Список литературы
Графическое приложение
Листинг программы

Введение
Специализированные СУБД создаются для управлениябазами данных конкретного назначения — бухгалтерскими, складскими, банковскимии т. д. Заказные СУБД требуют существенных затрат, а их подготовка к работе иотладка занимают значительный период времени (от нескольких месяцев донескольких лет). Однако, в отличие от промышленных, заказные СУБД вмаксимальной степени учитывают специфику работы заказчика (того или иногопредприятия), их интерфейс обычно интуитивно понятен пользователям и не требуетот них специальных знаний.В настоящее время в разных сферах деятельностивсе более нуждаются в средствах, позволяющих быстро и безошибочноперерабатывать большое количество информации. Применение таких средствпозволяет существенно снизить затраты и повысить эффективность работы. Например, в каждом видео прокате большой потокданных (клиенты, фильмы, режиссеры и т.п.) и чтобы снизить время обработкиинформации и облегчить работу сотрудникам заведений создается информационнаясистема, которая может это позволить. Информационные технологии в настоящеевремя являются средством совершенствования и развития управленческойдеятельности. Внедрение информационных систем способствуют болеекачественному управлению заведением, уменьшают расходы и повышают эффективностьпринимаемых управленческих решений.
Цель курсовойработы заключается в разработке информационной системы для удобства работысотрудников видео проката. Информационная система будет включать в себя базуданных и приложение для более функциональной работы. Для успешного созданияработоспособной, отказоустойчивой и удобной информационной системы необходимотщательное изучение предметной области, сбор исходных данных и их анализ.
1. Анализ предметной области1.1 Общее описаниепредметной области
Сущностьюпроекта является создание программы, предоставляющей услуги проката аудио- ивидеокассет, DVD и CD дисков. Коммерческая организация заказчик имееторганизационно-правовую форму — общество с ограниченной ответственностью иотноситься к субъектам малого предпринимательства. Полное наименованиеорганизации: общество с ограниченной ответственностью«Видеоклуб»(сокращенное: ООО «Видеоклуб»).Целью организацииданного предприятия является получение прибыли, а также формирование клуба,который будет в своей деятельности стремиться максимально полно удовлетворитьпотребности видеолюбителей.
Деятельностьпо предоставлению услуг в области видеопроката относится к отрасли«культура и искусство» 93000 в соответствии с Общероссийскимклассификатором отраслей народного хозяйства (ОКОНХ), непроизводственной сфередеятельности. Видеопрокат относится к материальным услугам и характеризуетсяследующими качествами:
— неосязаемостью (их невозможно транспортировать, хранить, упаковывать илиизучать до покупки, нельзя увидеть, услышать, потрогать, можно лишь верить врезультат, можно лишь почувствовать эффект, который появится в результатеполучения услуги); — невозможностью хранения услуг;
— неотделимостью от источника (контакт с потребителем — неотъемлемая частьпредоставления услуги видеопроката);
— изменчивостью, что означает непостоянства качества услуги; в данном видедеятельности качество удовлетворения потребности видеолюбителя зависит отквалификации продавца-консультанта, от менеджеров, формирующих ассортимент видеопродукции.
1.2 Описание информационныхпроцессов проходящих в предметной области
Входе данного проекта необходимо проанализировать систему «Организация работыпункта видео-проката». Итогом системного анализа будет текст техническогозадания на проект программного продукта, который улучшит характеристики даннойсистемы. Под программным продуктом в данном случае будем понимать совокупностьбаз данных, СУБД, приложений и документации их характеризующей, находящихся внепосредственной или косвенной взаимосвязи и предназначенные для поставки,передачи или продажи пользователям систем типа «Организация работы пунктавидео-проката».
Впроцессе приема заказа производится его прием от клиента и регистрация.Регистрационные данные сохраняются в компьютере и используются для последующегопоиска.
Клиентможет четко указать название фильма и тип носителя, которые его интересуют,либо же указать жанр фильмов, которые он бы хотел посмотреть, или страну,производство фильма которой он хотел бы посмотреть. Использую данные,полученные от пользователя, производится поиск в базе имеющихся фильмов.Результаты поиска выводятся на экран оператора, который сообщает о нихпользователю. В случае неудовлетворительного результата предлагается сделатьновый заказ. В случае удовлетворительного результата поиска, оператор получаетинформацию о местонахождении требуемого фильма, условий, на которых этот фильмпредоставляется в прокат и другую информацию.
Затемпроизводится оценка состояния возвращенного материала. В случае выявления поврежденийносителей производится взимание штрафа с клиента. Данные о результатах вносятсяв компьютер. Оплата производится по наличному расчету через кассу предприятия.
Послеоплаты клиенту предоставляется заказанная им видео-продукция. Вся необходимая информацияотмечается на вкладыше к носителю оператором вручную, а именно: названиефильма, срок возврата, состояние носителя на момент заказа в кодированнойформе.1.3 Обоснованиенеобходимости автоматизации
Естественноотметить в вышеперечисленных этапах процессы, которые легко подвергаютсяавтоматизации и в которых целесообразно создание электронных баз данных(например, регистрация заказов, данные о клиенте, ведение статистики заказов ипрочее). С экономической точки зрения необходимо отметить, что подобноенововведение позволит значительно облегчить процесс обслуживания клиентов ирезко понизить время оказания услуг, что позволяет обслуживать большееколичество клиентов за одно и тоже время, и как результат ведет к увеличениюприбыли пункта видео-проката.
Работастаршего менеджера с отчетами существенно облегчается с введением СУБД.Статистику заказов, можно просматривать за любой период, тем самым, выявляятовары, пользующиеся наибольшим спросом и соответственно пользующиесянаименьшим спросом, лучших клиентов месяца и т.д. Дополнительно появляетсявозможность контроля над пользователями (менеджерами) и просмотра статистикизаказов осуществленным каждым менеджером.
Итак,можно сказать, что итогом проектирования должна быть система управления базданных. СУБД должна иметь дружественный интуитивно понятный интерфейс (бытьнаглядной, простой в освоении…), так как пользоваться ей предстоит, какправило, слабо подготовленных пользователей, не имеющих определенных знаний вобласти информационных систем. К СУБД может быть спроектирована система помощи,направленная на ее быстрое освоение и поиска ответов на возможные возникшиевопросы при пользовании программным средством. Естественно отметить ввышеперечисленных этапах процессы, которые легко подвергаются автоматизации и вкоторых целесообразно создание электронных баз данных (например, регистрациязаказов, данные о клиенте, ведение статистики заказов и прочее). Данная системав соответствии с проведенным ранее анализом легко подвергается автоматизации. Вкачестве операционной среды была выбрана MS Windows XP/Vista – совместимаясреда, в качестве языка программирования SQL.

2.Проектирование ЭИС2.1 Построение диаграммыпотоков данных
Анализи моделирование любой системы является важным этапом в построении техническогозадания на то или иное изменение или дополнение к данной системе, не говоря ужеоб автоматизации. Вот почему важно рассмотреть изучаемую систему наиболеетщательно и наиболее полно построить ее модель. Наиболее подходящим в данномслучае является очень распространенный в мире стандарт DFD, по сути являющийсяметодологией функционального моделирования. С помощью наглядного графическогоязыка DFD изучаемая система предстает перед аналитиками и специалистамипредметной области в виде набора взаимосвязанных функций, которые в терминахDFD называются функциональными блоками.
Крометого, необходимо отметить то, что стандарт DFD содержит набор процедур,позволяющий рассчитывать и согласовывать модель большой группой людей из разныхобластей деятельности. Согласованная модель легко потом может быть изучена слюбой степенью детализации практически любым человеком, не принимающим участияв построении модели. В этом состоит одно из важнейших его преимуществ. Построиммодель в стандарте DFD. Первым делом составим контекстную диаграмму (рисунок1), характеризующую модель в терминах вход/выход и являющуюся самым общимпредставлением.
Внешние сущности изображают входы в систему и/иливыходы из системы. Внешние сущности изображаются в виде прямоугольника стенью и обычно располагаются по краям диаграммы(рис.1 блок «Клиент»). Потоки работизображаются стрелками и описывают движение объектов из одной части системы вдругую. Поскольку в DFD каждая сторона работы не имеет четкого назначения, какв IDEF0, стрелки могут подходить и выходить из любой грани прямоугольникаработы. В DFD также применяются двунаправленные стрелки для описания диалоговтипа «команда-ответ» между работами, между работой и внешней сущностьюи между внешнимисущностями. (рис. 1 блоки «Информация о клиенте» и «Внесение информации озаказе»). В отличие от стрелок, описывающих объекты в движении, хранилища данныхизображают объекты в покое.
2.2 ПостроениеИнфологической Модели
Таккак в процессе моделирования системы было выяснено, что необходимо созданиехранилищ данных (клиенты, заказы, база фильмов …), то в процессе моделированиясистемы необходимо рассмотреть закрепление этих хранилищ за основнымипроцессами. Это можно сделать при помощи модели IDEF1X, которая являетсяметодологией построения реляционных структур баз данных в терминахсущность-связь. Построим модель данных в стандарте IDEF1Х. Данная модельизображена на рисунке и имеет 4 сущности (2 из которых зависимые), объединенныхсвязями. Все связи один-ко-многим, следовательно модель не противоречитконцепции IDEF1Х («связи многие-ко-многим нежелательны ибо не раскрываютреальную структуру данных…»).
Вмодели IDEF1X легко заметить по внешнему представлению зависимые и независимыесущности (зависимые сущности обозначаются прямоугольниками с закругленнымиконцами). В данной модели, как это было сказано ранее, это – «Deal».Естественно, без клиента не может быть заказа, произведенного им. Статистиказаказов не может существовать без заказов.
2.3 Обоснование выбора СУБДи языка программирования
Проанализировавдиаграмму сущность-связь можно уже сделать выбор СУБД и клиентской части.SQL-сервер Interbase предназначен для хранения и обработки больших объемовинформации в условиях одновременной работы множества клиентских приложений.Ниже рассматривается ряд технологий InterBase, использование которыхобеспечивает максимальную вычислительную разгрузку клиентского приложения игарантирует высокую безопасность и целостность информации.
Отношенияподчиненности между таблицами БД создаются путем определения первичных ключей уродительских и внешних ключей у дочерних таблиц.
Ограниченияна значения отдельных столбцов; условия ограничений могут быть разнообразны —от требования удовлетворения вводимых значений определенному диапазону илисоответствия некоторой маске до требуемого отношения с одной или несколькимизаписями из другой таблицы (или многих таблиц) БД.
Генераторыдля создания и использования уникальных значений нужных полей.
Для ускоренияработы клиентских приложений с удаленной БД могут быть определены хранимыепроцедуры, которые представляют собой подпрограммы, принимающие и возвращающиепараметры и способные выполнять запросы к БД, условные ветвления и циклическуюобработку. Хранимые процедуры пишутся на специальном алгоритмическом языке. В нихпрограммируются часто повторяемые последовательности запросов к БД. Текстпроцедур хранится на сервере в откомпилированном виде.
Триггеры —подпрограммы, автоматически выполняемые сервером до или (и) после событияизменения записи в таблице БД.
В составезаписи БД могут определяться BLOB-поля (Binary Large Object —большой двоичныйобъект), предназначенные для хранения больших объемов данных в видепоследовательности байтов. Таким образом могут храниться текстовые играфические документы, файлы мультимедиа, звуковые файлы и т. д. ИнтерпретацияBLOB-поля выполняется в приложении, однако разработчик может определить такназываемые BLOB-фильтры для автоматического преобразования содержимогоblob-поля к другому виду.
InterBaseдает возможность использовать функции, определяемые пользователем (User DefinedFunction, UDF), в которых могут реализовываться функциональности, отсутствующиев стандартных встроенных функциях InterBase (вычисление максимума, минимума,среднего значения, преобразование типов и приведение букв к заглавным).Например, в UDF можно реализовать извлечение из значения даты номера дня, года;определение длины символьного значения; усечение пробелов; разныематематические алгоритмы и т. п. Функция пишется на любом алгоритмическомязыке, позволяющем разрабатывать DLL (библиотеки динамического вызова),например, на Object Pascal.
InterBaseможет посылать уведомления клиентским приложениям о наступлении какого-либособытия. Одновременно работающие приложения могут обмениваться сообщениямичерез сервер БД, вызывая хранимые процедуры, в которых реализована инициациянужного события.
Дляобеспечения быстроты выполнения запросов и снятия с клиентского приложениянеобходимости такие запросы выдавать в БД можно определить виртуальные таблицы(или просмотры), в которых объединяются записи из одной или более таблиц,соответствующих некоторому условию. Работа с просмотром из клиентскогоприложения ничем не отличается от работы с обычной таблицей. Поддерживаетпросмотр сервер, реагируя на изменение данных в БД. Просмотры могут бытьизменяемыми или не допускающими внесения в них изменений.
InterBase былразработан в начале 80-х годов группой разработчиков из американской корпорацииDEC. В дальнейшем разработка данного продукта велась независимыми компаниямиInterBase Software и впоследствии слившейся с ней Ashton-Tate. Borlandприобрела права на InterBase у Ashton-Tate после слияния с нею.
InterBaseактивно используется в государственном и военном секторах США, что, видимо, истало преградой для его продвижения в Россию. Интерес к этому серверу возростолько в последнее время в связи с включением его локальной (а начиная с Delphi3 и 4-пользовательской) версии в состав Delphi Client/Server Suite и DelphiEnterprise. Внимание разработчиков БД InterBase привлек, во-первых, потому, чтоэто «родной» продукт Borland (а средства разработки приложений этой компаниидавно зарекомендовали себя с положительной стороны), во-вторых, потому, чтоInterBase весьма прост в установке, настройке и администрировании по сравнениюс другими SQL-серверами, и в-третьих, потому, что он обладает прекраснымифункциональными возможностями.
Firebirdвыбран мной в качестве сервера из-за того, что он бесплатен и болеефункционален, чем Interbase, а также хорошо совместим с новыми операционными системамиWindows Vista и Server 2008. Используемая мною версия это наиболее стабильнаяна данный момент – 2.0.3.
 
2.4Построение даталогической модели
 
Предметная область, выбранная мною для данной курсовой работы – информация о клиентах, дисках и выдаче дисков небольшого видеопроката.
Целью данной работы является автоматизация обработки данных по клиентам с целью упрощения работы персонала с клиентами. При покупке или выдаче на прокат товара клиенту выдаётся чек. Количество товара на складе соответственно уменьшается. Также в видеопрокате существуют скидки постоянным клиентам в зависимости от количества покупок (сделок).
В процессе реализации задачи при разработкеструктуры для хранения данных, первым объектом выступают информация о товаре(дисках или кассетах) и клиентах. В нашем случае БД будет состоять из 3 таблиц.В таблице MOVIE будут содержаться сведения о фильмах (штрих-код, количестводисков, название, режиссер и жанр). В таблице CLIENT будут храниться все нужныесведения о клиентах – с указанием полных паспортных данных. Третья таблица DEALбудет содержать сведения о сделках (дата сделки, сумма с учетом скидки (еслиона есть) и т.д.) Таким образом, таблица DEAL будет центральной. Она должнабудет иметь уникальной поле, которое будет однозначно определять каждую сделка.В дальнейшем по этому полю мы создадим первичный ключ, чтобы СУБД могла быстронайти нужную запись. Каждой записи в таблице MOVIE будет соответствоватьпроизвольное количество записей в таблице DEAL (такая связь в терминологии БДназывается связью один ко многим), т. е. одно из её полей будет содержатьуникальный идентификатор фильма. В таблице DEAL будет также ссылка науникальный идентификатор клиента из таблицы CLIENT. При появлении очереднойзаписи в таблице DEAL должно меняться значение поля KOL (количество) в таблицеMOVIE.
Таблица Фильмы (MOVIE):ID Целый INTEGER
Уникальный идентификатор фильма. По этому полю создается первичный ключ.
(штрих код диска) NAME_FILM Строковый VARCHAR 50 Название фильма (индексное поле) DIRECTOR Строковый VARCHAR 50 Режиссер GANR Строковый VARCHAR 10 Жанр (набор фиксированных значений: комедия, триллер, боевик и т. д.) Индексное поле KOL Целый INTEGER Количество на складе MONEY Целый INTEGER Цена DESCRIPTION Строковый VARCHAR 250 Краткое описание фильма
Таблица Клиенты(CLIENT):ID_C Целый INTEGER Уникальный идентификатор клиента (первичный ключ) FIO Строковый VARCHAR 50 ФИО (индексное поле) PASPORT Строковый VARCHAR 150 Паспортные данные
Таблица Заказы(DEAL):ID_D Целый INTEGER
Уникальный идентификатор
(первичный ключ) ID_M Целый INTEGER Код фильма из поля ID таблицы MOVIE CL_ID Целый INTEGER Код клиента из поля ID_C таблицы CLIENT DEN Вещественный NUMERIC Цена с учетом скидки D_D Дата DATE Дата составления. По этому полю нужно создать индекс для сортировки. VZVR Символьный CHAR 1 Код возврата. По умолчанию ‘N’
Таблица Log WHEN Дата TIMESTAMP Дата редактирования(текущая дата) USER Строковый VARCHAR(20) Пользователь ACTION Строковый CHAR(3) Действие, выполняемое пользователем 3. Разработкаприложения3.1 Выбор среды реализацииСредаразработки Borland Delphi.
Приложение-клиентразрабатывается при помощи программных средств Borland Delphi, используя наборкомпонентов Interbase Express (IBX). Эти компоненты используют функции IntebaseAPI, т.е. обращаются к серверу непосредственно. VCL-библиотека классов средыпроектирования Delphi предоставляет ряд классов, позволяющих быстро иэффективно разрабатывать различные приложения баз данных.
Эти классыпредставлены следующими группами:
· компонентыдля доступа к данным, реализующие:
o доступчерез машину баз данных BDE (Borland Database Engine), предоставляющую доступчерез ODBC-драйверы или через внутренние драйверы машины баз данных BDE(компоненты страницы BDE-палитры инструментов);
o доступчерез ADO-объекты (ActiveX Data Objects), в основе которого лежит применениетехнологии OLE DB (компоненты страницы ADO);
o доступк локальному или удаленному SQL-серверу InterBase (компоненты страницыInterBase);
o доступпосредством легковесных драйверов dbExpress;
o доступк БД при многозвенной архитектуре (компоненты страницы DataSnap);
· визуальныекомпоненты, реализующие интерфейс пользователя;
· компонентыдля связи источников данных с визуальными компонентами, предоставляющимиинтерфейс пользователя;
· компонентыдля визуального проектирования отчетов.
Компонентыдля доступа к серверу InterBase:
· TIBDatabase— предназначен для подключения к базе данных. Основные методы: Open, Close.
· TIBTransaction— предназначен для явного управления транзакцией. Основные методы: StartTransaction,Commit, Rollback, CommitRetaining, RollbackRetaining.
· TIBTable— аналог стандартного TTable. Компонент предназначен для получения данных изодной таблицы или представления базы данных. Основное свойство — TableName.Основные методы: Open, Close. Набор данных, полученных при помощи TIBTable,является редактируемым, если речь идет о таблице базы данных или обновляемомпредставлении. Компонент совместим с визуальными компонентами.
· TIBQuery— аналог стандартного TQuery. Компонент предназначен для получения данных наоснове SQL-запроса. Этот набор данных не всегда будет редактируемым, зачастуюнеобходимо использовать дополнительный компонент TIBUpdateSQL, чтобы иметьвозможность редактировать полученные сведения. Основное свойство — SQL.Основные методы: Open, Close, ExecSQL. Компонент совместим с визуальнымикомпонентами.
· TIBDataSet— предназначен для получения и редактирования данных, является потомкомстандартного класса TDataSet и полностью совместим со всеми визуальнымикомпонентами. Основные методы: Prepare, Open, Close, Insert, Append, Edit,Delete, Refresh.
· TIBStoredProc— предназначен для выполнения хранимых процедур и получения набора данных наоснове результатов выполнения процедуры. Получаемый набор данных являетсянередактируемым. Компонент совместим с визуальными компонентами. Основноесвойство — StoredProcName. Основной метод — ЕхесРгос.
· TIBUpdateSQL— аналог TUpdateSQL. Используется в паре с TIBQuery и предназначен для созданиямодифицируемых наборов данных. Основные свойства: DeleteSQL, InsertSQL,ModifySQL и RefreshSQL.
· TIBSQL— предназначен для выполнения SQL-запросов. В отличие от TIBQuery илиTIBDataSet, TIBSQL не имеет локального буфера для набора данных и несовместим свизуальными компонентами.
· TIBDatabaseInfo— позволяет получить системную информацию о некоторых свойствах базы данных,соединения и сервера. Например, UserNames — список пользователей, подключенныхк базе данных, PageSize — размер страницы базы данных.
· TIBSQLMonitor— предназначен для перехвата и отслеживания всех запросов, которые выполняютприложения, использующие IBX.
TIBEvents —предназначен для получения пользовательских событий InterBase. Основноесвойство — Events. Основные методы: RegisterEvents, UnregisterEvents.
3.2Особенности разработкиприложения
 
С учетомназначения функциональной спецификации, а также с учетом возможности тяжелыхошибок в этом документе, функциональная спецификация должна быть очень точной ине противоречивой и по возможности приближаться к математическим формулировкам,однако это не означает что она должна быть формализована настолько, что по нейможно было бы автоматически генерировать код программы. Это означает лишь то,что она должна базироваться на понятиях, построенных как математическиеобъекты, и утверждениях, однозначно понимаемых и заказчиком и разработчиками.
Достаточночасто функциональная спецификация формализуется на естественном языке, тем неменее использование математических и других формализованных методов при разработкефункциональной спецификации весьма приветствуется.
В целомфункциональная спецификация состоит из трех основных частей:
1. Описаниевнешней информационной среды по отношению к программному средству;
2.Определение функций ПС. Чаще всего такие функции рассматриваются на множествесостояний внешней информационной среды;
3. Описаниенежелательных ситуаций, которые могут возникнуть при работе ПС и описаниереакции ПС на эти ситуации.
Основнойфункцией ПС можно считать автоматизацию процесса управления процессом принятиязаказов, поиска заказов, ведение статистики и пр.
Как сказановыше, основными функциями разрабатываемого ПС являются:
— Добавлениенового поступления видео-продукции с проведением маркировки. Каждое новоепоступление должно быть введено в базу фильмов с заполнением всех необходимыхполей. Результатом выполнения данной функции является запись в таблице базыданных и присвоение каждому видео-фильму своего индивидуального номера, с егопоследующим нанесением на физический носитель. Повторение индивидуальногономера не допускается, поэтому необходимо либо генерировать его внутри системы.Название видео-фильма должно быть символьным и не более 50 символов. Числокопий должно быть целым числом. Поля «Носитель», «Категория», «Производствофильма (Страна)», заполняются из выпадающих списков.
— Регистрацияновых клиентов пункта проката. Регистрация клиентов производится только приналичии паспорта. При регистрации необходимо обязательно заполнить поля «№паспорта», «Фамилия», «Имя», «Отчество», остальные поля не обязательными длязаполнения. Также необходимо проводить проверку на совпадение вводимойинформации при регистрации нового клиента по всем обязательным параметрам всовокупности и при совпадении необходимо выводить соответствующее сообщение.Поля «Фамилия», «Имя», «Отчество», «Адрес» являются символьными и ограничены 50символами.
— Быстрыйпоиск видео-продукции по индивидуальному номеру, категории, типу носителя,названию. Результатом работы функции является список видео-продукции, отобранныйпо определенному критерию, или группе критериев. Поле «Название» являетсясимвольным и должно содержать название искомой продукции, поле «Индивидуальныйномер» является целым числовым, другие поля заполняются из выпадающего списка.Если не будет обнаружено ни одной записи, отвечающей критериям поиска, тодолжно быть выведено соответствующее сообщение.
— Возможностьпоказа статистики заказов отдельным клиентом. Результатом работы данной функцииявляется вывод списка с информацией о клиенте и видео-продукцией, которую онзаказывал ранее. В этом списке указывается количество заказов, сделанныхклиентом, размер штрафа, который он уплатил, количество дней, прошедших смомента регистрации. Также указывается количество заказов, которые клиентсделал, выбирая видео-продукцию на различных видов носителей (VHS, CD, DVD).Входной информацией является ввод в поле «Номер паспорта», который являетсяцелым числом. Также имеется возможность показа статистики заказов отдельногофильма. Результатом работы является вывод списка с информацией о количествезаказов фильма, название которого введено в поле «Название фильма», а поле«Номер паспорта» остается пустым.
— Возможностьпоказа общей статистики. Результатом работы данной функции является выводсписка всех заказов, осуществленных предприятием. Период, за который статистикабудет выведена определяется пользователем, который может в поле «Год» указатьгод, в поле «Месяц» указать месяц и в поле «День» указать день. В результатевыведется статистка заказов на то число, которое было введено пользователем.Все перечисленные выше поля являются символьными и ограничены 8 символами изаполняются из выпадающего списка, в котором присутствует строка «все», привыборе которой должна учитываться статистика за все дни, месяцы, годы в зависимостиот того в каком поле эта строка выбрана.
Исключительныеситуации должны быть обрабатываться отдельным обработчиком и перекрыватьсистемный обработчик. Должен выполняться принцип прозрачности и пользователюпомимо ошибки должны сообщаться ее причины и при его желании соответствующиесправки. Локальные ошибки должны устраняться без прерывания основного процессане подверженного ошибочным действиям. Фатальные ошибки должны отрабатыватьсяособо и не нарушать целостности системы. В случае краха системы, должно бытьобязательно предусмотрено ее восстановление предыдущей рабочей версией, с цельючего необходимо создавать архивы системы при каждом ее отключении. Созданиеархива системы должно быть автоматическим и не сказываться на скорость основныхвычислений.
Опытным путем нетрудно выяснить, что Delphi приработе с InterBase интерпретирует столбцы типа CHAR и VARCHAR как T S t r i n gF i e l d. При этом, во-первых, столбцы типа CHAR всегда читаются беззавершающих пробелов, во-вторых, при занесении завершающих пробелов в столбец(а часто это бывает необходимо) типа CHAR они всегда удаляются, в то время какв столбце типа VARCHAR, наоборот, они всегда хранятся. Столбцы типа DATEпозволяют хранить значения даты в пределах от 01.01.0100 до 11.12.5941, а такжезначения времени (тип DATE InterBase полностью совместим с типом TDateTimeDelphi). Если ввод данных в столбец типа DATE производится из утилитыIBConsole, значения даты должны указываться в формате InterBase. Согласно этомуформату, значения даты состоят из номера дня (01-31), месяца (JAN-DEC) и года.Эти значения отделяются друг от друга разделителями. Стандартным разделителемявляется символ дефиса (-), но принимаются и пробел, правый слеш (/) и точка(.). Значения дат в InterBase должны лежать в диапазоне от 1-JAN-100 до11-DEC-5941. Интерпретация формата представления значений типа DATE зависит отнастройки — программы или операционной системы компьютера. Полезно всякий разпри старте приложения программно переустанавливать формат даты и времени к привычномунам российскому формату:

procedure TForml.FormCreate(Sender: TObject);
begin
DateSeparator:= '. ';
ShortDateFormat:= 'dd.mm.yyyy';
ShortTimeFormat:= 'hh:mm:ss';
end;
Таким образом можно игнорировать неопределенностьтекущей настройки операционной системы на конкретном компьютере.
В InterBase значения типа DATE совместимы состроковыми типами. Поэтому, если в SQL-операторах InterBase требуетсяинтерпретировать значения типа DATE как строку, нет необходимости в приведениитипов. Например, можно так записать в символьный столбец S значение типа DATE(символы I I означают операцию конкатенации, или сцепления, строк, функция NOWвозвращает текущие дату и время):
UPDATE DEAL
SET S = «Дата отгрузки » I I NOW;
Как уже говорилось, в InterBase нет автоинкрементноготипа. Поля автоинкрементного типа автоматически заполняются уникальнымичисловыми значениями при вводе очередной записи. Такие поля обычно используютсядля создания первичных ключей. Вместо автоинкрементных полей InterBaseпредоставляет механизм генераторов — особых программ, которые хранят некотороезначение вплоть до момента, когда оно будет использовано, после чего изменяютхранимое значение на заданную величину.
Генератор создается следующим оператором:
CREATE GENERATOR Имя_генератора

После создания генератора ему необходимоприсвоить начальное значение таким оператором:
SET GENERATOR Имя_генератора ТОНачальное_значение
Для получения очередного значения генератораиспользуется такая функция:
GEN_ID(Имя_генератора, Шаг)
Здесь Шаг — целое число, на которое изменяетсятекущее значение генератора. Проиллюстрируем использование генератора напримере поля ID_C таблицы CLIENT.
Создаем генератор:
CREATE GENERATOR GEN_CLIENT_ID_C;
SET GENERATOR GEN_CLIENT_ID_C TO 1;
Однажды созданный генератор хранится в БД нарядус другими ее сущностями — таблицами, индексами, хранимыми процедурами и т. п.Используем генератор при вводе очередной записи:
CREATE TRIGGER TRIG_CLIENT FOR CLIENT
ACTIVE BEFORE INSERT POSITION 0
AS BEGIN
IF (NEW.id_c IS NULL) THEN NEW.id_c =GEN_ID(gen_client_id_c,1);
END
Доменами называются заранее созданные описаниястолбцов. Наряду с другими сущностями БД, домены должны иметь уникальные имена.Однажды созданный домен хранится в БД и может использоваться вместо типастолбца. С помощью доменов достигается унификация типов данных, хранящихся вразличных столбцах, возможно, разных таблиц.
CREATE DOMAIN D_GANR AS
VARCHAR(10) CHARACTER SET NONE
NOT NULL
CHECK (VALUE IN ('comedy', 'action', 'melodrama','fantasy', 'horror'))
COLLATE NONE
В InterBase нет столбцов денежного типа(Currency). Вместо них обычно используются столбцы FLOAT или DOUBLE PRECISION.При выводе их значений в визуализирующих компонентах они представляют денежныесуммы как значения с плавающей запятой, что в большинстве случаев мешает ихвосприятию. Вернуть этим столбцам нормальный денежный вид можно либо вобработчике события OnGetText объекта-поля, либо с помощью его (объекта-поля)свойства DisplayEdit. В обработчике можно использовать оператор такого вида:
procedure TForml.QUSUMMAGetText(Sender: TField;
var Text: String;
DisplayText: Boolean);
begin
Text:= FloatToStrFfquSumma.AsFloat,
ffCurrency, 10, 2)
end;
В свойстве DisplayEdit можно указать следующуюмаску:
# # #, # # #. 0 0 ' р. '

Конечный результат будет одинаков, но указатьмаску, как мне кажется, проще.
Визуальные средства разработки запросовобеспечивают реально удобное представление решаемой задачи, помогают определитьсвязи и условия запроса. Но в Interbase нет как таковых визуальных средствразработки запросов. Однако можно обращаться с Interbase при помощи ibExpert.Это гибкий и мощный инструмент. В нем присутствует возможность разрабатыватьструктуру самой БД, сохранять и выполнять скрипты на SQL, использоватьмножество встоенных утилит, облегчающих работу, как разработчика, так иадминистратора.
Загрузив ibExpert в меню Tools->Query Builder,нужно перетащить требуемые таблицы. Определить связи между ними и отметитьполя, необходимые для вывода. Они появятся внизу на вкладке Selection. А назакладке Edit можно будет просмотреть текст запроса. На закладке PerfomanceAnalisys есть очень полезная информация о быстродействии и количестве чтений скаждой таблицы.3.3 Разработкапользовательского интерфейса
Есть дваспособа добиться хорошего оформления таблиц. Попробовать самостоятельноулучшать стандартный DBGrid или использовать компоненты стороннихпроизводителей, предоставляющих альтернативу стандартному компоненту. Привыполнении работы надо учитывать современные тенденции и стандарты, то естьделать так, чтобы программа выглядела современной, похожей на офисныеприложения. Используя компоненты от EhLib можно улучшить стандартный DBGrid,добавив новые возможности: автоматический расчет итоговых значений (сумма, среднеезначение, количество записей), экспорт данных и т.д.
Устаревшийдизайн стандартной таблицы теперь можно легко заменить стильной конструкциейDBGridEh, изменив свойство Flat. Также есть богатый выбор различных цветовыхсхем выделения данных.
Практическивсегда, разрабатывая приложения для работы с базами данных, приходится выделятькаким-нибудь образом данные, подпадающие под некоторое условие. Это может бытьи уровень продаж определенной менеджера, достигший критически низкого уровня, и«минусовые» остатки на складе. Чтобы не пропустить такие происшествия,программа должна правильно выделять это в таблице. Для этого достаточнопрописать в событии OnGetCellParams нужное условие и параметры выделения(размеры, цвет шрифта, цвет фона).
Важнейшимэлементом работы с прикладными программами является возможность переноса данныхв офисные приложения, например, в Microsoft Office. То есть часто бываетнедостаточно просто создать отчет и вывести его в таблицу. Как правило, потомтребуется, чтобы он был предоставлен в виде документа Excel для последующихманипуляций. Можно создавать различные OLE – объекты и, перебирая нужные записив DataSet, копировать их в ячейки Excel. Этот способ довольно гибкий, так какпозволяет формулировать качественные отчеты, предварительно оформив их. То естьдобавлять заголовки, формулы, делать выделение критических данных и т.д. Но воткопирование по строкам сильно замедляет создание отчета, особенно если данныхмного. К тому же уйдет много времени на программирование переноса данных.Поэтому когда речь идет не о создании красивого оформления, а о скорости ипростоте экспорта данных лучше использовать средства EhLib. Эта библиотекапозволяет одним вызовом функции записывать содержимое таблицы в форматы.xls,.rtf,.html,.txt,.csv.
Также полезнафункция копирования в буфер выделенных данных. Например, при наличии несколькихофисов, которые в течении дня обмениваются данными о наличии у них количестватовара. Менеджерам достаточно скопировать нужные данные и вставить их в любоеприложение: почтовый клиент, ICQ.
При работе сбольшими объемами данных бывает очень удобно не только отсортировывать данныепо какому-либо полю, но и группировать («свернуть») по значениям одного изполей, чтобы потом можно было развернуть любую из подгрупп щелчком ипросмотреть её содержимое. К примеру, организуя рассылку товаров по множествугородов по неким направлениям, не всегда удобно листать отсортированный         погородам массив данных. Удобнее сгруппировать данные по городу и разворачиватьгорода только нужного направления. Используя DropDownBox в DBGridEh, можнолегко решать подобные задачи.
Менеджерубудет удобнее просматривать отчёты о продажах используя привычный Excel.(Рис.1)Для начала нужно установить драйвер ODBC Firebird. Запустить Excel. Выбратьменю Данные, Импорт внешних данных, Создать запрос. После проверки запросанеобходимо обязательно сохранить запрос (кнопка с изображением дискеты). Запросбудет сохранен вместе со всеми параметрами алиаса, поэтому для«распространения» запроса на несколько компьютеров вовсе необязательносоздавать алиас ODBC на каждом (конечно, ODBC-драйвер и клиентскую часть IB/FBвсе равно придется устанавливать на этих компьютерах).
CREATEPROCEDURE NEW_PROCEDURE
returns (
kldnumeric(15,0),
movievarchar(50),
famiovarchar(50))
as
declare variableidm integer;
declarevariable cl integer;
declarevariable dt date;
begin
for selectdeal.cl_id, deal.d_d, deal.id_m
from deal
into:cl,:dt,:idm
do
begin
kld =current_date — dt;
if (:kld >12) then
begin
selectclient.fio from client where client.id_c =:cl
into:famio;
selectmovie.name_film from movie where movie.id =:idm
into:movie;
suspend;
end
end
end^
Инструкцияпользователя
Пользовательский интерфейс построен в соответствии с классическими требованиями и правилами системы Windows, правилами системы Delphi. Основными задачами при построении интерфейса были: простота, удобство.
Программный проект включает в себя 7 оконных форм (одна из них форма главного меню), 4 из них являются непосредственно рабочими (т.е. здесь происходит ввод, обработка и корректирование данных), 3 – формы отображения обработанных данных.
При открытие программы появляется главная форма (fmMain) (Рис. 1), на которой расположены таблицы и соответствующие им элементы управления. Если есть задолжники, у которых на руках находятся диски, то вместе с главной формой появляется дочерняя форма «Задолжники»где можно увидеть наименование диска и данные задолжника и количество дней. Для удобства пользователя главная форма содержит несколько вкладок, где и находятся таблицы. Работать с базой можно как непосредственно из главной формы, так и вызвав отдельное окно из главного меню формы. Так пункт меню «Файл» содержит такие подпункты как «Новое» и «Выход». Сделать новую запись в таблице Клиенты(CLIENT) можно выбрав «Файл» -> «Новое..» -> «Клиент». После чего появится окно «Клиент» (Рис. 2), где пользователю представляется возможность заполнения каждого из предложенного полей. Кнопки «Удалить» и «Исправить» в режиме вставки не активны.
Процесс редактирования данных происходит в том же самом окне, при выборе меню «Правка» -> «Изменить..» -> «Клиент». В этом же окне появляются уведомления пользователя о недопустимых ошибках. В таблице Клиенты(CLIENT) обязательно для заполнения поле ID_C, если пользователь забывает заполнить это поле, программа уведомит его об этом.
Кнопка «Удалить» позволяет удалить запись избазы. Нельзя удалить данные о клиенте, если в таблице «Счета» есть связанные сним записи, программа предупреждает об этом пользователя, показывая соответствующеесообщение (Рис. 4). В режиме изменение неактивна кнопка «Запись» и появляетсядополнительная панель с кнопками навигации по таблице. И, наконец, длязавершения работы с формой «Клиент» нужно нажать кнопку закрытия окна, ипользователь попадает на форму главного меню.
При редактировании таблицы Фильмы пользователюнужно учитывать, что невозможно удалить данные о фильме, если его количество наскладе больше 0.
При выборе пункта меню «Счёт» или соответствующейвкладки главной формы пользователь может работать со счетами клиентов. Припоявлении окна «Новое..» -> «Счёт» пользователь должен ввести штрих кодфильма и выбрать фамилию клиента, остальные поля заполняются автоматически(поля — стоимость и дата и возврат). Дата выставляется текущая, а полестоимость изначально берется из таблицы MOVIE а потом высчитывается с учетомскидок клиенту, возврату автоматически присваивается “N”.
Когда клиент возвращает фильм, то следуетпоставить в этом поле “Y” в ручную или через сканер. При этом количество фильмовв базе увеличивается на 1.
На вкладке Счета также есть кнопки «Режим masterdetail» и «Cведенная таблица». При нажатии на кнопку «Сведенная таблица».Появляется окно с этой таблицей, которая является аналогом таблицы «Счета».Такая таблица может только отображать данные, редактировать их невозможно.Удобство её заключено в том, что листаться она будет заметно быстрее. Листаниеполного экрана таблицы состоящей из тысячи записей происходит в доли секунды, вто время как таблица «Счета» листается с заметными задержками.
Кнопкой «Режим master detail» можно вызвать окно,где пользователь может одновременно просматривать и редактировать данные оклиенте и его счетах.
Выбрав меню «Поиск» можно задействовать поиск потаблицам. Поиск по строковому полю позволяет искать по части слова и показываетвсе формы этого слова.
Последняя вкладка «SQL» (Рис. 5) позволяетпродвинутым пользователям выполнять различные действия с базой данных, такиекак поиск, выборка данный и т.д. Менеджеру будет удобнее просматривать отчётыиспользуя привычный Excel. Для удобства менеджера в Excel есть отчёты позаказам за период, отчёт по персоналу, поиск лучшего клиента месяца и т.д. Приэтом не требуется устанавливать на машину клиентское приложение.

Список литературы
1.  Фаронов В.В. Delphi 5.Руководство программиста. Нолидж. 2001.
2.  Фаронов ВВ. Delphi 2005Разработка приложений для баз данных и интернета. — СПб: Питер, 2006.
3.  Хансен Г., Хансен Д. Базыданных. Разработка и управление. — М., Бином. 2000.ПриложениеЛистинг программы
 
Unit2:
interface
uses
Windows,Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DB,IBCustomDataSet, Grids, DBGrids, StdCtrls, ExtCtrls, DBCtrls,
ComCtrls,IBTable, XPMan, Menus, IBQuery;
type
TForm2 =class(TForm)
DBGrid1:TDBGrid;
DataSource1:TDataSource;
Button1:TButton;
PageControl1:TPageControl;
TabSheet1:TTabSheet;
TabSheet2:TTabSheet;
TabSheet3:TTabSheet;
DBNavigator1:TDBNavigator;
DBGrid2:TDBGrid;
DataSource2:TDataSource;
Button2:TButton;
DBNavigator2:TDBNavigator;
DBGrid3:TDBGrid;
Panel1:TPanel;
DataSource3:TDataSource;
Button3:TButton;
TabSheet4:TTabSheet;
XPManifest1:TXPManifest;
Button4:TButton;
MainMenu1:TMainMenu;
N1:TMenuItem;
N2:TMenuItem;
N4:TMenuItem;
N5:TMenuItem;
N6:TMenuItem;
N3:TMenuItem;
N7:TMenuItem;
N8:TMenuItem;
N9:TMenuItem;
About1:TMenuItem;
N10:TMenuItem;
N11:TMenuItem;
N12:TMenuItem;
N13:TMenuItem;
N14:TMenuItem;
DBGrid4:TDBGrid;
Edit1: TEdit;
IBQuery1:TIBQuery;
DataSource4:TDataSource;
procedureButton4Click(Sender: TObject);
procedureN12Click(Sender: TObject);
procedureN6Click(Sender: TObject);
procedureN4Click(Sender: TObject);
procedureN3Click(Sender: TObject);
procedureButton3Click(Sender: TObject);
procedure Button2Click(Sender:TObject);
procedureButton1Click(Sender: TObject);
private
{ Privatedeclarations }
public
{ Publicdeclarations }
end;
var
Form2:TForm2;
implementation
uses Unit3,Unit1, Unit4, Unit5, Unit6;
{$R *.dfm}
procedureTForm2.Button1Click(Sender: TObject);
begin
Form1.Show;
end;
procedureTForm2.Button2Click(Sender: TObject);
begin
try
DataSource1.DataSet.Delete;
except
ShowMessage('Нельзяудалить данные о клиенте если в таблице База есть связанные записи!');
end;
end;
procedureTForm2.Button3Click(Sender: TObject);
begin
Form4.Show;
end;
procedureTForm2.N3Click(Sender: TObject);
begin
Form2.Close;
end;
procedureTForm2.N4Click(Sender: TObject);
begin
Form5.Show;
Form5.Button1.Enabled:=true;
Form5.Panel2.Visible:=false;
Form5.Button3.Enabled:=false;
Form5.Button4.Enabled:=false;
end;
procedureTForm2.N6Click(Sender: TObject);
begin
Form6.Show;
end;
procedureTForm2.N12Click(Sender: TObject);
begin
Form5.Show;
Form5.Button1.Enabled:=false;
DataSource1.DataSet.Cancel;
DataSource1.DataSet.First;
Form5.Panel2.Visible:=true;
Form5.Button3.Enabled:=true;
Form5.Button4.Enabled:=true;
end;
procedureTForm2.Button4Click(Sender: TObject);
begin
if Edit1.Text'' then
begin
IbQuery1.SQL.Text:=Edit1.Text;
Form2.DataSource4.DataSet.Active:=true;
end
elseShowMessage('Пустой запрос!');
end;
end.
Unit4:
unit Unit4;
interface
uses
Windows,Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs,StdCtrls, DB, Grids, DBGrids, IBCustomDataSet;
type
TForm4 =class(TForm)
IBDataSet1:TIBDataSet;
DBGrid1:TDBGrid;
DBGrid2:TDBGrid;
DataSource1:TDataSource;
DataSource2:TDataSource;
CheckBox1:TCheckBox;
procedureCheckBox1Click(Sender: TObject);
private
{ Privatedeclarations }
public
{ Publicdeclarations }
end;
var
Form4:TForm4;
implementation
uses Unit2,Unit3;
{$R *.dfm}
procedureTForm4.CheckBox1Click(Sender: TObject);
begin
ifCheckBox1.State = cbchecked then
begin
DataModule3.IBDataSet1.Active:=False;
Form4.IBDataSet1.SelectSQL.SetText('SELECT* FROM DEAL WHERE CL_ID =:ID_C');
Form4.IBDataSet1.Open;
DataModule3.IBDataSet1.Open;
end else
begin
Form4.IBDataSet1.Close;
DataModule3.IBDataSet1.Close;
Form4.IBDataSet1.SelectSQL.SetText('SELECT* FROM DEAL');
Form4.IBDataSet1.Active:=True;
DataModule3.IBDataSet1.Active:=True;
end;
end;
end.
Unit5:
unit Unit5;
interface
uses
Windows,Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs,ExtCtrls, StdCtrls, DBCtrls, Mask, DB, IBCustomDataSet;
type
TForm5 =class(TForm)
DBEdit1:TDBEdit;
Label1:TLabel;
Label2:TLabel;
Button1:TButton;
Button2:TButton;
Panel1:TPanel;
DBMemo1:TDBMemo;
DataSource1:TDataSource;
Panel2:TPanel;
Button3:TButton;
Button4:TButton;
Button5:TButton;
Button6:TButton;
procedureButton6Click(Sender: TObject);
procedureButton5Click(Sender: TObject);
procedureButton4Click(Sender: TObject);
procedureFormClose(Sender: TObject; var Action: TCloseAction);
procedureFormShow(Sender: TObject);
procedureButton3Click(Sender: TObject);
procedureButton2Click(Sender: TObject);
procedure Button1Click(Sender:TObject);
private
{ Privatedeclarations }
public
{ Publicdeclarations }
end;
var
Form5:TForm5;
implementation
uses Unit2,Unit4, Unit1, Unit3;
{$R *.dfm}
procedureTForm5.Button1Click(Sender: TObject);
varname,p:string;
begin
name:=DbEdit1.Text;
p:=DbMemo1.Text;
try
DataSource1.DataSet.FieldByName('FIO').AsString:=name;
DataSource1.DataSet.FieldByName('PASPORT').AsString:=p;
DataSource1.DataSet.Post;
DataSource1.DataSet.Append;
except
ShowMessage('ПолеФИО обязательно для заполнения');
end;
end;
procedureTForm5.Button2Click(Sender: TObject);
begin
DbEdit1.Clear;
DbMemo1.Clear;
end;
procedureTForm5.Button3Click(Sender: TObject);
begin
try
Form2.DataSource1.DataSet.Delete;
except
ShowMessage('Нельзяудалить данные о клиенте если в таблице База есть связанные записи!');
end;
end;
procedureTForm5.FormShow(Sender: TObject);
begin
DataSource1.DataSet.Append;
end;
procedureTForm5.FormClose(Sender: TObject; var Action: TCloseAction);
begin
DataSource1.DataSet.Cancel;
end;
procedureTForm5.Button4Click(Sender: TObject);
begin
Form2.DataSource1.DataSet.Post;
end;
procedureTForm5.Button5Click(Sender: TObject);
begin
Form2.DataSource1.DataSet.Prior;
end;
procedureTForm5.Button6Click(Sender: TObject);
begin
Form2.DataSource1.DataSet.Next;
end;
end.
Unit6:
interface
uses
Windows,Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, DB,DBCtrls, StdCtrls, IBCustomDataSet, IBQuery, Mask;
type
TForm6 =class(TForm)
DBLookupComboBox1:TDBLookupComboBox;
DataSource1:TDataSource;
Edit1: TEdit;
Button1:TButton;
Label1:TLabel;
Label2:TLabel;
IBQuery1:TIBQuery;
DataSource2:TDataSource;
DBEdit1:TDBEdit;
procedureFormClose(Sender: TObject; var Action: TCloseAction);
procedureButton1Click(Sender: TObject);
procedureFormShow(Sender: TObject);
private
{ Privatedeclarations }
public
{ Publicdeclarations }
end;
var
Form6:TForm6;
s:string;
implementation
uses Unit3;
{$R *.dfm}
procedureTForm6.FormShow(Sender: TObject);
begin
DataSource1.DataSet.Append;
end;
procedureTForm6.Button1Click(Sender: TObject);
var s:string;
begin
Form6.IBQuery1.Active:=false;
s:='selectMONEY from movie where movie.id = '+ Edit1.Text;
Form6.IBQuery1.SQL.text:=s;
Form6.IBQuery1.Active:=true;
Form6.DBEdit1.DataField:='MONEY';
DataSource1.DataSet.FieldByName('DEN').AsString:=Form6.DBEdit1.Text;
DataSource1.DataSet.FieldByName('ID_M').AsString:=Edit1.Text;
DataSource1.DataSet.Post;
DataSource1.DataSet.Append;
end;
procedureTForm6.FormClose(Sender: TObject; var Action: TCloseAction);
begin
DataSource1.DataSet.Cancel;
end;
end.
Unit7:
interface
uses
Windows,Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs,StdCtrls;
type
TForm7 =class(TForm)
ComboBox1:TComboBox;
Button1:TButton;
Edit1: TEdit;
ComboBox2:TComboBox;
procedureComboBox2Change(Sender: TObject);
procedureButton1Click(Sender: TObject);
procedureComboBox1Change(Sender: TObject);
private
{ Privatedeclarations }
public
{ Publicdeclarations }
end;
var
Form7:TForm7;
tb,k:string;
implementation
uses Unit2;
{$R *.dfm}
procedureTForm7.ComboBox1Change(Sender: TObject);
begin
ifCombobox1.Items.Strings[Combobox1.ItemIndex]='Фильмы' then
begin
tb:='MOVIE';
Combobox2.Items.Clear;
Combobox2.Items.Add('ID');
Combobox2.Items.Add('NAME_FILM');
Combobox2.Items.Add('DIRECTOR');
Combobox2.Items.Add('KOL');
Combobox2.Items.Add('MONEY');
Combobox2.Items.Add('GANR');
Combobox2.Items.Add('DESCRIPTION');
end else
begin
tb:='CLIENT';
Combobox2.Items.Clear;
Combobox2.Items.Add('ID_C');
Combobox2.Items.Add('FIO');
Combobox2.Items.Add('PASPORT');
end;
ifCombobox1.Items.Strings[Combobox1.ItemIndex]='Счета' then
begin
tb:='DEAL';
Combobox2.Items.Clear;
Combobox2.Items.Add('ID_D');Combobox2.Items.Add('ID_M');
Combobox2.Items.Add('CL_ID');Combobox2.Items.Add('DEN');
Combobox2.Items.Add('D_D');
end;
end;
procedureTForm7.Button1Click(Sender: TObject);
var
zapros:string;
begin
if (k ='ID_C') or (k = 'ID') or (k = 'ID_D') or(k='KOL') or (k='MONEY') or(k='ID_M')or (k='CL_ID')
then
zapros:='SELECT* from '+tb+' where '+k+'='+Edit1.Text
else
zapros:='SELECT* from '+tb+' where '+k+' LIKE '+'''%'+Edit1.Text+'%''';
Form2.IBQuery1.SQL.Text:=zapros;
Form2.DataSource4.DataSet.Active:=true;
Form7.Close;
Form2.PageControl1.ActivePage:=Form2.PageControl1.Pages[4];
Form2.FocusControl(Form2.PageControl1);
end;
procedureTForm7.ComboBox2Change(Sender: TObject);
begin
k:=Combobox2.Items.Strings[Combobox2.ItemIndex];
end;
end.
 
Скрипты:
 
DOMAINS:
CREATE DOMAIND_GANR AS
VARCHAR(10)CHARACTER SET NONE
NOT NULL
CHECK (VALUEIN ('comedy', 'action', 'melodramm', 'fantasy', 'horror'))
COLLATE NONE
Tables:
CLIENT:
/******************************************************************************/
/**** Tables ****/
/******************************************************************************/
CREATEGENERATOR GEN_CLIENT_ID_C;
CREATE TABLECLIENT (
ID_C INTEGER,
FIO VARCHAR(50)NOT NULL,
PASPORT VARCHAR(50)
);
/******************************************************************************/
/**** PrimaryKeys ****/
/******************************************************************************/
ALTER TABLECLIENT ADD PRIMARY KEY (ID_C);
/******************************************************************************/
/**** Triggers****/
/******************************************************************************/
SET TERM ^;
/******************************************************************************/
/**** Triggersfor tables ****/
/******************************************************************************/
/* Trigger:TRIG_CLIENT */
CREATETRIGGER TRIG_CLIENT FOR CLIENT
ACTIVE BEFOREINSERT POSITION 0
AS BEGIN
IF (NEW.id_cIS NULL) THEN NEW.id_c = GEN_ID(gen_client_id_c,1);
END
^
DEAL:
/******************************************************************************/
/**** Tables ****/
/******************************************************************************/
CREATEGENERATOR GEN_DEAL_ID;
CREATE TABLEDEAL (
ID_D INTEGER,
ID_M INTEGERNOT NULL,
CL_ID INTEGERNOT NULL,
DEN NUMERIC(4,2),
D_D DATE
);
/******************************************************************************/
/**** PrimaryKeys ****/
/******************************************************************************/
ALTER TABLEDEAL ADD PRIMARY KEY (ID_D);
/******************************************************************************/
/**** ForeignKeys ****/
/******************************************************************************/
ALTER TABLEDEAL ADD FOREIGN KEY (CL_ID) REFERENCES CLIENT (ID_C) ON UPDATE CASCADE;
ALTER TABLEDEAL ADD FOREIGN KEY (ID_M) REFERENCES MOVIE (ID) ON DELETE CASCADE ON UPDATECASCADE;
/******************************************************************************/
/**** Triggersfor tables ****/
/******************************************************************************/
/* Trigger:DEC_MONEY */
CREATETRIGGER DEC_MONEY FOR DEAL
ACTIVE AFTERINSERT POSITION 0
AS
declarevariable x integer;
begin
SelectCount(New.cl_id) from DEAL
into:x;
if (:x >3) then
begin
update Deal
set Deal.den= (DEAL.den — DEAL.den/100*10)
whereDEAL.id_d = New.id_d;
end
end
/* Trigger:SUB_MOVIE */
CREATETRIGGER SUB_MOVIE FOR DEAL
ACTIVE AFTERINSERT POSITION 0
AS
begin
update movie
set movie.kol= movie.kol — 1
wheremovie.id = new.id_m;
end
/* Trigger:TRIG_DEAL_BI */
CREATETRIGGER TRIG_DEAL_BI FOR DEAL
ACTIVE BEFOREINSERT POSITION 0
AS BEGIN
IF (NEW.Id_dIS NULL) THEN NEW.Id_d = GEN_ID(Gen_DEAL_ID,1);
END
MOVIE:
/******************************************************************************/
/**** Tables ****/
/******************************************************************************/
CREATEGENERATOR GEN_DEAL_ID;
CREATE TABLEDEAL (
ID_D INTEGER,
ID_M INTEGERNOT NULL,
CL_ID INTEGERNOT NULL,
DEN NUMERIC(4,2),
D_D DATE
);
/******************************************************************************/
/**** PrimaryKeys ****/
/******************************************************************************/
ALTER TABLEDEAL ADD PRIMARY KEY (ID_D);
/******************************************************************************/
/**** ForeignKeys ****/
/******************************************************************************/
ALTER TABLEDEAL ADD FOREIGN KEY (CL_ID) REFERENCES CLIENT (ID_C) ON UPDATE CASCADE;
ALTER TABLEDEAL ADD FOREIGN KEY (ID_M) REFERENCES MOVIE (ID) ON DELETE CASCADE ON UPDATECASCADE;
/******************************************************************************/
/**** Triggersfor tables ****/
/******************************************************************************/
/* Trigger:DEC_MONEY */
CREATETRIGGER DEC_MONEY FOR DEAL
ACTIVE AFTERINSERT POSITION 0
AS
declarevariable x integer;
begin
SelectCount(cl_id) from DEAL where cl_id = New.cl_id group by cl_id
into:x;
if (:x >3) then
begin
update Deal
set Deal.den= (DEAL.den — DEAL.den/100*10)
whereDEAL.id_d = New.id_d;
end
end
/* Trigger:SUB_MOVIE */
CREATETRIGGER SUB_MOVIE FOR DEAL
ACTIVE AFTERINSERT POSITION 0
AS
begin
update movie
set movie.kol= movie.kol — 1
wheremovie.id = new.id_m;
end
/* Trigger:TRIG_DEAL_BI */
CREATETRIGGER TRIG_DEAL_BI FOR DEAL
ACTIVE BEFOREINSERT POSITION 0
AS BEGIN
IF (NEW.Id_dIS NULL) THEN NEW.Id_d = GEN_ID(Gen_DEAL_ID,1);
END
EXCEPTION:
CREATEEXCEPTION NO_DELETE 'Нельзя удалить фильм если он имеется на складе!';
VIEW:
CREATE VIEWBESTCLIENT(FIO)
AS
select FIOfrom client where id_c =(select cl from(select deal.cl_id as cl, count (cl_id)as col from deal group by deal.cl_id HAVING count (cl_id) >=All (selectcount (cl_id) as col from deal group by deal.cl_id)));


Не сдавайте скачаную работу преподавателю!
Данный реферат Вы можете использовать для подготовки курсовых проектов.

Поделись с друзьями, за репост + 100 мильонов к студенческой карме :

Пишем реферат самостоятельно:
! Как писать рефераты
Практические рекомендации по написанию студенческих рефератов.
! План реферата Краткий список разделов, отражающий структура и порядок работы над будующим рефератом.
! Введение реферата Вводная часть работы, в которой отражается цель и обозначается список задач.
! Заключение реферата В заключении подводятся итоги, описывается была ли достигнута поставленная цель, каковы результаты.
! Оформление рефератов Методические рекомендации по грамотному оформлению работы по ГОСТ.

Читайте также:
Виды рефератов Какими бывают рефераты по своему назначению и структуре.

Сейчас смотрят :

Реферат Возникновение Православия
Реферат Миф об Улликумми
Реферат Особливості багатозадачності в середовищі Windows
Реферат Счетчики 2
Реферат Значение русского языка
Реферат Rule Of Northumberland And Somerset 1549
Реферат Молекулярно-цитогенетична характеристика синдромів сегментних анеусомій
Реферат История Элама
Реферат 11 году в суды было предъявлено 13 исков, вытекающих из деятельности Управления Федеральной службы судебных приставов по Пензенской области (далее Управление)
Реферат Events Of 1968 Essay Research Paper During
Реферат Дерябин Андрей Федорович
Реферат Социалистическая политико-правовая идеология в Западной Европе в первой половине XIX в
Реферат КУРСОВАЯ РАБОТА по аудиту, на тему: «Аудит учета кассовых операций»
Реферат The Bachae Essay Research Paper The Bacchae
Реферат Системный подход к решению проблемы творческого саморазвития личности школьника в учреждение дополнительного образования