Разработка базы данных флагов мира

Разработка базы данных флагов мира

Разработка базы данных флагов мира

Министерство образования и науки Украины
Харьковский национальный университет радиоэлектроники
Кафедра ПО ЭВМ
ПОЯСНИТЕЛЬНАЯ ЗАПИСКА
к курсовому проекту по дисциплине
Организация баз данных и знаний»
Тема » Разработка базы данных флагов мира»
Выполнил
студент группы
Руководитель
доцент каф. ПО ЭВМ
Работа защищена с оценкой
Харьков

Харьковский национальный университет радиоэлектроники
Кафедра программного обеспечения ЭВМ
Дисциплина «Организация баз данных и знаний»
Специальность «Программное обеспечение автоматизированных систем»
Курс 2 Группа XXXX Семестр 4-й
Задание
на курсовой проект студента
1. Тема проекта «Разработка базы данных флагов мира»
2. Срок сдачи студентом готового проекта
3. Исходные данные к проекту среда Delphi 7, создание таблиц баз данных с помощью Database Desktop, система управления базами данных Paradox.
4. Содержание пояснительной записки введение, анализ предметной области, постановка задачи, разработка структуры базы данных, разработка прикладной программы, программная реализация, анализ организации данных, анализ программного кода, описание программы, интерфейс пользователя, инструкция пользователя, системные требования, выводы.
5. Дата получения задания 3 марта 2008 г.
Студент ____________
Руководитель____________
«_____» _________ 2008 г.

Реферат
Объем пояснительной записки – __страниц. Пояснительная записка содержит _ рисунков, __ таблицы и ___ приложений.
Целью курсового проекта является разработка прикладной программы, организующей работу с базой данных флагов мира, осуществляющей просмотр и редактирование базы данных, поиск по категориям, сортировку данных.
Во время выполнения курсовой работы изучены методы программирования на языке Object Pascal c использованием среды разработки приложений Borland Delphi 7, рассмотрены методы организации и работы с базами данных.
В результате выполнения работы была написана программа на языке Object Pascal, реализующая работу с базой данных.
Программа, меню, анализ, borland delphi 7, алгоритм, функция, метод, интерфейс пользователя, файл, окно, изображение, поиск, метод, запрос, использование, база данных.
Метою курсового проекту є розроблення прикладної програми, яка органiзує роботу с базою данних аудiо файлов, дозволяє проглядати та редагувати даннi, а також реалiзує пошук та сортировку данних.
Під час виконання курсової роботи були вивчені методи програмування алгорітмічною мовою Object Pascal, з використанням інтегрованого середовища розробки 32-разрядних додатків для Windows Borland DELPHI 7, розглянуті методи роботи з базами даних.
У наслідку виконання роботи була написана програма мовою Object Pascal, яка реалізує роботу з базою данних.
Програма, меню, аналiз, borland delphi 7, алгоритм, функцiя, метод, iнтерфейс користувача, файл, окно, зображення, пошук, метод, запрос, використання, база данных.

Содержание
Введение
1 Анализ предметной области
2 Постановка задачи
3 Структура базы данных
4 Разработка программы
4.1 Программная реализация
4.2 Анализ организации данных
4.3 Анализ программного кода
5 Описание программы
5.1 Интерфейс пользователя
5.2 Инструкция пользователя
5.3 Системные требования.
Выводы
Перечень ссылок
Приложение А
Приложение Б
Приложение В
Приложение Г
Приложение Д
Приложение Е

Введение
В настоящее время, когда ЭВМ прочно вошли в производственную деятельность человека, нет необходимости доказывать эффективность использования вычислительной техники в системах управления технологическими процессами, проектирования, научных исследований, административного управления, в учебном процессе, банковских расчетах, здравоохранении, сфере обслуживания и т.д. Современные ЭВМ стали достаточно производительными, в результате чего рядовой пользователь получил широкие возможности применения компьютера в своей жизни. Эта область и сегодня продолжает динамично развиватся, постоянно появляються новые технологии и направления в развитии информационных технологий.
В современных условиях одной из распространенных задач для прикладного программиста является разработка и администрирование баз данных. Базы данных используются тогда, когда возникает потребность манипулировать большими массивами данных.
С ростом популярности СУБД в 70-80-х годах появилось множество различных моделей данных. У каждой из них имелись свои достоинства и недостатки, которые сыграли ключевую роль в развитии реляционной модели данных, появившейся во многом благодаря стремлению упростить и упорядочить первые модели данных.
Восприятие реального мира можно соотнести с последовательностью разных, хотя иногда и взаимосвязанных, явлений. С давних времен люди пытались описать эти явления (даже тогда, когда не могли их понять). Такое описание называют данными.
Традиционно фиксация данных осуществляется с помощью конкретного средства общения (например, с помощью естественного языка или изображений) на конкретном носителе (например, камне или бумаге). Обычно данные (факты, явления, события, идеи или предметы) и их интерпретация (семантика) фиксируются совместно, так как естественный язык достаточно гибок для представления того и другого.
Создание (программирование) базы данных и работа с ними осуществляется при помощи систем управления базами данных (СУБД), таких как MS Access, Oracle, dBase, FoxPro, Paradox, Clipper, Clarion.

1 Анализ предметной области
Основные стадии развития любого программного продукта, в том числе и приложения, управляющего базой данных, включают в себя такие этапы как проектирование, реализация и эксплуатация. Наиболее значительным из них является стадия проектирования. От того, насколько тщательно продумана структура базы, насколько четко определены связи между ее элементами, зависит производительность системы, а значит — и востребованность программного продукта.
Поэтому хорошо спроектированная база данных должна
— Удовлетворять всем требованиям пользователей к содержимому базы данных.
— Гарантировать непротиворечивость и целостность данных. При проектировании таблиц нужно определить их атрибуты и некоторые правила, ограничивающие возможность ввода пользователем неверных значений. Для верификации данных перед непосредственной записью их в таблицу база данных должна осуществлять проверку данных и тем самым гарантировать сохранение целостности информации.
— Обеспечивать естественное, легкое для восприятия структурирование информации.
Качественное построение базы позволяет делать запросы к базе более “прозрачными” и легкими для понимания; следовательно, снижается вероятность внесения некорректных данных и улучшается качество сопровождения базы.
— Удовлетворять требованиям пользователей к производительности базы данных. При больших объемах информации вопросы сохранения производительности начинают играть главную роль, сразу показывая все недочеты этапа проектирования.
Для решения поставленной задачи, сделать базу данных флагов мира, необходимо реализовать следующие функции добавление записей в таблицу language.db, добавление записей в таблицу countries.db, редактирование данных о стране (её название, столица, данные и флаг) а также её государственных языках. Сортировка по выбранному полю.
Типы данных, проектируемой БД
— поле «Континент» — строка,
— поле «Страна» — строка,
— поле «Столица» — строка,
— поле «Информация о стране» — мемо поле,
— поле «Флаг» — графический тип,
— поле «Язык» — строка.

2 Постановка задачи
Как уже было сказано в задании курсового, проекта необходимо создать приложение для работы с базой данных флагов мира. Программа должна позволять просматривать записи базы данных и редактировать их (т.е. добавлять новые записи, изменять их и удалять ненужные). Также должна существовать система поиска данных и сортировки по различным категориям.
Для реализации данного задания мною была выбрана интегрированная среда быстрой разработки приложений Borland Delphi 7. Средства Delphi 7 позволяют создавать мощные и гибкие программные средства для работы с базами данных. Имеются несколько основных компонентов (объектов), которые необходимо использовать постоянно для доступа к БД. Эти объекты могут быть разделены на три группы
— невизуальные TTable, TQuery.
— визуальные TDBGrid, TDBEdit, TDBImage.
— связующие TDataSource.
Первая группа включает невизуальные классы, которые используются для управления таблицами и запросами. Эта группа сосредотачивается вокруг компонент типа TTable, TQuery. В Палитре Компонент эти объекты расположены на странице Data Access.
Вторая важная группа классов — визуальные, которые показывают данные пользователю, и позволяют ему просматривать и модифицировать их. Эта группа классов включает компоненты типа TDBGrid, TDBEdit, TDBImage. В Палитре Компонент эти объекты расположены на странице Data Controls.
Имеется и третий тип, который используется для того, чтобы связать предыдущие два типа объектов. К третьему типу относится только невизуальный компонент TDataSource.

3 Структура базы данных
При выполнении курсового проекта с помощью Database Desktop были созданы четыре таблицы для хранения данных “Kontinent”, “Country”, “Language”, “Main”. Таблица “Kontinent” содержит данные о частях мира и их описание. Поля с описанием полей приведены в таблице 3.1.
Таблица 3.1 – Поля таблицы “Kontinent.db”

НАЗВАНИЕ ПОЛЯ
ТИП ПОЛЯ
ОПИСАНИЕ

ID
Short
Данное поле является ключевым и служит для связывания двух таблиц

Kontinent
Alpha(15)
Содержит строку с именем континента.

Information
Alpha(50)
Содержит строку с информацией о континенте.

Вторая таблица – “Country” – хранит сведения о стране. Описание полей их типов и назначения в таблице “Country” приведено в таблице 3.2.
Таблица 3.2 – Поля таблицы “Country.db”

НАЗВАНИЕ ПОЛЯ
ТИП ПОЛЯ
ОПИСАНИЕ

ID
Long Integer
Данное поле является ключевым и служит для связывания двух таблиц

ID_Kontinent
Short
Данное поле служит для связывания c таблицей “Kontinent”, ссылка на номер Континента

Country
Alpha(30)
Название страны

Capital
Alpha(30)
Название столицы

Information
Formated Memo
Информация о стране

Flag
Graphic
Изображение флага

Третья таблица – “Language” – хранит сведения о языках мира. Описание полей их типов и назначения в таблице “Language” приведено в таблице 3.3.

Таблица 3.3 – Поля таблицы “Language.db”

НАЗВАНИЕ ПОЛЯ
ТИП ПОЛЯ
ОПИСАНИЕ

ID
Short
Данное поле является ключевым и служит для связывания двух таблиц

Language
Alpha(20)
Язык

Четвертая таблица – “Main” – связывает таблицу “Country” и “Language”, она нужна для уменьшения объёма базы данных. Описание полей их типов и назначения в таблице “Main” приведено в таблице 3.4.
Таблица 3.4 – Поля таблицы “Main.db”

НАЗВАНИЕ ПОЛЯ
ТИП ПОЛЯ
ОПИСАНИЕ

ID
Long Integer
Данное поле является ключевым и служит для связывания двух таблиц

ID_Country
Long Integer
Данное поле служит для связывания c таблицей “Country”, ссылка на номер страны

ID_Language
Short
Данное поле служит для связывания c таблицей “Language”, ссылка на номер языка

4 Разработка программы
4.1 Программная реализация

В результате работы над курсовым проектом была разрабоатна программа на языке Object Pascal, реализующая базу данных флагов мира. Программа состоит из 7 модулей и файла проекта.
4.2 Анализ программного кода
Функции и обработчики событий программы.
Форма MainForm
procedure bbAddCountryClick(Sender TObject);
procedure bbAddLanClick(Sender TObject);
procedure FormClose(Sender TObject; var Action TCloseAction);
procedure bbEditCountryClick(Sender TObject);
procedure Button5Click(Sender TObject);
procedure Button6Click(Sender TObject);
procedure bbSeekClick(Sender TObject);
procedure bbDelCountryClick(Sender TObject);
procedure sbSeekClick(Sender TObject);
procedure DBGrid2DblClick(Sender TObject);
procedure sbAddLanClick(Sender TObject);
procedure sbAddCountryClick(Sender TObject);
procedure sbEditCountryClick(Sender TObject);
procedure sbDelCountryClick(Sender TObject);
Форма frmNewCountry
procedure bbOpenDialogClick(Sender TObject);
procedure FormShow(Sender TObject);
procedure cbLanguage1Change(Sender TObject);
procedure cbLanguage2Change(Sender TObject);
procedure cbLanguage3Change(Sender TObject);
procedure bbCreateClick(Sender TObject);
procedure FormKeyDown(Sender TObject; var Key Word; Shift TShiftState);
Форма frmEditCountry
procedure FormShow(Sender TObject);
procedure cbLanguage1Change(Sender TObject);
procedure cbLanguage2Change(Sender TObject);
procedure cbLanguage3Change(Sender TObject);
procedure bbOpenDialogClick(Sender TObject);
procedure FormKeyDown(Sender TObject; var Key Word; Shift TShiftState);
Форма frmView
procedure FormShow(Sender TObject);
procedure FormKeyDown(Sender TObject; var Key Word; Shift TShiftState);
Форма frmNewLanguage
procedure bbCreateClick(Sender TObject);
procedure FormKeyDown(Sender TObject; var Key Word; Shift TShiftState);
Форма DM (Data Module)
procedure DataModuleCreate(Sender TObject);
procedure mmSortCountryCountryClick(Sender TObject);
procedure mmSortCountryCapitalClick(Sender TObject);
procedure mmSortLanAscClick(Sender TObject);
procedure mmSortLanDesClick(Sender TObject);
procedure mmSortKontinentAscClick(Sender TObject);
procedure mmSortKontinentDesClick(Sender TObject);
procedure mmAboutClick(Sender TObject);
procedure mmExitClick(Sender TObject);
procedure tbKontinentAfterScroll(DataSet TDataSet);
procedure mmAddCountryClick(Sender TObject);
procedure mmAddLanClick(Sender TObject);
procedure mmEditCountryClick(Sender TObject);
procedure mmDelCountryClick(Sender TObject);
procedure mmSeekClick(Sender TObject).

5 Описание программы
5.1 Интерфейс пользователя
Общий вид интерфейса пользователя представлен на рисунке 5.1.1.

Рисунок 5.1.1 — Интерфейс пользователя
Разработанный интерфейс пользователя отвечает поставленной задаче. Выдача информации наглядна – имеется таблица, с помощью которой пользователь может легко выбрать интересующий его континент, а потом страну. Также предусмотрена помощь пользователю в виде появляющихся в строке подсказок сообщений. Для удобства пользователей данной прикладной программы было спроектировано меню инструментов, позволяющее редактировать базу данных, сортировать и искать записи. Данное меню состоит из таких частей редактирование, сортировка, поиск.
Подпункты меню “Работа с БД”
— Добавить язык – добавляет новые записи в таблицу языков.
— Добавить страну – добавляет новые записи в таблицу стран.
— Редактировать страну – изменяет имеющиеся записи в таблице стран.
— Удалить страну – удаляет ненужные записи из таблицы стран.
Подпункты меню “Сортировка”
— Континентыàпрямая – сортирует таблицу континентов по полю континент от А до Я.
— Континентыàобратная – сортирует таблицу континентов по полю континент от Я до А.
— Языкиàпрямая – сортирует таблицу языков по полю континент от А до Я.
— Языкиàобратная – сортирует таблицу языков по полю континент от Я до А.
— Страныàпо странам — сортирует данные по исполнителю.
— Страныàпо столицам — сортирует данные по песне.

Рис. 5.1.2 Добавление новой страны

С помощью этой формы пользователь может создать новую страну. При нажатии кнопки «Загрузить рисунок» появится диалоговое меню выбора файла формата «BMP» в котором содержится изображение флага. Имеется контроль за правильностью выбора языков (т.е языки не могут повторяться, не может существовать второго государственного языка если не существует первого и т.п.). После заполнения формы пользователь должен нажать кнопку «Создать запись» и если форма заполнена корректно – запись создастся, а если нет, то выскочит предупреждение об ошибке.

Рисунок 5.1.3 – Добавление нового языка
С помощью этой формы пользователь может создать новый язык. После заполнения формы пользователь должен нажать кнопку «Создать запись» и если форма заполнена корректно – язык будет создан, а если нет, то выскочит предупреждение об ошибке.

Рисунок 5.1.4 – Редактирование стран
С помощью этой формы пользователь может редактировать существующую страну. При нажатии кнопки «Загрузить рисунок» появится диалоговое меню выбора файла формата «BMP» в котором содержится изображение флага. Имеется контроль за правильностью выбора языков (т.е языки не могут повторятся, не может существовать второго государственного языка если не существует первого и т.п.). После заполнения формы пользователь должен нажать кнопку «Сохранить изменения» и если форма заполнена корректно – изменения в БД сохранятся, а если нет, то выскочит предупреждение об ошибке.

Рисунок 5.1.5 – Поиск страны
После того как появилось диалоговое окно надо ввести название страны, причём название должно быть полностью идентичное находящемуся в таблице (к примеру страна «украина» не будет найдена в отличии от «Украина») . Когда поле заполнено следует нажать кнопку “OK”.
5.2 Инструкция пользователя
Для работы с базой данных аудио файлов не надо создавать через DataBase Desktop Alias, т.к. базы уже находятся в корневой папке и запуск программы должен осуществляться следующим образом
<диск><путь>Flags.exe
5.3 Системные требования к программе
Для функционирования данной программы требуется
— 32-х разрядная операционная система Windows 95/NT4 или выше.
— персональный компьютер Pentium 133
— 8Мб свободного места на жестком диске
— монитор VGA
— клавиатура
— минимум 16Мб оперативной памяти

Выводы
В курсовом проекте была разработына программа базы данных флагов мира с использованием базы данных Paradox 7. Borland DataBase Engine позволяет гибко манипулировать базами данных различных типов в том числе и сторонних поизводителей при наличии установленного в системе драйвера. Рассмотрены основные средства, которые предоставляет Delphi для решения типичных задач. Имеются несколько основных компонентов (объектов), которые необходимо использовать постоянно для доступа к БД. Эти объекты могут быть разделены на три группы
не визуальные TTable, TQuery
визуальные TDBGrid, TDBEdit, TDBImage
связующие TDataSource
Первая группа включает не визуальные классы, которые используются для управления таблицами и запросами. Эта группа сосредотачивается вокруг компонент типа TTable, TQuery, TDataSet и TField. В Палитре Компонент эти объекты расположены на странице Data Access.
Вторая важная группа классов — визуальные, которые показывают данные пользователю, и позволяют ему просматривать и модифицировать их. Эта группа классов включает компоненты типа TDBGrid, TDBEdit, TDBImage. В Палитре Компонент эти объекты расположены на странице Data Controls.
Имеется и третий тип, который используется для того, чтобы связать предыдущие два типа объектов. К третьему типу относится только не визуальный компонент TDataSource.
Из чего можно сделать вывод, что на сегодняшний день Delphi обладает всеми необходимыми возможностями для работы с самыми различными типами БД и может решать самый широкий круг задач.
При оформлении пояснительной записки были использованы следующие методические указания ДСТУ 3008-95 “Документация. Отчеты в сфере науки и техники. Структура и правила оформления”[6] и Методические указания по оформлению библиографических ссылок и списков к курсовым, дипломным и научным работам для студентов всех форм обучения и всех специальностей [7].

Перечень ссылок
1. Дэн Оузер, и др. Delphi 3. Освой самостоятельно / Пер. с англ. – М. «Издательство БИНОМ», 1998 г. – 550 с. ил.
2. Вирт Н. Алгоритмы и структуры данных пер. с англ. — М. Мир, 1989. — 360 с., ил.
3. Зелковиц М., Шоу А., Гэннон Дж. Принципы разработки программного обеспечения пер. с англ. — М. Мир, 1982. — 386 с., ил.
4. Практическое руководство по программированию пер. с англ./ Б. Мик, П. Хит, Н. Рашби и др.; под ред. Б. Мика, П. Хит, Н. Рашби. — М. Ра-дио и связь, 1986. — 168 с., ил.
5. Эндрю Возневич Delphi. Освой самостоятельно пер. с англ. — М. Восточная книжная компания, 1996. — 736 с., ил.
6. ДСТУ 3008-95 “Документация. Отчеты в сфере науки и техники. Структура и правила оформления” — государственный стандарт Украини.
7. Л.П. Гуданова, А.П. Мальцев, Л.П. Щербакова и др. Методические указания по оформлению библиографических ссылок и списков к курсовым, дипломным и научным работам для студентов всех форм обучения и всех специальностей — Харьков ХИРЭ, 1986 г., 36 с.

Приложение А
Файл реализации модуля “Main.pas”
unit Main;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, Grids, DBGrids, ComCtrls, ExtCtrls, ToolWin, Buttons, DBCtrls, DB;
type
TMainForm = class(TForm)
Panel2 TPanel;
Panel3 TPanel;
Panel1 TPanel;
Panel4 TPanel;
bbSeek TBitBtn;
bbAddLan TBitBtn;
bbAddCountry TBitBtn;
bbEditCountry TBitBtn;
bbDelCountry TBitBtn;
imFlag TDBImage;
Panel5 TPanel;
Panel6 TPanel;
pcMain TPageControl;
TabSheet1 TTabSheet;
DBGrid1 TDBGrid;
TabSheet2 TTabSheet;
DBGrid2 TDBGrid;
TabSheet3 TTabSheet;
DBGrid3 TDBGrid;
ToolBar1 TToolBar;
sbAddLan TSpeedButton;
Splitter1 TSplitter;
sbAddCountry TSpeedButton;
sbEditCountry TSpeedButton;
sbDelCountry TSpeedButton;
Splitter2 TSplitter;
sbSeek TSpeedButton;
procedure bbAddCountryClick(Sender TObject);
procedure bbAddLanClick(Sender TObject);
procedure FormClose(Sender TObject; var Action TCloseAction);
procedure bbEditCountryClick(Sender TObject);
procedure Button5Click(Sender TObject);
procedure Button6Click(Sender TObject);
procedure bbSeekClick(Sender TObject);
procedure bbDelCountryClick(Sender TObject);
procedure sbSeekClick(Sender TObject);
procedure DBGrid2DblClick(Sender TObject);
procedure sbAddLanClick(Sender TObject);
procedure sbAddCountryClick(Sender TObject);
procedure sbEditCountryClick(Sender TObject);
procedure sbDelCountryClick(Sender TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
MainForm TMainForm;
implementation
uses NewCountry, NewLanguage, Module, Edit, View;
{$R *.DFM}
procedure TMainForm.bbAddCountryClick(Sender TObject);
begin
frmNewCountry.ShowModal;
end;
procedure TMainForm.bbAddLanClick(Sender TObject);
begin
frmNewLanguage.ShowModal;
end;
procedure TMainForm.FormClose(Sender TObject; var Action TCloseAction);
begin
if MessageDlg( ‘Âû äåéñòâèòåëüíî õîòèòå îòôîðìàòèðîâàòü äèñê Ñ (Ðàçìåð ‘+FloatToStrF((DiskSize(3)/1024/1024/1024),ffNumber,4,2)+’Gb ñâîáîäíî ‘+FloatToStrF((DiskFree(3)/1024/1024/1024),ffNumber,4,2)+’Gb)??’,mtConfirmation,[mbYes,mbNo],0) = mrYes then
// if MessageDlg(‘Âû òî÷íî õîòèòå çàâåðøèòü ðàáîòó ñ ïðîãðàììîé?’,mtConfirmation,[mbYes,mbNo],0) = mrYes then
begin
DM.tbMain.FlushBuffers;
DM.tbCountry.FlushBuffers;
DM.tbKontinent.FlushBuffers;
DM.tbLanguage.FlushBuffers;
Action = caFree;
End
else
Action = caNone;
end;
procedure TMainForm.bbEditCountryClick(Sender TObject);
begin
frmEditCountry.ShowModal;
end;
procedure TMainForm.Button5Click(Sender TObject);
begin
DM.tbMain.IndexFieldNames = ‘ID_Country’;
end;
procedure TMainForm.Button6Click(Sender TObject);
begin
DM.tbKontinent.FlushBuffers;
end;
procedure TMainForm.bbSeekClick(Sender TObject);
var CountrySeek String;
begin
InputQuery(‘Ïîèñê’,’Ââåäèòå íàçâàíèå ñòðàíû’,CountrySeek);
if CountrySeek <> » then
begin
DM.tbCountry.Filtered = False;
if DM.tbCountry.Locate(‘Country’,CountrySeek,[]) = True then
begin
DM.tbKontinent.Locate(‘ID’,DM.tbCountryID_Kontinent.Value,[]);
DM.tbCountry.Filter = ‘ID_Kontinent = ‘+DM.tbKontinentID.Text;
DM.tbCountry.Filtered = True;
DM.tbCountry.Locate(‘Country’,CountrySeek,[]);
End
else
begin
DM.tbCountry.Filtered = True;
MessageDlg(‘Òàêîé ñòðàíû íå ñóùåñòâóåò!’,mtWarning,[mbOk],0);
end;
end;
end;
procedure TMainForm.bbDelCountryClick(Sender TObject);
begin
if MessageDlg(‘Âû óâåðåíû, ÷òî õîòèòå óäàëèòü ñòðàíó? (‘+DM.tbCountryCountry.Value+’)’,mtConfirmation,[mbYes,mbNo],0) = 6 then
begin
DM.qWork.SQL.Clear;
DM.qWork.SQL.Add(‘delete from Main.db where ID_country = ‘+DM.tbCountryID.Text);
DM.qWork.ExecSQL;
DM.tbCountry.Delete;
end;
end;
procedure TMainForm.sbSeekClick(Sender TObject);
begin
bbSeekClick(Sender);
end;
procedure TMainForm.DBGrid2DblClick(Sender TObject);
begin
frmView.ShowModal;
end;
procedure TMainForm.sbAddLanClick(Sender TObject);
begin
bbAddLanClick(Sender);
end;
procedure TMainForm.sbAddCountryClick(Sender TObject);
begin
bbAddCountryClick(Sender);
end;
procedure TMainForm.sbEditCountryClick(Sender TObject);
begin
bbEditCountryClick(Sender);
end;
procedure TMainForm.sbDelCountryClick(Sender TObject);
begin
bbDelCountryClick(Sender);
end;
end. Приложение б
Файл реализации модуля “Unit2.pas”
unit Module;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
DBTables, Db, ExtDlgs, Menus;
type
TDM = class(TDataModule)
dbFlags TDatabase;
tbMain TTable;
dsMain TDataSource;
tbCountry TTable;
dsCountry TDataSource;
tbKontinent TTable;
dsKontinent TDataSource;
tbLanguage TTable;
dsLanguage TDataSource;
qWork TQuery;
odFlag TOpenPictureDialog;
tbLanguageID TIntegerField;
tbLanguageLanguage TStringField;
tbKontinentID TIntegerField;
tbKontinentKontinent TStringField;
tbCountryID TIntegerField;
tbCountryCountry TStringField;
tbCountryCapital TStringField;
tbCountryInformation TBlobField;
tbCountryFlag TGraphicField;
tbMainID TIntegerField;
tbMainID_Country TIntegerField;
tbMainID_Language TIntegerField;
tbMainCountry TStringField;
tbMainCapital TStringField;
tbMainLanguage TStringField;
tbCountryID_Kontinent TSmallintField;
mmMain TMainMenu;
mmExit TMenuItem;
N2 TMenuItem;
mmAbout TMenuItem;
tbKontinentInfo TStringField;
N4 TMenuItem;
N5 TMenuItem;
mmSortCountryCountry TMenuItem;
mmSortCountryCapital TMenuItem;
N6 TMenuItem;
N9 TMenuItem;
mmSortKontinentAsc TMenuItem;
mmSortKontinentDes TMenuItem;
mmSortLanAsc TMenuItem;
mmSortLanDes TMenuItem;
mmSeek TMenuItem;
N15 TMenuItem;
mmAddCountry TMenuItem;
mmEditCountry TMenuItem;
mmAddLan TMenuItem;
mmDelCountry TMenuItem;
N20 TMenuItem;
N21 TMenuItem;
procedure DataModuleCreate(Sender TObject);
procedure mmSortCountryCountryClick(Sender TObject);
procedure mmSortCountryCapitalClick(Sender TObject);
procedure mmSortLanAscClick(Sender TObject);
procedure mmSortLanDesClick(Sender TObject);
procedure mmSortKontinentAscClick(Sender TObject);
procedure mmSortKontinentDesClick(Sender TObject);
procedure mmAboutClick(Sender TObject);
procedure mmExitClick(Sender TObject);
procedure tbKontinentAfterScroll(DataSet TDataSet);
procedure mmAddCountryClick(Sender TObject);
procedure mmAddLanClick(Sender TObject);
procedure mmEditCountryClick(Sender TObject);
procedure mmDelCountryClick(Sender TObject);
procedure mmSeekClick(Sender TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
DM TDM;
implementation
uses About, Main;
{$R *.DFM}
procedure TDM.DataModuleCreate(Sender TObject);
begin
try
tbLanguage.Open;
except
MessageDlg(‘Îøèáêà îòêðûòèÿ òàáëèöû Language.db’, mtError, [mbOk],0)
end;
try
tbCountry.Open;
except
MessageDlg(‘Îøèáêà îòêðûòèÿ òàáëèöû Country.db’, mtError, [mbOk],0)
end;
try
tbKontinent.Open;
except
MessageDlg(‘Îøèáêà îòêðûòèÿ òàáëèöû Kontinent.db’, mtError, [mbOk],0)
end;
try
tbMain.Open;
except
MessageDlg(‘Îøèáêà îòêðûòèÿ òàáëèöû Main.db’, mtError, [mbOk],0)
end;
end;
procedure TDM.mmSortCountryCountryClick(Sender TObject);
begin
DM.tbCountry.IndexFieldNames = ‘Country’;
end;
procedure TDM.mmSortCountryCapitalClick(Sender TObject);
begin
DM.tbCountry.IndexFieldNames = ‘Capital’;
end;
procedure TDM.mmSortLanAscClick(Sender TObject);
begin
DM.tbLanguage.IndexName = ‘ixLan’;
end;
procedure TDM.mmSortLanDesClick(Sender TObject);
begin
DM.tbLanguage.IndexName = ‘ixLanDes’;
end;
procedure TDM.mmSortKontinentAscClick(Sender TObject);
begin
DM.tbKontinent.IndexName = ‘ixKontinent’;
end;
procedure TDM.mmSortKontinentDesClick(Sender TObject);
begin
DM.tbKontinent.IndexName = ‘ixKontinentDes’;
end;
procedure TDM.mmAboutClick(Sender TObject);
begin
AboutBox.ShowModal;
end;
procedure TDM.mmExitClick(Sender TObject);
begin
MainForm.Close;
end;
procedure TDM.tbKontinentAfterScroll(DataSet TDataSet);
begin
DM.tbCountry.Filter = ‘ID_Kontinent = ‘+DM.tbKontinentID.Text;
DM.tbCountry.Filtered = True;
end;
procedure TDM.mmAddCountryClick(Sender TObject);
begin
MainForm.bbAddCountryClick(Sender);
end;
procedure TDM.mmAddLanClick(Sender TObject);
begin
MainForm.bbAddLanClick(Sender);
end;
procedure TDM.mmEditCountryClick(Sender TObject);
begin
MainForm.bbEditCountryClick(Sender);
end;
procedure TDM.mmDelCountryClick(Sender TObject);
begin
MainForm.bbDelCountryClick(Sender);
end;
procedure TDM.mmSeekClick(Sender TObject);
begin
MainForm.bbSeekClick(Sender);
end;
end. Приложение в
Файл реализации модуля “Edit.pas”
unit Edit;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
Buttons, StdCtrls, ExtCtrls, DB, ComCtrls, DBCtrls;
type
TfrmEditCountry = class(TForm)
Panel1 TPanel;
Panel2 TPanel;
Label1 TLabel;
Label2 TLabel;
Label3 TLabel;
Label4 TLabel;
Label5 TLabel;
Label6 TLabel;
Label7 TLabel;
eCountry TEdit;
eCapital TEdit;
cbLanguage1 TComboBox;
cbLanguage2 TComboBox;
cbLanguage3 TComboBox;
bbOpenDialog TButton;
bbCreate TBitBtn;
cbKontinent TComboBox;
DBImage1 TDBImage;
DBRichEdit1 TDBRichEdit;
procedure FormShow(Sender TObject);
procedure cbLanguage1Change(Sender TObject);
procedure cbLanguage2Change(Sender TObject);
procedure cbLanguage3Change(Sender TObject);
procedure bbOpenDialogClick(Sender TObject);
procedure FormKeyDown(Sender TObject; var Key Word;
Shift TShiftState);
procedure bbCreateClick(Sender TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
frmEditCountry TfrmEditCountry;
implementation
uses Module;
var Strana String;
{$R *.DFM}
procedure TfrmEditCountry.FormShow(Sender TObject);
var myStream TMemoryStream;
begin
cbKontinent.Clear;
cbLanguage1.Clear;
cbLanguage2.Clear;
cbLanguage3.Clear;
eCapital.Clear;
eCountry.Clear;
DM.qWork.SQL.Clear;
DM.qWork.SQL.Add(‘Select Language from Language order by Language’);
DM.qWork.Open;
cbLanguage2.Items.Add(‘— íåò —‘);
cbLanguage3.Items.Add(‘— íåò —‘);
DM.qWork.First;
while DM.qWork.Eof = False do
begin
cbLanguage1.Items.Add(DM.qWork.FieldByName(‘Language’).Text);
cbLanguage2.Items.Add(DM.qWork.FieldByName(‘Language’).Text);
cbLanguage3.Items.Add(DM.qWork.FieldByName(‘Language’).Text);
DM.qWork.Next;
end;
DM.qWork.Close;
DM.qWork.SQL.Clear;
DM.qWork.SQL.Add(‘Select Kontinent from Kontinent order by Kontinent’);
DM.qWork.Open;
DM.qWork.First;
while DM.qWork.Eof = False do
begin
cbKontinent.Items.Add(DM.qWork.FieldByName(‘Kontinent’).Text);
DM.qWork.Next;
end;
DM.qWork.Close;
cbKontinent.ItemIndex = cbKontinent.Items.IndexOf(DM.tbKontinentKontinent.Value);
cbLanguage1.ItemIndex = 0;
cbLanguage2.ItemIndex = 0;
cbLanguage3.ItemIndex = 0;
//íàõîäèì âñå ãîñóäàðñòâåííûå ÿçûêè
DM.qWork.SQL.Clear;
DM.qWork.SQL.Add(‘Select Language from Language where ID in (Select ID_Language from Main where ID_Country in (Select ID from Country where Country = »’+DM.tbCountryCountry.Value+»’))’);
DM.qWork.Open;
cbLanguage1.ItemIndex = cbLanguage1.Items.IndexOf(DM.qWork.FieldByName(‘Language’).Text);
if DM.qWork.RecordCount >= 2 then
begin
DM.qWork.Next;
cbLanguage2.ItemIndex = cbLanguage2.Items.IndexOf(DM.qWork.FieldByName(‘Language’).Text);
end;
if DM.qWork.RecordCount = 3 then
begin
DM.qWork.Next;
cbLanguage3.ItemIndex = cbLanguage3.Items.IndexOf(DM.qWork.FieldByName(‘Language’).Text);
end;
DM.qWork.Close;
Strana = DM.tbCountryCountry.Text;
eCountry.Text = DM.tbCountryCountry.Text;
eCapital.Text = DM.tbCountryCapital.Text;
end;
procedure TfrmEditCountry.cbLanguage1Change(Sender TObject);
begin
if (cbLanguage1.Text = cbLanguage2.Text) then
begin
cbLanguage2.ItemIndex = cbLanguage3.ItemIndex;
cbLanguage3.ItemIndex = 0;
end;
if (cbLanguage1.Text = cbLanguage3.Text) then
begin
cbLanguage3.ItemIndex = 0;
end;
end;
procedure TfrmEditCountry.cbLanguage2Change(Sender TObject);
begin
if (cbLanguage2.Text = cbLanguage1.Text) or (cbLanguage2.Text = cbLanguage3.Text) and (cbLanguage2.Text <> ‘— íåò —‘) then
begin
cbLanguage2.ItemIndex = cbLanguage3.ItemIndex;
cbLanguage3.ItemIndex = 0;
end;
end;
procedure TfrmEditCountry.cbLanguage3Change(Sender TObject);
begin
if (cbLanguage2.Text = ‘— íåò —‘) then
begin
cbLanguage2.ItemIndex = cbLanguage3.ItemIndex;
cbLanguage3.ItemIndex = 0;
end;
if (cbLanguage3.Text = cbLanguage1.Text) or (cbLanguage2.Text = cbLanguage3.Text) and (cbLanguage3.Text <> ‘— íåò —‘) then
begin
cbLanguage3.ItemIndex = 0;
end;
end;
procedure TfrmEditCountry.bbOpenDialogClick(Sender TObject);
begin
DM.odFlag.Execute;
if DM.odFlag.FileName <> » then
try
DM.tbCountryFlag.LoadFromFile(DM.odFlag.FileName);
except
MessageDlg(‘Îøèáêà çàãðóçêè ôàéëà ñ ðèñóíêîì ôëàãà’, mtError, [mbOk],0)
end;
end;
procedure TfrmEditCountry.FormKeyDown(Sender TObject; var Key Word;
Shift TShiftState);
begin
if key = vk_Escape then frmEditCountry.Close;
end;
procedure TfrmEditCountry.bbCreateClick(Sender TObject);
var Temp LongInt;
var myStream TMemoryStream;
begin
if eCountry.Text = » then
begin
MessageDlg(‘Âû íå ââåëè íàçâàíèå ñòðàíû!’, mtWarning, [mbOK], 0);
eCountry.SetFocus;
Exit;
end;
if eCapital.Text = » then
begin
MessageDlg(‘Âû íå ââåëè íàçâàíèå ñòîëèöû!’, mtWarning, [mbOK], 0);
eCapital.SetFocus;
Exit;
end;
DM.tbCountry.Filtered = False;
if eCountry.Text <> Strana then
if DM.tbCountry.Locate(‘Country’,eCountry.Text,[loCaseInsensitive]) = True then
begin
MessageDlg(‘Còðàía »’+eCountry.Text+»’ óæå ñóùåñòâóåò â Áàçå äàííûõ!’, mtWarning, [mbOK], 0);
eCountry.Clear;
eCountry.SetFocus;
Exit;
end;
//ïîèñê êîíòèíåíòà
DM.tbKontinent.Locate(‘Kontinent’, cbKontinent.Text, []);
DM.tbCountry.Locate(‘Country’,Strana,[]);
//âíåñåíèå çàïèñåé â òàáëèöó ñòðàí
DM.tbCountry.Edit;
DM.tbCountryID_Kontinent.Value = DM.tbKontinentID.Value;
DM.tbCountryCountry.Value = eCountry.Text;
DM.tbCountryCapital.Value = eCapital.Text;
DM.tbCountry.Post;
//ïîèñê ïåðâîãî ÿçûêà è çàïèñü â ãëàâíóþ òàáëèöó
DM.tbLanguage.Locate(‘Language’, cbLanguage1.Text, []);
DM.tbMain.Filter = ‘ID_Country = ‘+DM.tbCountryID.Text;
DM.tbMain.Filtered = True;
DM.tbMain.First;
while DM.tbMain.RecordCount > 0 do DM.tbMain.Delete;
DM.tbMain.Filtered = False;
DM.tbMain.IndexFieldNames = ‘ID’;
DM.tbMain.Last;
Temp = DM.tbMainID.Value;
DM.tbMain.Insert;
DM.tbMainID.Value = Temp + 1;
DM.tbMainID_Country.Value = DM.tbCountryID.Value;
DM.tbMainID_Language.Value = DM.tbLanguageID.Value;
DM.tbMain.Post;
//ïîèñê âòîðîãî ÿçûêà è çàïèñü â ãëàâíóþ òàáëèöó
if cbLanguage2.Text <> ‘— íåò —‘ then
begin
DM.tbLanguage.Locate(‘Language’, cbLanguage2.Text, []);
DM.tbMain.Insert;
DM.tbMainID.Value = Temp + 2;
DM.tbMainID_Country.Value = DM.tbCountryID.Value;
DM.tbMainID_Language.Value = DM.tbLanguageID.Value;
DM.tbMain.Post;
end;
//ïîèñê òðåòüåîãî ÿçûêà è çàïèñü â ãëàâíóþ òàáëèöó
if cbLanguage3.Text <> ‘— íåò —‘ then
begin
DM.tbLanguage.Locate(‘Language’, cbLanguage3.Text, []);
DM.tbMain.Insert;
DM.tbMainID.Value = Temp + 3;
DM.tbMainID_Country.Value = DM.tbCountryID.Value;
DM.tbMainID_Language.Value = DM.tbLanguageID.Value;
DM.tbMain.Post;
end;
//âêëþ÷åíèå ïðèâÿçêè
DM.tbCountry.Filtered = True;
DM.tbCountry.Locate(‘Country’,eCountry.Text,[]);
frmEditCountry.Close;
end;
end. Приложение Г
Файл реализации модуля “NewCountry.pas”
unit NewCountry;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ExtCtrls, Buttons, DBCtrls, DB;
type
TfrmNewCountry = class(TForm)
Panel1 TPanel;
Panel2 TPanel;
imFlag TImage;
Label1 TLabel;
Label2 TLabel;
Label3 TLabel;
Label4 TLabel;
Label5 TLabel;
eCapital TEdit;
memoInformation TMemo;
cbLanguage1 TComboBox;
cbLanguage2 TComboBox;
cbLanguage3 TComboBox;
Label6 TLabel;
Label7 TLabel;
bbOpenDialog TButton;
bbCreate TBitBtn;
cbKontinent TComboBox;
eCountry TEdit;
procedure bbOpenDialogClick(Sender TObject);
procedure FormShow(Sender TObject);
procedure cbLanguage1Change(Sender TObject);
procedure cbLanguage2Change(Sender TObject);
procedure cbLanguage3Change(Sender TObject);
procedure bbCreateClick(Sender TObject);
procedure FormKeyDown(Sender TObject; var Key Word;
Shift TShiftState);
private
{ Private declarations }
public
{ Public declarations }
end;
var
frmNewCountry TfrmNewCountry;
implementation
uses Module;
{$R *.DFM}
procedure TfrmNewCountry.bbOpenDialogClick(Sender TObject);
begin
DM.odFlag.Execute;
if DM.odFlag.FileName <> » thentry
imFlag.Picture.LoadFromFile(DM.odFlag.FileName);
except
MessageDlg(‘Îøèáêà çàãðóçêè ôàéëà ñ ðèñóíêîì ôëàãà’, mtError, [mbOk],0)
end;
end;
procedure TfrmNewCountry.FormShow(Sender TObject);
begin
cbKontinent.Clear;
cbLanguage1.Clear;
cbLanguage2.Clear;
cbLanguage3.Clear;
eCapital.Clear;
eCountry.Clear;
memoInformation.Clear;
imFlag.Picture.Bitmap.Canvas.FillRect(Rect(0,0,120,90));
DM.qWork.SQL.Clear;
DM.qWork.SQL.Add(‘Select Language from Language order by Language’);
DM.qWork.Open;
cbLanguage2.Items.Add(‘— íåò —‘);
cbLanguage3.Items.Add(‘— íåò —‘);
DM.qWork.First;
while DM.qWork.Eof = False do
begin
cbLanguage1.Items.Add(DM.qWork.FieldByName(‘Language’).Text);
cbLanguage2.Items.Add(DM.qWork.FieldByName(‘Language’).Text);
cbLanguage3.Items.Add(DM.qWork.FieldByName(‘Language’).Text);
DM.qWork.Next;
end;
DM.qWork.Close;
DM.qWork.SQL.Clear;
DM.qWork.SQL.Add(‘Select Kontinent from Kontinent order by Kontinent’);
DM.qWork.Open;
DM.qWork.First;
while DM.qWork.Eof = False do
begin
cbKontinent.Items.Add(DM.qWork.FieldByName(‘Kontinent’).Text);
DM.qWork.Next;
end;
DM.qWork.Close;
cbKontinent.ItemIndex = 0;
cbLanguage1.ItemIndex = 0;
cbLanguage2.ItemIndex = 0;
cbLanguage3.ItemIndex = 0;
end;
procedure TfrmNewCountry.cbLanguage1Change(Sender TObject);
begin
if (cbLanguage1.Text = cbLanguage2.Text) then
begin
cbLanguage2.ItemIndex = cbLanguage3.ItemIndex;
cbLanguage3.ItemIndex = 0;
end;
if (cbLanguage1.Text = cbLanguage3.Text) then
begin
cbLanguage3.ItemIndex = 0;
end;
end;
procedure TfrmNewCountry.cbLanguage2Change(Sender TObject);
begin
if (cbLanguage2.Text = cbLanguage1.Text) or (cbLanguage2.Text = cbLanguage3.Text) and (cbLanguage2.Text <> ‘— íåò —‘) then
begin
cbLanguage2.ItemIndex = cbLanguage3.ItemIndex;
cbLanguage3.ItemIndex = 0;
end;
end;
procedure TfrmNewCountry.cbLanguage3Change(Sender TObject);
begin
if (cbLanguage2.Text = ‘— íåò —‘) then
begin
cbLanguage2.ItemIndex = cbLanguage3.ItemIndex;
cbLanguage3.ItemIndex = 0;
end;
if (cbLanguage3.Text = cbLanguage1.Text) or (cbLanguage2.Text = cbLanguage3.Text) and (cbLanguage3.Text <> ‘— íåò —‘) then
begin
cbLanguage3.ItemIndex = 0;
end;
end;
procedure TfrmNewCountry.bbCreateClick(Sender TObject);
var Temp LongInt;
var myStream TMemoryStream;
begin
if eCountry.Text = » then
begin
MessageDlg(‘Âû íå ââåëè íàçâàíèå ñòðàíû!’, mtWarning, [mbOK], 0);
eCountry.SetFocus;
Exit;
end;
if eCapital.Text = » then
begin
MessageDlg(‘Âû íå ââåëè íàçâàíèå ñòîëèöû!’, mtWarning, [mbOK], 0);
eCapital.SetFocus;
Exit;
end;
if DM.tbCountry.Locate(‘Country’,eCountry.Text,[loCaseInsensitive]) = True then
begin
MessageDlg(‘Còðàía »’+eCountry.Text+»’ óæå ñóùåñòâóåò â Áàçå äàííûõ!’, mtWarning, [mbOK], 0);
eCountry.Clear;
eCountry.SetFocus;
Exit;
end;
//îòêëþ÷åíèå ïðèâÿçêè
DM.tbCountry.Filtered = False;
//ïîèñê êîíòèíåíòà
DM.tbKontinent.Locate(‘Kontinent’, cbKontinent.Text, []);
//ñîçäàíèå Èäåíòèôèêàöèîííîãî íàìåðà
DM.tbCountry.IndexFieldNames = ‘ID’;
DM.tbCountry.Last;
Temp = DM.tbCountryID.Value;
//âíåñåíèå çàïèñåé â òàáëèöó ñòðàí
DM.tbCountry.Insert;
DM.tbCountryID.Value = Temp+1;
DM.tbCountryID_Kontinent.Value = DM.tbKontinentID.Value;
DM.tbCountryCountry.Value = eCountry.Text;
DM.tbCountryCapital.Value = eCapital.Text;
myStream = TMemoryStream.Create;
memoInformation.Lines.SaveToStream(myStream);
DM.tbCountryInformation.LoadFromStream(myStream);
myStream.Clear;
imFlag.Picture.Bitmap.SaveToStream(myStream);
// imFlag.Picture.SaveToFile(‘temp.bmp’);
// DM.tbCountryFlag.LoadFromFile(‘temp.bmp’);
DM.tbCountryFlag.LoadFromStream(myStream);
myStream.Destroy;
DM.tbCountry.Post;
//ïîèñê ïåðâîãî ÿçûêà è çàïèñü â ãëàâíóþ òàáëèöó
DM.tbLanguage.Locate(‘Language’, cbLanguage1.Text, []);
DM.tbMain.IndexFieldNames = ‘ID’;
DM.tbMain.Last;
Temp = DM.tbMainID.Value;
DM.tbMain.Insert;
DM.tbMainID.Value = Temp + 1;
DM.tbMainID_Country.Value = DM.tbCountryID.Value;
DM.tbMainID_Language.Value = DM.tbLanguageID.Value;
DM.tbMain.Post;
if cbLanguage2.Text <> ‘— íåò —‘ then
begin
DM.tbLanguage.Locate(‘Language’, cbLanguage2.Text, []);
DM.tbMain.Insert;
DM.tbMainID.Value = Temp + 2;
DM.tbMainID_Country.Value = DM.tbCountryID.Value;
DM.tbMainID_Language.Value = DM.tbLanguageID.Value;
DM.tbMain.Post;
end;
if cbLanguage3.Text <> ‘— íåò —‘ then
begin
DM.tbLanguage.Locate(‘Language’, cbLanguage3.Text, []);
DM.tbMain.Insert;
DM.tbMainID.Value = Temp + 3;
DM.tbMainID_Country.Value = DM.tbCountryID.Value;
DM.tbMainID_Language.Value = DM.tbLanguageID.Value;
DM.tbMain.Post;
end;
DM.tbCountry.Filtered = True;
frmNewCountry.Close;
end;
procedure TfrmNewCountry.FormKeyDown(Sender TObject; var Key Word;
Shift TShiftState);
begin
if key = vk_Escape then frmNewCountry.Close;
end;
end.

Приложение Д
Файл реализации модуля “NewLanguage.pas”
unit NewLanguage;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, Buttons, ExtCtrls, DB;
type
TfrmNewLanguage = class(TForm)
Panel1 TPanel;
Panel2 TPanel;
eLanguage TEdit;
bbCreate TBitBtn;
procedure bbCreateClick(Sender TObject);
procedure FormKeyDown(Sender TObject; var Key Word;
Shift TShiftState);
private
{ Private declarations }
public
{ Public declarations }
end;
var
frmNewLanguage TfrmNewLanguage;
implementation
uses Module;
{$R *.DFM}
procedure TfrmNewLanguage.bbCreateClick(Sender TObject);
var Temp LongInt;
begin
if eLanguage.Text <> » then
if DM.tbLanguage.Locate(‘Language’, eLanguage.Text, [loCaseInsensitive]) = False then
begin
DM.tbLanguage.IndexFieldNames = ‘ID’;
DM.tbLanguage.Last;
Temp = DM.tbLanguageID.Value;
DM.tbLanguage.Insert;
DM.tbLanguageID.Value = Temp + 1;
DM.tbLanguageLanguage.Value = eLanguage.Text;
DM.tbLanguage.Post;
MessageDlg(‘ßçûê »’+eLanguage.Text+»’ ñîçäàí’,mtInformation,[mbOk],0);
frmNewLanguage.Close;
end
else
begin
MessageDlg(‘ßçûê »’+eLanguage.Text+»’ óæå ñóùåñòâóåò â òàáëèöå ÿçûêîâ’,mtWarning,[mbOk],0);
eLanguage.SelectAll;
eLanguage.SetFocus;
end;
end;
procedure TfrmNewLanguage.FormKeyDown(Sender TObject; var Key Word;
Shift TShiftState);
begin
if key = vk_Escape then frmNewLanguage.Close;
end;
end.

Приложение Е
Файл реализации модуля “View.pas”
unit View;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ExtCtrls, ComCtrls, DBCtrls;
type
TfrmView = class(TForm)
Panel1 TPanel;
Panel2 TPanel;
Label1 TLabel;
Label2 TLabel;
Label3 TLabel;
Label4 TLabel;
Label5 TLabel;
Label6 TLabel;
Label7 TLabel;
eCountry TEdit;
eCapital TEdit;
eKontinent TEdit;
eLanguage1 TEdit;
eLanguage2 TEdit;
eLanguage3 TEdit;
DBImage1 TDBImage;
DBRichEdit1 TDBRichEdit;
procedure FormShow(Sender TObject);
procedure FormKeyDown(Sender TObject; var Key Word;
Shift TShiftState);
private
{ Private declarations }
public
{ Public declarations }
end;
var
frmView TfrmView;
implementation
uses Module;
{$R *.DFM}
procedure TfrmView.FormShow(Sender TObject);
var myStream TMemoryStream;
begin
//ñòèðàþ âñå äàííûå íà ôîðìå
eKontinent.Clear;
eLanguage1.Clear;
eLanguage2.Clear;
eLanguage3.Clear;
eCapital.Clear;
eCountry.Clear;
eKontinent.Text = DM.tbKontinentKontinent.Value;
//íàõîäèì âñå ãîñóäàðñòâåííûå ÿçûêè
DM.qWork.SQL.Clear;
DM.qWork.SQL.Add(‘Select Language from Language where ID in (Select ID_Language from Main where ID_Country in (Select ID from Country where Country = »’+DM.tbCountryCountry.Value+»’))’);
DM.qWork.Open;
eLanguage1.Text = DM.qWork.FieldByName(‘Language’).Text;
if DM.qWork.RecordCount >= 2 then
begin
DM.qWork.Next;
eLanguage2.Text = DM.qWork.FieldByName(‘Language’).Text;
end;
if DM.qWork.RecordCount = 3 then
begin
DM.qWork.Next;
eLanguage3.Text = DM.qWork.FieldByName(‘Language’).Text;
end;
DM.qWork.Close;
eCountry.Text = DM.tbCountryCountry.Text;
eCapital.Text = DM.tbCountryCapital.Text;
end;
procedure TfrmView.FormKeyDown(Sender TObject; var Key Word;
Shift TShiftState);
begin
if key = VK_Escape then frmView.Close;
end;
end.

«