ОСНОВЫ АЛГОРИТМИЗАЦИИ И ПРОГРАММИРОВАНИЯ



Министерство образования Республики Беларусь

Учреждение образования

«Гомельский государственный университет

имени Франциска Скорины»

Факультетматематический

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

ОСНОВЫ АЛГОРИТМИЗАЦИИ И ПРОГРАММИРОВАНИЯ

Курсовая работа

Вариант 37

РЕФЕРАТ

Курсовая работа 49 страниц, 7 таблиц, 34 рисунка, 7 источников.

Ключевые слова: утилита DatabaseDesktop, алиас БД, таблица БД, утилита BDE Administrator, методы навигации, методы Locate и LookUp, вычисляемые поля, SQL-запросы, компоненты TTable и TQuery, генератор отчетов Rave .

Объект исследования: среда Delphi.

Предмет исследования:приложения баз данных в Delphi.

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

Задачамикурсовой работы являются:изучение основных принципов

создание приложений баз данных в среде Delphi, создание таблиц БД с помо-

щью утилиты DatabaseDesktop, создание псевдонима (алиаса) БД с помощью

утилит SQL Explorer или BDE Administrator, разработка интерфейса приложения БД, организация поиска и фильтрации в БД, создание вычисляемых полей, сортировка данных в таблицах БД, построение SQL-запросов к БД, генерация отчетов в RaveDesigner.

СОДЕРЖАНИЕ

Введение.................................................................................................................. 4

1. Изученные теоретические вопросы.................................................................. 5

2. Постановка задачи.............................................................................................11

3. Структура базы данных ...................................................................................12

4. Интерфейс задачи............................................................................................. 12

5. Запросы.............................................................................................................. 14

6. Отчеты ...............................................................................................................20

Заключение ........................................................................................................... 22

Список литературы .............................................................................................. 23

Приложение А. Реализация функций базы данных...........................................24

Приложение Б. Текст программы........................................................................34

Введение

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

В курсовой работе рассматривается создание приложений баз данных в среде Delphi. Для этого были изучены некоторые теоретические вопросы: утилитаDatabaseDesktop, компонентQuery, компонентDBGrid, компонентDBNavigatorи другое. В утилите DatabaseDesktop были созданы таблицы Услуги, Персонал, Договора и Клиенты для предметной области Рыболовное хозяйство. Было создано приложение БД в среде Delphi, реализующее навигацию по таблицам БД,сортировку данных по основному и дополнительным индексам, поиск данных, отбор данных с помощью фильтров компонентовTableиQuery, фильтрацию в наборе данных.

1. Изученные теоретические вопросы

Компоненты для работы с базой данных

КомпонентTDBCheckBox. Он обладает функциональностью стандартного флажкаTCheckBox, но источником данных и приёмником для него служит поле НД, которое может быть логическим или символьным. В последнем случае необходимо соответствующим образом установить значение текстовых свойствValueChecked иValueUnChecked. Элементы в этих свойствах перечисляются через точку с запятой.

КомпонентTDBEdit. Он позволяет редактировать значение отдельного поля текущей записи НД. Используемые свойства не отличаются от свойств компонентаTEdit, но источником данных и их приёмником для него служит поле НД. При вводе значения в компонентTDBEdit программа автоматически следит за тем, чтобы оно было совместимо по формату с полем НД. Ввод неверных значений блокируется.

КомпонентTDBImage.Он позволяет воспроизводить на экране рисунки, хранящиеся в базе данных. Рисунки отображаются в данном поле автоматически, если значение свойстваAutoDisplay =True. Иначе рисунок можно загрузить вызовом методаLoadPicture. Изображение можно скопировать, используя методPicture.

Если значение свойстваQuickDraw =True, то ускоряется вывод рисунка на экран, что часто полезно при активном просмотре больших наборов записей, но при этом ухудшается качество изображения. СвойствоStretch позволяет подстраивать (сжимать или растягивать) изображение под текущие размеры компонентаTDBImage на форме.

КомпонентTDBListBox. Он предназначен для отображения состояния конкретного поля текущей записи НД, а также для выбора нового значения поля. Список этого компонента первоначально пуст, и программист должен заполнить список перед тем, как он станет доступен пользователю.

КомпонентTDBListBox может отображать текущее значение связанного с ним поля только в том случае, если это значение совпадает с одним из списочных значений компонента.

КомпонентTDBComboBox. Он позволяет показывать и изменять текущее значение поля в раскрывающемся списке значений. Набор текста в области ввода позволяет быстро переместиться к нужной записи в списке или ввести значение, отсутствующее в нем.

1.2 Особенности набора данныхTable

Компонент Table представляет собой набор данных, который в текущий момент времени может быть связан только с одной таблицей БД. Этот набор данных формируется на базе навигационного способа доступа к данный, поэтому компонент Table рекомендуется использовать для локальных БД, таких какdBase илиParadox. При работе с удаленными БД следует использовать компонент Query.

Связь между таблицей и компонентом Table устанавливается через его свойствоTableName типаTFileName, которое задает имя таблицы (и имя файла с данными таблицы). При задании свойства TableName указывается имя файла и расширение имени файла.

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

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

СвойствоTаbleТуре типаttTableType определяет тип таблицы. Для локальных таблиц это свойство может принимать следующие значения:

1.ttoefault — тип таблицы автоматически определяется по расширению файла;

2. ttParadoxтаблица Paradox;

3. ttDBaseтаблицаdBASE;

4. ttFoxPro — таблица FoxPro;

5. ttASCII — текстовый файл, содержащий данные в табличном виде (таблица ASCII).

По умолчанию в состав набора данных Table попадают все записи связанной с ним таблицы. Для отбора записей, удовлетворяющих определенным условиям, используются фильтры.

Delphi через BDE автоматически поддерживает многопользовательский доступ к локальным таблицам, при этом по умолчанию все пользовательские приложения имеют равные права и могут редактировать содержащиеся в таблицах данные. Чтобы запретить пользователям изменять содержание записей, можно использовать свойствоReadonly типаBoolean. По умолчанию оно имеет значение False, что предоставляет пользователю право на модификацию записей.

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

Текущий индекс устанавливается с помощью свойстваIndexName илиIndexFieldNames типаString. На этапе разработки приложения текущий индекс выбирается из списка индексов, заданных при создании таблицы. Все возможные значения свойствIndexName иIndexFieldNames содержатся в раскрывающихся списках, доступных через Инспектор объектов. Оба свойства во многом схожи, и их использование практически одинаково. Значением свойстваIndexName является имя индекса, заданное при создании таблицы, а значением свойстваIndexFieldNames является имя поля, для которого был создан индекс. Если индекс состоит из нескольких полей, то для свойстваIndexName по-прежнему задается имя этого индекса, а для свойстваIndexFieldNames через точку с запятой перечисляются имена полей, входящие в этот индекс.

Для таблицParadox сделать текущим индексом ключ (главный индекс) можно только с помощью свойстваIndexFieldNames, перечислив ключевые поля таблицы, т. к. ключ не имеет имени и поэтому недоступен через свойствоIndexName.

1.3 Особенности набора данныхQuery

КомпонентTQuery, находящийся на панелиBDE, позволяет очень гибко определить условие отбора записей из нескольких таблиц БД.

Основные свойства компонентаTQuery

Свойства

Описание

DataSource

Содержит ссылку на компонентTDataSource, используемый для формирования параметрического запроса

Local

Имеет значениеTrue, если компонентTQuery работает с локальной или файл-серверной БД

Params[Index:Word]

Содержит массив объектов-параметров классаTParams

Prepared

Имеет значениеTrue, если запрос был подготовлен к выполнению методомPrepare

RowAffected

Содержит количество записей, которые были изменены или удалены в результате выполнения запроса

SQL

Содержит текстSQL запроса

Основные методы компонентаTQuery

Метод

Описание

ExecSQL

ВыполняетзапросыInsert,Update,DeleteиCreateTable. Для выполнения запросаSelectвместо него используется методOpen или свойствоActive

ParamByName

(Const Value: String)

Открывает доступ к параметру по его имениValue

Prepare

Передаёт вBDE запрос, для того чтобыBDE и удаленный сервер БД распределили свои ресурсы и дополнительно оптимизировали запрос (подготовка запроса к выполнению)

Свойства классаTParams

Свойства

Описание

AsXXXX

Эти свойства (AsString,AsInteger и т.д) служат для преобразования значения параметра к нужному типу

ISNull

Содержитtrue, если с параметром не связано значение

Name

Содержит имя параметра

Value

Содержит значение параметра

Для отображения результатов запросов с компонентомTQuery связываем компонентTDataSource, в свойствеDataSet которого указываем имя объекта (например,Query1). В свойствеDataSourceобъектаTDBGrid1 указываем имя источника данных (например,DataSource1). В свойствеDatabaseName компонентаTQuery указываем алиас БД.

1.4 КомпонентDataSource

Невизуальный компонент DataSource в Delphi представляет собой источник данных, который обеспечивает связь между набором данных и компонентами отображения и редактирования данных.

Все наборы данных должны быть связаны с компонентом источника данных, если требуется редактирование данных. Основное свойство источника данных – DataSet. Оно указывает на компонент набора данных (Table, Query и др), с которыми связан источник. Свойство State дает информацию о текущем состоянии набора данных: находится ли он в состоянии редактирования, вставки данных и так далее.

Основные методы:

functionIsLinkedTo(DataSet: TDataSet):Boolean;

События:

Основные свойства:

1.5 КомпонентDBGrid

КомпонентDBGrid отображает содержимое НД в виде таблицы, в которой столбцы соответствуют полям НД, а строки – записям.

То, как происходит прорисовка данных в сеткеTDBGrid – стандартным образом или по определенному сценарию – определяетсясвойствомDefaultDrawing. Если в этом свойстве установитьFalse, то алгоритм прорисовки должен  содержаться в обработчикахсобытияOnDrawCollumnCell иOnDrawDataCell (обработчик событияOnDrawDataCell введён для совместимости с ранними версиямиDelphi).

Для стандартного вывода ячеек используется методDefaultDrawColumnCell.

Если всвойствеDefaultDrawing компонентаTDBGrid установитьTrue (задаётся по умолчанию), то обработчики будут вызваны после завершения стандартной процедуры прорисовки, т.е. программный вывод в данном случае накладывается на стандартный. Это может стать причиной неправильного отображения данных. Чтобы исключить нежелательное влияние стандартного вывода необходимо сначала закрасить прямоугольник прорисовки:FillRect(Rect).СобытиеOnDrawColumnCell возникает при прорисовке каждой ячейки, при этом текущей записью базового НД становиться запись с прорисовываемой ячейкой.

СвойствоOptions компонентаTDBGrid имеет следующие параметры:

dgEditingразрешает редактирование.

dgAlwaysShowEditor – при выделении столбца автоматически переводит его в режим редактирования.

dgTitlesпоказывает заголовки столбцов.

dgIndicator– показывает указатель текущей строки в самом левом фиксированном столбце.

dgColumResize– разрешает пользователю с помощью мыши менять ширину столбцов.

dgColLines– показывает в сетке вертикальные разделяющие линии.

dgRowLines– показывает в сетке горизонтальные разделяющие линии.

dgTabs– разрешает переход от столбца к столбцу с помощью клавиши Tab.

dgRowSelect– разрешает выделение цветом всей текущей строки.

dgAlwaysShowSelection – выделение текущей строки цветом сохраняется, даже если компонент теряет фокус ввода.

dgConfirmDelete – требует подтверждения удаления строки.

dgCancelOnExit – если пользователь вставляет пустую строку и покидает её, то она не сохраняется в таблице БД;

dgMultiSelect– разрешает множественный выбор строк.

ЕслиdgEditing =false, то независимо от свойстваReadOnly любого столбца, все данные в сетке будут защищены. ЕслиdgAlwayShowEditor =false, то редактировать выделенный столбец можно после нажатияклавишF2,илиEnter или после двойного щелчка на ячейке мышью (левой кнопкой).

2. Постановка задачи

Создать базу данных по предметной области: Таможня, которая будет состоять из следующих информационных объектов:

Товары (Код товара, наименование, стоимость, пошлина)

Декларации (Номер декларации, Код товара, количество, дата декла-

рации, ФИО гражданина, код сотрудника)

Персонал (Код  сотрудника,  код  должности,  ФИО  сотрудника,  адрес

сотрудника, телефон, год рождения, образование)

Должности (Код должности, наименование должности, оклад).

Система должна обеспечить:

ведение локальной базы данных: просмотр, корректировку, удаление,

дополнение записей БД;

2. заполнение графических элементов записи базы (дополнительно);

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

4. формирование значения вычисляемого поля;

5. отбор записей из БД по условию статического и динамического запросов на языке SQL в компонентах Query;

6. поиск данных различными способами, отбор записей из БД по

   условию, определенному с помощью фильтров компонентов Table и

Query;

7. сортировку данных по основному и дополнительным индексам;

8. формирование, предварительный просмотр и печать отчета данных

   из БД.

3. Структура базы данных

База данных состоит из 4 связанных таблиц: Товары, Декларации, Персонал, Должности.

Структура таблиц базы данных приведена в следующих таблицах:

Товары

Имя поля

Тип данных

Описание

Размер

Kod_tovara

Числовой

Код товара

Tovar_name

Текстовый

Наименованиетовара

50

Tovar_cost

Числовой

Стоимость товара

Poshlina

Числовой

Пошлина

Декларации

Имя поля

Тип данных

Описание

Размер

Declaration_number

Числовой

Номердекларации

Kod_tovara

Числовой

Код товара

Kolvo

Числовой

Количество ед. товара

Declaration_Data

Дата

Дата декларации

FIO_grazhdanina

Текстовый

ФИО гражданина

60

Kod_sotrudnika

Числовой

Код сотрудника

Персонал

Имя поля

Тип данных

Описание

Размер

Kod_sotrudnika

Числовой

Код сотрудника

Kod_dolzhnosti

Числовой

Код должности

FiO_sotrudnika

Текстовый

ФИО сотрудника

60

Adress_sotrudnika

Текстовый

Адрес сотрудника

70

Telefon

Текстовый

Код сотрудника

9

Birthyear

Числовой

Год рождения

Obrazovanie

Текстовый

Образование

30

Должности

Имя поля

Тип данных

Описание

Размер

Kod_dolzhnosti

Числовой

Коддолжности

Naimen_dolzhnosti

Текстовый

Наименование должности

40

Oklad

Числовой

Оклад

4. Интерфейс задачи

  1. Просмотр данных таблиц

Для просмотра данных таблицы нужно щелкнуть правой кнопкой мыши и выбрать необходимую таблицу (рис А.1). В результате появится выбранная таблица (рис А.2).

  1. Добавление данных

Для добавления данных в таблицу нужно выбрать необходимую таблицу (см. п.4.1). Затем нажать на кнопку Добавить или Работа с таблицами/ Добавить (рис. А.2). Появится форма, в которую нужно ввести необходимые данные и нажать на кнопку сохранить (рис А.3). В итоге в таблице появятся добавленные данные (рис. А.4).

  1. Вставка данных

Для вставки данных в таблицу нужно выбрать необходимую таблицу (см.п.4.1). Указать щелчком левой кнопки мыши поле, перед которым появятся вставленные данные. Затем нажать на кнопку Вставить или Работа с таблицами/Вставить (рис. А.2). Появится форма, в которую нужно ввести необходимые данные и нажать на кнопку сохранить (рис А.3). В итоге в таблице появятся вставленные данные (рис. А.5).

  1. Изменение данных

Для изменения данных в таблице нужно выбрать необходимую таблицу (см.п.4.1). Указать щелчком левой кнопки мыши поле, в котором необходимы изменения данных. Затем нажать на кнопку Изменить или Работа с таблицами/Изменить (рис. А.2). Появится форма с данными, где их можно изменить, а затем нужно нажать на кнопку сохранить (рис А.6). В итоге таблица будет содержать измененные данные (рис. А.7).

  1. Удаление данных

Для удаления данных в таблице нужно выбрать необходимую таблицу (см. п.4.1). Указать щелчком левой кнопки мыши поле, которое необходимо удалить. Затем нажать на кнопку Удалить или Работа с таблицами/Удалить (рис. А.2). В результате таблица не будет содержать удаленные данные (рис. А.8).

  1. Поиск данных

Для поиска данных таблицы нужно выбрать необходимую таблицу (см.п.4.1). Затем выбрать Работа с таблицами/Поиск/Таблица/ Данные (по которым будет происходить поиск) (рис. А. 9). Появится форма, где нужно указать данные, по которым будет происходить поиск и нажать на кнопку ОК (рис. А.10). В результате будут показаны все данные таблицы, но найденная запись будет выделена по сравнению с остальными (рис. А.11).

Фильтрация данных

Для фильтрации данных таблицы нужно выбрать необходимую таблицу (см. п.4.1). Затем выбрать Работа с таблицами/Поиск/Таблица/ Данные (по которым будет происходить фильтрация) (рис. А.9). Появится форма, где нужно указать данные, по которым будет происходить фильтрация, выбрать Вкл./выкл фильтрацию и нажать на кнопку ОК (рис. А.12). В результате в таблице будут исключены данные, не удовлетворяющие условиям фильтрации (рис А.13).

Сортировка

Для сортировки данных первой таблицы нужно выбрать таблицу (см. п.4.1). Затем выбрать Обработка/Сортировка/ Выбор данных для сортировки (Рис. А.18). В результате данных будут сортироваться по выбранному параметру (Рис. А.19).

Вычисляемое поле

Для создания вычисляемого поля Poshlina%по первой таблице необходимо:

добавить это поле в список полей таблицы Сотрудники (командаNewField в редакторе полей), указать его тип (в данном случаеCurrency), выбрать с помощью переключателяFieldType вариантCalculated (Вычисляемое поле).

В обработчике событияOnCalcFields компонента НД (в данном случаеTable1) напишем:

Table1.FieldByName('Poshlina%').Value:=

(Table1.FieldByName('Poshlina').Value/

Table1.FieldByName('Tovar_cost').Value)*100;

В результате таблица Товары будет отображать данные вычисляемого поля (Рис. А.17)

Запросы

Для просмотра запросов нужно навести курсор мыши на Обработка/Запрос (рис. А.14). Появится подменю, где можновыбрать нужный запрос (рис. А.15). Если запрос статический, то результат запроса появится сразу, а если динамический, то появится форма, в которой  вполе Edit вводим данные, удовлетворяющие условию запроса, и нажимаем на кнопку ОК. (Запросы см. п.5).

Отчеты

Для просмотра отчетов нужно выбрать Отчеты, а затем щелкнуть по нужному отчету (рис. А.16). В результате появится выбранный отчет (см. п.6).

5.Запросы

5.1.Выдать  информацию  о  сотруднике (ФИО,  адрес,  телефон,  год  рождения)  по  введенному номеру декларации.

SELECT Table3.FiO_sotrudnika, Table3.Adress_sotrudnika, Table3.Telefon, Table3.Birthyear

FROM "Table2.DB" Table2

INNER JOIN "Table3.db" Table3

ON  (Table2.Kod_sotrudnika = Table3.Kod_sotrudnika)

WHERE  Table2.Declaration_number=:Par

Form1.Query1.ParamByName('Par').AsInteger:=strtoint(Form6.Edit1.Text);

Рисунок 5.1 – результат выполнения первого запроса

5.2.Выдать список сотрудников (ФИО, адрес, телефон, образование, должность), оформивших указанный товар.

Select FiO_sotrudnika,Adress_sotrudnika,Telefon,Obrazovanie,Naimen_dolzhnosti

From Table1,Table2,Table3,Table4

where (Tovar_name=:Par) and (Table1.Kod_tovara=Table2.Kod_tovara) and (Table2.Kod_sotrudnika=Table3.Kod_sotrudnika) and (Table3.Kod_dolzhnosti=Table4.Kod_dolzhnosti)

Form1.Query1.ParamByName('Par').AsString:=Form6.Edit1.Text;

Рисунок 5.2 – результат выполнения второго запроса

5.3.По введенному названию должности выдать количество работников, занимающих ее, оклад.

Select count(Table3.Kod_dolzhnosti), Oklad

From Table3, Table4

where (Table3.Kod_dolzhnosti=Table4.Kod_dolzhnosti) and (Naimen_dolzhnosti=:Par)

group by Oklad

Form1.Query1.ParamByName('Par').AsString:=Form6.Edit1.Text;

Рисунок 5.3 – результат выполнения третьего запроса

5.4.Подсчитать  количество  различных  сотрудников  на  таможне,  оформивших  декларации  в этом году (используя данные только таблицы «декларации»).

Select count(distinct(Kod_sotrudnika))

From Table2

whereDeclaration_Data between "01.01.2016" and "31.12.2016"

Рисунок 5.4 – результат выполнения четвёртого запроса

5.5.Выдать список сотрудников (ФИО, адрес, телефон, образование, должность) с указанием суммарного количества задекларированных товаров (каждым сотрудником) в 2010 году.

Select FiO_sotrudnika,Adress_sotrudnika,Telefon,Obrazovanie,Naimen_dolzhnosti,sum(kolvo)

from table2,table3,table4

where (table2.kod_sotrudnika=table3.kod_sotrudnika) and (table3.kod_dolzhnosti=table4.kod_dolzhnosti) and (Declaration_Data between "01.01.2010" and "31.12.2010")

group by FiO_sotrudnika,Adress_sotrudnika,Telefon,Obrazovanie,Naimen_dolzhnosti

Рисунок 5.5 – результат выполнения пятого запроса

5.6.Выдать список товаров (наименование товара, стоимость), с указанием его суммарного  задекларированного количества в июне 2011 года.

selectTovar_name, tovar_cost, sum(kolvo) from table1,table2

where (Table1.kod_tovara=Table2.kod_tovara) and (Declaration_Data between "01.06.2011" and "30.06.2011")

group by Tovar_name, tovar_cost

Рисунок 5.6 – результат выполнения шестого запроса

5.7.Выдать список сотрудников (ФИО, образование), с указанием наименования задекларированного товара, суммарной стоимости  задекларированного товара.

selectFiO_sotrudnika, Obrazovanie,Tovar_name,Tovar_cost, sum(tovar_cost) from table1,table2,table3

where (Table1.kod_tovara=Table2.kod_tovara) and  (table2.kod_sotrudnika=Table3.kod_sotrudnika)

group by FiO_sotrudnika, Obrazovanie,Tovar_name,Tovar_cost

Рисунок 5.7 – результат выполнения седьмого запроса

5.8.

Select FiO_sotrudnika,Adress_sotrudnika,Telefon,Obrazovanie,Naimen_dolzhnosti

from table3,table4

where (table3.kod_dolzhnosti=table4.kod_dolzhnosti) and (Birthyear is null)

Рисунок 5.8 – результат выполнения восьмого запроса

6. Отчеты

6.1 Простой отчёт

(Сделан по первой таблице)

6.2. Отчет по запросу

(Сделан по запросу п.5.8)

6.3. Отчет с группировкой

(Сделан по запросу п.5.7)

Заключение

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

В курсовой работе рассматривается создание приложения баз данных в среде Delphi в соответствии с заданной прикладной областью. Были изучены следующие теоретические вопросы, относящиеся к созданию приложений БД в среде Delphi: утилита DatabaseDesktop, понятие и состояние набора данных, компонент TDBNavigator, компонент TDBGrid, компонент TQuery, оператор Select, агрегатные функции.

В среде Delphi 7 было создано приложение БД, реализующее следующие функции:просмотр, корректировку, удаление и дополнение записей БД; просмотр данных в таблице и окнах редактирования; вычисление значения вычисляемого поля; отбор записей из БД по условиям запросов на языкеSQL; поиск данных и отбор записей из БД, а также сортировка данных по основному и дополнительному индексах. Основное меню и продуманный интерфейс, которые включают в себя различные действия для работы с базой данный, обеспечивают удобное взаимодействие пользователя с программой.

Список литературы

1. Бобровский, С. И. Delphi7: учебный курс / С. И. Бобровский. – СПб.: Питер, 2008. – 736 с.

2. Культин, Н. Б. Основы программирования в Delphi7 / Н. Б. Культин. – СПб.: БХВ-Петербург, 2003. – 638 с.

3. Стивенс, Р. Delphi. Готовые алгоритмы / Р. Стивенс; пер. с англ. Мерещука П.А. – 2-е изд. стер. – М.: ДМК Пресс; СПб.: Питер, 2004. – 384с.

4. Сухарев, М. В. Основы Delphi. Профессиональный подход / М. В. Сухарев. – СПб.: Наука и техника, 2004. – 614 с.

5. Фаронов, В. В. Delphi 5. Учебный курс / В.В. Фаронов – М.: «Нолидж», 2000. – 608 с.

6. Фаронов, В.В. Программирование баз данных в Delphi 7. Учебный курс / В.В. Фаронов. – СПб.: Питер, 2006. – 459 с.

7. Шумаков, П. В. Delphi3 и разработка приложений баз данных / П. В. Шумаков – М. : «Нолижд», 1998. – 704 с.

Приложение А

Реализация функций базы данных

Рис А.1 – Выбор таблицы

Рис. А.2 – Просмотр таблицы данных

Рис. А.3 – Добавление данных в таблицу

Рис. А.4 – Таблица с добавленными данными

Рис. А.5 – Вставка данных в таблицу

Рис. А.6 – Изменение данных в таблице

Рис. А.7 – Таблица с измененными данными

Рис. А.8 – Таблица после удаления записи

Рис. А.9 – Выбор данных для поиска

Рис. А.10 – Таблица для поиска данных

Рис. А.11 – Результат поиска данных

Рис. А.12 – Фильтрация данных

Рис. А.13 – Результат выполнения фильтрации

Рис. А.14 – Выбор пункта меню запросы

Рис. А.15 – Выбор запроса

Рис. А.16 – Выбор отчета для просмотра

Рис. А.17 — Отображение таблицы с вычисляемым полем

Рис. А.18 — Выбор данных для сортировки

Рис.А.19 — Результат сортировки

Приложение Б

                                   Текстпрограммы

unit Unit1;

interface

uses

 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

 Dialogs, Grids, DBGrids, DB, DBTables, Menus, ExtCtrls, DBCtrls,

StdCtrls, Buttons, Mask, RpRave, RpDefine, RpCon, RpConDS;

type

 TForm1 = class(TForm)

   Table1: TTable;

   Table2: TTable;

   Table3: TTable;

   Table4: TTable;

   DataSource1: TDataSource;

   DataSource2: TDataSource;

   DataSource3: TDataSource;

   DataSource4: TDataSource;

   Table1Kod_tovara: TSmallintField;

   Table1Tovar_name: TStringField;

   Table1Tovar_cost: TIntegerField;

   Table1Poshlina: TSmallintField;

   Table2Declaration_number: TSmallintField;

   Table2Kod_tovara: TSmallintField;

   Table2Kolvo: TFloatField;

   Table2Declaration_Data: TDateField;

   Table2FIO_grazhdanina: TStringField;

   Table2Kod_sotrudnika: TSmallintField;

   Table4Kod_dolzhnosti: TSmallintField;

   Table4Naimen_dolzhnosti: TStringField;

   Table4Oklad: TCurrencyField;

   Table3Kod_sotrudnika: TSmallintField;

   Table3Kod_dolzhnosti: TSmallintField;

   Table3FiO_sotrudnika: TStringField;

   Table3Adress_sotrudnika: TStringField;

   Table3Telefon: TStringField;

   Table3Birthyear: TIntegerField;

   Table3Obrazovanie: TStringField;

   PopupMenu1: TPopupMenu;

   N11: TMenuItem;

   N21: TMenuItem;

   N31: TMenuItem;

   N41: TMenuItem;

   DBNavigator1: TDBNavigator;

   BitBtn1: TBitBtn;

   BitBtn2: TBitBtn;

   BitBtn3: TBitBtn;

   MainMenu1: TMainMenu;

   Table1Poshlina2: TSmallintField;

   Label1: TLabel;

   Edit1: TEdit;

   BitBtn4: TBitBtn;

   N1: TMenuItem;

   N2: TMenuItem;

   N3: TMenuItem;

   N4: TMenuItem;

   N5: TMenuItem;

   BitBtn5: TBitBtn;

   N6: TMenuItem;

   N12: TMenuItem;

   N22: TMenuItem;

   N32: TMenuItem;

   N42: TMenuItem;

   N7: TMenuItem;

   N8: TMenuItem;

   N9: TMenuItem;

   N10: TMenuItem;

   N13: TMenuItem;

   N14: TMenuItem;

   N15: TMenuItem;

   N20101: TMenuItem;

   N20111: TMenuItem;

   N16: TMenuItem;

   Query1: TQuery;

   DBGrid1: TDBGrid;

   DataSource5: TDataSource;

   BitBtn6: TBitBtn;

   N17: TMenuItem;

   N18: TMenuItem;

   N23: TMenuItem;

   N33: TMenuItem;

   N43: TMenuItem;

   N19: TMenuItem;

   N20: TMenuItem;

   N24: TMenuItem;

   N25: TMenuItem;

   N26: TMenuItem;

   N27: TMenuItem;

   N28: TMenuItem;

   N29: TMenuItem;

   N30: TMenuItem;

   N34: TMenuItem;

   C1: TMenuItem;

   N35: TMenuItem;

   N36: TMenuItem;

   N37: TMenuItem;

   N38: TMenuItem;

   N39: TMenuItem;

   N40: TMenuItem;

   N44: TMenuItem;

   N45: TMenuItem;

   N46: TMenuItem;

   N47: TMenuItem;

   RVConnect1: TRvDataSetConnection;

   RvProject1: TRvProject;

   N48: TMenuItem;

procedureFormMouseDown(Sender: TObject; Button: TMouseButton;

     Shift: TShiftState; X, Y: Integer);

procedure N11Click(Sender: TObject);

procedure N21Click(Sender: TObject);

procedure N31Click(Sender: TObject);

procedure N41Click(Sender: TObject);

procedure BitBtn1Click(Sender: TObject);

procedure BitBtn2Click(Sender: TObject);

procedure BitBtn3Click(Sender: TObject);

procedure Table1CalcFields(DataSet: TDataSet);

procedure BitBtn4Click(Sender: TObject);

procedure N5Click(Sender: TObject);

procedure N10Click(Sender: TObject);

procedure N14Click(Sender: TObject);

procedure N15Click(Sender: TObject);

procedure N13Click(Sender: TObject);

procedure BitBtn6Click(Sender: TObject);

procedure N19Click(Sender: TObject);

procedure N20Click(Sender: TObject);

procedure N24Click(Sender: TObject);

procedure N25Click(Sender: TObject);

procedure N26Click(Sender: TObject);

procedure N27Click(Sender: TObject);

procedure N28Click(Sender: TObject);

procedure N29Click(Sender: TObject);

procedure N30Click(Sender: TObject);

procedure N34Click(Sender: TObject);

procedure N35Click(Sender: TObject);

procedure N36Click(Sender: TObject);

procedure N37Click(Sender: TObject);

procedure N38Click(Sender: TObject);

procedure N39Click(Sender: TObject);

procedure N20101Click(Sender: TObject);

procedure N20111Click(Sender: TObject);

procedure N16Click(Sender: TObject);

procedure N40Click(Sender: TObject);

procedure N45Click(Sender: TObject);

procedure N47Click(Sender: TObject);

procedure N46Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

 Form1: TForm1;

implementation

uses Unit2, Unit3, Unit4, Unit5, Unit6, Unit7;

{$R *.dfm}

procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;

 Shift: TShiftState; X, Y: Integer);

var P:TPoint;

begin

P:=GetClientOrigin;

if Button=mbRight then PopupMenu1.Popup(P.X+x,P.y+y);

end;

procedure TForm1.N11Click(Sender: TObject);

begin

Table2.IndexFieldNames:='';

Table4.IndexFieldNames:='';

Form7.Label1.Tag:=0;

DBGrid1.DataSource:=DataSource1;

Table1.Active:=true;

DBNavigator1.DataSource:=DataSource1;

end;

procedure TForm1.N21Click(Sender: TObject);

begin

Table2.IndexFieldNames:='';

Table4.IndexFieldNames:='';

Form7.Label1.Tag:=0;

Table1.Filtered:=false;

DBGrid1.DataSource:=DataSource2;

Table2.Active:=true;

DBNavigator1.DataSource:=DataSource2;

end;

procedure TForm1.N31Click(Sender: TObject);

begin

Table2.IndexFieldNames:='';

Table4.IndexFieldNames:='';

Form7.Label1.Tag:=0;

Table1.Filtered:=false;

DBGrid1.DataSource:=DataSource3;

Table3.Active:=true;

DBNavigator1.DataSource:=DataSource3;

end;

procedure TForm1.N41Click(Sender: TObject);

begin

Table2.IndexFieldNames:='';

Table4.IndexFieldNames:='';

Form7.Label1.Tag:=0;

Table1.Filtered:=false;

DBGrid1.DataSource:=DataSource4;

Table4.Active:=true;

DBNavigator1.DataSource:=DataSource4;

end;

procedure TForm1.BitBtn1Click(Sender: TObject);

begin

BitBtn2.Tag:=0;

Form2.NaimenEdit.Clear;

Form2.CostEdit.Clear;

Form2.PoshlinaEdit.Clear;

Form3.DataEdit.Clear;

Form3.FIOEdit.Clear;

Form3.KodTEdit.Clear;

Form3.KodSEdit.Clear;

Form3.NDEdit.Clear;

Form4.EducEdit.Clear;

Form4.AdressEdit.Clear;

Form4.FiOEdit.Clear;

Form4.KodSEdit.Clear;

Form4.KodDEdit.Clear;

Form4.TelefonEdit.Clear;

Form4.BirthyearEdit.Clear;

Form5.KodDEdit.Clear;

Form5.NaimenEdit.Clear;

Form5.OkladEdit.Clear;

If DBGrid1.Datasource=DataSource1 then

Begin

Table1.Append;

Form2.show;

End;

If DBGrid1.Datasource=DataSource2 then

Begin

Table2.Append;

Form3.show;

End;

If DBGrid1.Datasource=DataSource3 then

Begin

Table3.Append;

Form4.show;

End;

If DBGrid1.Datasource=DataSource4 then

Begin

Table4.Append;

Form5.show;

End;

end;

procedure TForm1.BitBtn2Click(Sender: TObject);

begin

BitBtn2.Tag:=1;

If DBGrid1.Datasource=DataSource1 then

Begin

Form2.KodTEdit.Text:=inttostr(Form1.Table1.FieldByName('Kod_tovara').Value);

Form2.NaimenEdit.Text:=Form1.Table1.FieldByName('Tovar_name').Value;

Form2.CostEdit.Text:=inttostr(Form1.Table1.FieldByName('Tovar_cost').Value);

Form2.PoshlinaEdit.Text:=inttostr(Form1.Table1.FieldByName('Poshlina').Value);

Form2.Show;

end;

If DBGrid1.Datasource=DataSource2 then

Begin

Form3.DataEdit.Text:=datetostr(Form1.Table2.FieldByName('Declaration_Data').Value);

Form3.FiOEdit.Text:=Form1.Table2.FieldByName('FIO_grazhdanina').Value;

Form3.KodSEdit.Text:=inttostr(Form1.Table2.FieldByName('Kod_sotrudnika').Value);

Form3.KodTEdit.Text:=inttostr(Form1.Table2.FieldByName('Kod_tovara').Value);

Form3.KolEdit.Text:=inttostr(Form1.Table2.FieldByName('Kolvo').Value);

Form3.NDEdit.Text:=inttostr(Form1.Table2.FieldByName('Declaration_number').Value);

Form3.Show;

end;

If DBGrid1.Datasource=DataSource3 then begin

Form4.EducEdit.Text:=Form1.Table3.FieldByName('Obrazovanie').Value;

Form4.AdressEdit.Text:=Form1.Table3.FieldByName('Adress_sotrudnika').Value;

Form4.FiOEdit.Text:=Form1.Table3.FieldByName('FiO_sotrudnika').Value;

Form4.KodSEdit.Text:=inttostr(Form1.Table3.FieldByName('Kod_sotrudnika').Value);

Form4.KodDEdit.Text:=inttostr(Form1.Table3.FieldByName('Kod_dolzhnosti').Value);

Form4.TelefonEdit.Text:=Form1.Table3.FieldByName('Telefon').Value;

Form4.BirthyearEdit.Text:=inttostr(Form1.Table3.FieldByName('Birthyear').Value);

Form4.Show;

end;

If DBGrid1.Datasource=DataSource4 then begin

Form5.KodDEdit.Text:=inttostr(Form1.Table4.FieldByName('Kod_dolzhnosti').Value);

Form5.NaimenEdit.Text:=Form1.Table4.FieldByName('Naimen_dolzhnosti').Value;

Form5.OkladEdit.Text:=inttostr(Form1.Table4.FieldByName('Oklad').Value);

Form5.Show;

end;

End;

procedure TForm1.BitBtn3Click(Sender: TObject);

begin

If DBGrid1.Datasource=DataSource1 then

Begin

Table1.Delete;

end;

If DBGrid1.Datasource=DataSource2 then

Begin

Table2.Delete;

end;

If DBGrid1.Datasource=DataSource3 then

Begin

Table3.Delete;

end;

If DBGrid1.Datasource=DataSource4 then

Begin

Table4.Delete;

end;

end;

procedure TForm1.Table1CalcFields(DataSet: TDataSet);

begin

Table1.FieldByName('Poshlina%').Value:=

(Table1.FieldByName('Poshlina').Value/

Table1.FieldByName('Tovar_cost').Value)*100;

end;

procedure TForm1.BitBtn4Click(Sender: TObject);

varCost:longint;

begin

DBGrid1.DataSource:=DataSource1;

Cost:=0;

Table1.First;

with Table1 do

while not eof do begin

Cost:=Cost+Table1.FieldByName('Tovar_cost').Value;

Next;

end;

Edit1.Text:=inttostr(Cost);

end;

procedure TForm1.N5Click(Sender: TObject);

begin

Form1.Close;

end;

procedure TForm1.N10Click(Sender: TObject);

begin

Form6.Edit1.Clear;

Form6.Label1.Caption:='№ декларации:';

Form6.Show;

Form6.BitBtn1.Tag:=1;

end;

procedure TForm1.N14Click(Sender: TObject);

begin

Form6.Edit1.Clear;

Form6.Label1.Caption:='Названиедолжности:';

Form6.Show;

Form6.BitBtn1.Tag:=3;

end;

procedure TForm1.N15Click(Sender: TObject);

begin

Form1.Query1.Close;

Form1.Query1.SQL.Clear;

Form1.Query1.SQL.Add('Select count(distinct(Kod_sotrudnika))');

Form1.Query1.SQL.Add('From Table2 where Declaration_Data between "01.01.2016" and "31.12.2016"');

Form1.Query1.Active:=true;

Form1.DBGrid1.DataSource:=Form1.DataSource5;

end;

procedure TForm1.N20101Click(Sender: TObject);

begin

Form1.Query1.Close;

Form1.Query1.SQL.Clear;

Form1.Query1.SQL.Add('Select FiO_sotrudnika,Adress_sotrudnika,Telefon,Obrazovanie,Naimen_dolzhnosti,sum(kolvo)');

Form1.Query1.SQL.Add('from table2,table3,table4');

Form1.Query1.SQL.Add('where (table2.kod_sotrudnika=table3.kod_sotrudnika) and (table3.kod_dolzhnosti=table4.kod_dolzhnosti) and (Declaration_Data between "01.01.2010" and "31.12.2010")');

Form1.Query1.Sql.Add('group by FiO_sotrudnika,Adress_sotrudnika,Telefon,Obrazovanie,Naimen_dolzhnosti');

Form1.Query1.Active:=true;

Form1.DBGrid1.DataSource:=Form1.DataSource5;

end;

procedure TForm1.N16Click(Sender: TObject);

begin

Form1.Query1.Close;

Form1.Query1.SQL.Clear;

Form1.Query1.SQL.Add('Select FiO_sotrudnika,Adress_sotrudnika,Telefon,Obrazovanie,Naimen_dolzhnosti');

Form1.Query1.SQL.Add('from table3,table4');

Form1.Query1.SQL.Add('where (table3.kod_dolzhnosti=table4.kod_dolzhnosti) and (Birthyear is null)');

Form1.Query1.Active:=true;

Form1.DBGrid1.DataSource:=Form1.DataSource5;

end;

procedure TForm1.N13Click(Sender: TObject);

begin

Form6.Edit1.Clear;

Form6.Label1.Caption:='Наименованиетовара:';

Form6.Show;

Form6.BitBtn1.Tag:=2;

end;

procedure TForm1.BitBtn6Click(Sender: TObject);

begin

BitBtn2.Tag:=0;

Form2.NaimenEdit.Clear;

Form2.CostEdit.Clear;

Form2.PoshlinaEdit.Clear;

Form3.DataEdit.Clear;

Form3.FIOEdit.Clear;

Form3.KodTEdit.Clear;

Form3.KodSEdit.Clear;

Form3.NDEdit.Clear;

Form4.EducEdit.Clear;

Form4.AdressEdit.Clear;

Form4.FiOEdit.Clear;

Form4.KodSEdit.Clear;

Form4.KodDEdit.Clear;

Form4.TelefonEdit.Clear;

Form4.BirthyearEdit.Clear;

Form5.KodDEdit.Clear;

Form5.NaimenEdit.Clear;

Form5.OkladEdit.Clear;

If DBGrid1.Datasource=DataSource1 then

Begin

Table1.Insert;

Form2.show;

End;

If DBGrid1.Datasource=DataSource2 then

Begin

Table2.Insert;

Form3.show;

End;

If DBGrid1.Datasource=DataSource3 then

Begin

Table3.Insert;

Form4.show;

End;

If DBGrid1.Datasource=DataSource4 then

Begin

Table4.Insert;

Form5.show;

End;

end;

procedure TForm1.N19Click(Sender: TObject);

begin

if Form1.DBGrid1.DataSource<>Form1.DataSource1 then begin

ShowMessage('Невыбрананужнаятаблица!');

exit;

end;

Form7.Label1.Caption:='Tovar_name';

Form7.Label1.Tag:=1;

Form7.Show;

end;

procedure TForm1.N20Click(Sender: TObject);

begin

if Form1.DBGrid1.DataSource<>Form1.DataSource1 then begin

ShowMessage('Невыбрананужнаятаблица!');

exit;

end;

Form7.Label1.Caption:='Tovar_cost';

Form7.Label1.Tag:=1;

Form7.Show;

end;

procedure TForm1.N24Click(Sender: TObject);

begin

if Form1.DBGrid1.DataSource<>Form1.DataSource2 then begin

ShowMessage('Невыбрананужнаятаблица!');

exit;

end;

Form7.Label1.Caption:='Kod_tovara';

Form7.Label1.Tag:=2;

Form7.Show;

end;

procedure TForm1.N25Click(Sender: TObject);

begin

if Form1.DBGrid1.DataSource<>Form1.DataSource2 then begin

ShowMessage('Невыбрананужнаятаблица!');

exit;

end;

Form7.Label1.Caption:='Kolvo';

Form7.Label1.Tag:=2;

Form7.Show;

end;

procedure TForm1.N26Click(Sender: TObject);

begin

if Form1.DBGrid1.DataSource<>Form1.DataSource2 then begin

ShowMessage('Невыбрананужнаятаблица!');

exit;

end;

Form7.Label1.Caption:='Declaration_Data';

Form7.Label1.Tag:=2;

Form7.Show;

end;

procedure TForm1.N27Click(Sender: TObject);

begin

if Form1.DBGrid1.DataSource<>Form1.DataSource3 then begin

ShowMessage('Невыбрананужнаятаблица!');

exit;

end;

Form7.Label1.Caption:='Kod_dolzhnosti';

Form7.Label1.Tag:=3;

Form7.Show;

end;

procedure TForm1.N28Click(Sender: TObject);

begin

if Form1.DBGrid1.DataSource<>Form1.DataSource3 then begin

ShowMessage('Невыбрананужнаятаблица!');

exit;

end;

Form7.Label1.Caption:='FiO_sotrudnika';

Form7.Label1.Tag:=3;

Form7.Show;

end;

procedure TForm1.N29Click(Sender: TObject);

begin

if Form1.DBGrid1.DataSource<>Form1.DataSource3 then begin

ShowMessage('Невыбрананужнаятаблица!');

exit;

end;

Form7.Label1.Caption:='Birthyear';

Form7.Label1.Tag:=3;

Form7.Show;

end;

procedure TForm1.N30Click(Sender: TObject);

begin

if Form1.DBGrid1.DataSource<>Form1.DataSource3 then begin

ShowMessage('Невыбрананужнаятаблица!');

exit;

end;

Form7.Label1.Caption:='Adress_sotrudnika';

Form7.Label1.Tag:=3;

Form7.Show;

end;

procedure TForm1.N34Click(Sender: TObject);

begin

if Form1.DBGrid1.DataSource<>Form1.DataSource4 then begin

ShowMessage('Невыбрананужнаятаблица!');

exit;

end;

Form7.Label1.Caption:='Oklad';

Form7.Label1.Tag:=4;

Form7.Show;

end;

procedure TForm1.N35Click(Sender: TObject);

begin

N21.Click;

Table2.IndexFieldNames:='';

end;

procedure TForm1.N36Click(Sender: TObject);

begin

N21.Click;

Table2.IndexName:='DNumber';

end;

procedure TForm1.N37Click(Sender: TObject);

begin

N21.Click;

Table2.IndexName:='IKolvo';

end;

procedure TForm1.N38Click(Sender: TObject);

begin

N21.Click;

Table2.Active:=false;

Table2.Exclusive:=true;

Table2.AddIndex('KodS','Kod_sotrudnika',[ixCaseInsensitive,ixDescending],'');

Table2.Exclusive:=false;

Table2.Active:=true;

Table2.IndexName:='KodS';

end;

procedure TForm1.N39Click(Sender: TObject);

begin

N41.Click;

Table4.Active:=false;

Table4.Exclusive:=true;

Table4.AddIndex('IKodD','Kod_dolzhnosti',[ixDescending]);

Table4.Exclusive:=false;

Table4.Active:=true;

Table4.IndexName:='IKodD';

end;

procedure TForm1.N20111Click(Sender: TObject);

begin

Form1.Query1.Close;

Form1.Query1.SQL.Clear;

Form1.Query1.SQL.Add('select Tovar_name, tovar_cost, sum(kolvo) from table1,table2');

Form1.Query1.SQL.Add('where (Table1.kod_tovara=Table2.kod_tovara) and (Declaration_Data between "01.06.2011" and "30.06.2011")');

Form1.Query1.SQL.Add('group by Tovar_name, tovar_cost');

Form1.Query1.Active:=true;

Form1.DBGrid1.DataSource:=DataSource5;

end;

procedure TForm1.N40Click(Sender: TObject);

begin

Form1.Query1.Close;

Form1.Query1.SQL.Clear;

Form1.Query1.SQL.Add('select FiO_sotrudnika, Obrazovanie,Tovar_name,Tovar_cost, sum(tovar_cost) from table1,table2,table3');

Form1.Query1.SQL.Add('where (Table1.kod_tovara=Table2.kod_tovara) and  (table2.kod_sotrudnika=Table3.kod_sotrudnika)');

Form1.Query1.SQL.Add('group by FiO_sotrudnika, Obrazovanie,Tovar_name,Tovar_cost');

Form1.Query1.Active:=true;

Form1.DBGrid1.DataSource:=DataSource5;

end;

procedure TForm1.N45Click(Sender: TObject);

begin

Form1.RvProject1.Close;

Form1.RVConnect1.DataSet:=Form1.Table1;

Form1.RVProject1.ProjectFile:=ExtractFilePath(Application.Exename)+'Ot1.rav';

Form1.RVProject1.Execute;

end;

procedure TForm1.N47Click(Sender: TObject);

begin

Form1.Query1.Close;

Form1.Query1.SQL.Clear;

Form1.Query1.SQL.Add('select FiO_sotrudnika, Obrazovanie,Tovar_name,Tovar_cost, sum(tovar_cost) from table1,table2,table3');

Form1.Query1.SQL.Add('where (Table1.kod_tovara=Table2.kod_tovara) and  (table2.kod_sotrudnika=Table3.kod_sotrudnika)');

Form1.Query1.SQL.Add('group by FiO_sotrudnika, Obrazovanie,Tovar_name,Tovar_cost');

Form1.Query1.Active:=true;

Form1.RvProject1.Close;

RVConnect1.DataSet:=Query1;

Form1.RVProject1.ProjectFile:=ExtractFilePath(Application.Exename)+'GroupOt.rav';

Form1.RVProject1.Execute;

end;

procedure TForm1.N46Click(Sender: TObject);

begin

Form1.Query1.Close;

Form1.Query1.SQL.Clear;

Form1.Query1.SQL.Add('Select FiO_sotrudnika,Adress_sotrudnika,Telefon,Obrazovanie,Naimen_dolzhnosti');

Form1.Query1.SQL.Add('from table3,table4');

Form1.Query1.SQL.Add('where (table3.kod_dolzhnosti=table4.kod_dolzhnosti) and (Birthyear is null)');

Form1.Query1.Active:=true;

Form1.RvProject1.Close;

RVConnect1.DataSet:=Query1;

Form1.RVProject1.ProjectFile:=ExtractFilePath(Application.Exename)+'Ot2.rav';

Form1.RVProject1.Execute;

end;

end.

Рис. Б.1 - Основнаяформа

unitUnit2;

interface

uses

 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

 Dialogs, StdCtrls, Buttons;

type

 TForm2 = class(TForm)

   Label1: TLabel;

   Label2: TLabel;

   Label3: TLabel;

NaimenEdit: TEdit;

PoshlinaEdit: TEdit;

CostEdit: TEdit;

   SaveBtn1: TBitBtn;

   Label4: TLabel;

KodTEdit: TEdit;

procedure SaveBtn1Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

 Form2: TForm2;

implementation

uses Unit1;

{$R *.dfm}

procedure TForm2.SaveBtn1Click(Sender: TObject);

begin

if Form1.BitBtn2.Tag=1 then Form1.Table1.Edit;

ifKodTEdit.Text<>'' then Form1.Table1.FieldByName('Kod_tovara').Value:=strtoint(KodTEdit.Text);

Form1.Table1.FieldByName('Tovar_name').Value:=NaimenEdit.Text;

Form1.Table1.FieldByName('Tovar_cost').Value:=strtoint(CostEdit.Text);

Form1.Table1.FieldByName('Poshlina').Value:=strtoint(PoshlinaEdit.Text);

Form1.Table1.Post;

Form2.Close;

end;

end.

Рис. Б.2 - Форма для добавления или изменения данных в первой таблице

unit Unit3;

interface

uses

 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

 Dialogs, StdCtrls, Buttons;

type

 TForm3 = class(TForm)

   Label1: TLabel;

   Label2: TLabel;

   Label3: TLabel;

   Label4: TLabel;

   Label5: TLabel;

   Label6: TLabel;

NDEdit: TEdit;

KodTEdit: TEdit;

KolEdit: TEdit;

DataEdit: TEdit;

FIOEdit: TEdit;

KodSEdit: TEdit;

   SaveBtn2: TBitBtn;

procedure SaveBtn2Click(Sender: TObject);

private

{ Privatedeclarations }

public

{ Public declarations }

end;

var

 Form3: TForm3;

implementation

uses Unit1, Unit2;

{$R *.dfm}

procedure TForm3.SaveBtn2Click(Sender: TObject);

begin

if Form1.BitBtn2.Tag=1 then Form1.Table2.Edit;

Form1.Table2.FieldByName('Declaration_Data').Value:=strtodate(Form3.DataEdit.Text);

Form1.Table2.FieldByName('FIO_grazhdanina').Value:=Form3.FiOEdit.Text;

Form1.Table2.FieldByName('Kod_sotrudnika').Value:=strtoint(Form3.KodSEdit.Text);

Form1.Table2.FieldByName('Kod_tovara').Value:=strtoint(Form3.KodTEdit.Text);

Form1.Table2.FieldByName('Kolvo').Value:=strtoint(Form3.KolEdit.Text);

Form1.Table2.FieldByName('Declaration_number').Value:=strtoint(Form3.NDEdit.Text);

Form1.Table2.Post;

Form3.Close;

end;

end.

Рис. Б.3 - Форма для добавления или изменения данных вовторой таблице

unit Unit4;

interface

uses

 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

 Dialogs, StdCtrls, Buttons;

type

 TForm4 = class(TForm)

   Label1: TLabel;

   Label2: TLabel;

   Label3: TLabel;

   Label4: TLabel;

   Label5: TLabel;

   Label6: TLabel;

   Label7: TLabel;

KodSEdit: TEdit;

KodDEdit: TEdit;

FIOEdit: TEdit;

AdressEdit: TEdit;

TelefonEdit: TEdit;

BirthyearEdit: TEdit;

EducEdit: TEdit;

   SaveBtn3: TBitBtn;

procedure SaveBtn3Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

 Form4: TForm4;

implementation

uses Unit1, Unit3;

{$R *.dfm}

procedure TForm4.SaveBtn3Click(Sender: TObject);

begin

if Form1.BitBtn2.Tag=1 then Form1.Table3.Edit;

Form1.Table3.FieldByName('Obrazovanie').Value:=Form4.EducEdit.Text;

Form1.Table3.FieldByName('Adress_sotrudnika').Value:=Form4.AdressEdit.Text;

Form1.Table3.FieldByName('FiO_sotrudnika').Value:=Form4.FiOEdit.Text;

Form1.Table3.FieldByName('Kod_sotrudnika').Value:=strtoint(Form4.KodSEdit.Text);

Form1.Table3.FieldByName('Kod_dolzhnosti').Value:=strtoint(Form4.KodDEdit.Text);

Form1.Table3.FieldByName('Telefon').Value:=Form4.TelefonEdit.Text;

Form1.Table3.FieldByName('Birthyear').Value:=strtoint(Form4.BirthyearEdit.Text);

Form1.Table3.Post;

Form4.Close;

end;

end.

Рис. Б.4 - Форма для добавления или изменения данных в третьей таблице

unit Unit5;

interface

uses

 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

 Dialogs, StdCtrls, Buttons;

type

 TForm5 = class(TForm)

   Label1: TLabel;

   Label2: TLabel;

   Label3: TLabel;

KodDEdit: TEdit;

NaimenEdit: TEdit;

OkladEdit: TEdit;

   SaveBtn4: TBitBtn;

procedure SaveBtn4Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

 Form5: TForm5;

implementation

uses Unit1, Unit4;

{$R *.dfm}

procedure TForm5.SaveBtn4Click(Sender: TObject);

begin

if Form1.BitBtn2.Tag=1 then Form1.Table4.Edit;

Form1.Table4.FieldByName('Kod_dolzhnosti').Value:=strtoint(KodDEdit.Text);

Form1.Table4.FieldByName('Naimen_dolzhnosti').Value:=NaimenEdit.Text;

Form1.Table4.FieldByName('Oklad').Value:=strtoint(OkladEdit.Text);

Form1.Table4.Post;

Form5.Close;

end;

end.

Рис. Б.5 - Форма для добавления или изменения данных в четвёртой таблице

unit Unit7;

interface

uses

DB,Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

 Dialogs, StdCtrls, Buttons;

type

 TForm7 = class(TForm)

   Label1: TLabel;

   Edit1: TEdit;

   CheckBox1: TCheckBox;

   BitBtn1: TBitBtn;

procedure BitBtn1Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

 Form7: TForm7;

implementation

uses Unit1;

{$R *.dfm}

procedure TForm7.BitBtn1Click(Sender: TObject);

begin

if CheckBox1.Checked then begin

case Label1.Tag of

1:  begin

Form1.Table1.Filtered := false;

Form1.Table1.Filter:=Label1.Caption+'='+#39+Edit1.Text+#39;

Form1.Table1.Filtered:=true;

end;

2:  begin

Form1.Table2.Filtered := false;

Form1.Table2.Filter:=Label1.Caption+'='+#39+Edit1.Text+#39;

Form1.Table2.Filtered:=true;

end;

3:  begin

Form1.Table3.Filtered := false;

Form1.Table3.Filter:=Label1.Caption+'='+#39+Edit1.Text+#39;

Form1.Table3.Filtered:=true;

end;

4:  begin

Form1.Table4.Filtered := false;

Form1.Table4.Filter:=Label1.Caption+'='+#39+Edit1.Text+#39;

Form1.Table4.Filtered:=true;

end;

end;     //end case block

end

else begin

Form1.Table1.Filtered:=false;

Form1.Table1.Filter:='';

Form1.Table2.Filter:='';

Form1.Table3.Filter:='';

Form1.Table4.Filter:='';

end;

if (Form7.Label1.Tag=1) and

not(Form1.Table1.Locate(Label1.Caption,Edit1.Text,[])) then

ShowMessage('Записьненайдена');

if (Form7.Label1.Tag=2) and

not(Form1.Table2.Locate(Label1.Caption,Edit1.Text,[])) then

ShowMessage('Записьненайдена');

if (Form7.Label1.Tag=3) and

not(Form1.Table3.Locate(Label1.Caption,Edit1.Text,[])) then

ShowMessage('Записьненайдена');

if (Form7.Label1.Tag=4) and

not(Form1.Table4.Locate(Label1.Caption,Edit1.Text,[])) then

ShowMessage('Записьненайдена');

Form7.Close;

end;

end.

Рис. Б.6 – Форма для поиска и фильтрации

unit Unit6;

interface

uses

 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

 Dialogs, StdCtrls, Buttons;

type

 TForm6 = class(TForm)

   Edit1: TEdit;

   BitBtn1: TBitBtn;

   Label1: TLabel;

procedure BitBtn1Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

 Form6: TForm6;

implementation

uses Unit1;

{$R *.dfm}

procedure TForm6.BitBtn1Click(Sender: TObject);

begin

if Form6.BitBtn1.Tag=1 then begin

Form1.Query1.Close;

Form1.Query1.SQL.Clear;

Form1.Query1.SQL.Add('SELECT Table3.FiO_sotrudnika, Table3.Adress_sotrudnika, Table3.Telefon, Table3.Birthyear');

Form1.Query1.SQL.Add('FROM "Table2.DB" Table2');

Form1.Query1.SQL.Add('INNER JOIN "Table3.db" Table3');

Form1.Query1.SQL.Add('ON  (Table2.Kod_sotrudnika = Table3.Kod_sotrudnika)');

Form1.Query1.SQL.Add('WHERE  Table2.Declaration_number=:Par');

Form1.Query1.ParamByName('Par').AsInteger:=strtoint(Form6.Edit1.Text);

Form1.Query1.Active:=true;

Form6.Close;

Form1.DBGrid1.DataSource:=Form1.DataSource5;

end;

if Form6.BitBtn1.Tag=3 then begin

Form1.Query1.Close;

Form1.Query1.SQL.Clear;

Form1.Query1.SQL.Add('Select count(Table3.Kod_dolzhnosti), Oklad');

Form1.Query1.SQL.Add('From Table3, Table4');

Form1.Query1.SQL.Add('where (Table3.Kod_dolzhnosti=Table4.Kod_dolzhnosti) and (Naimen_dolzhnosti=:Par)');

Form1.Query1.SQL.Add('group by Oklad');

Form1.Query1.ParamByName('Par').AsString:=Form6.Edit1.Text;

Form1.Query1.Active:=true;

Form6.Close;

Form1.DBGrid1.DataSource:=Form1.DataSource5;

end;

if Form6.BitBtn1.Tag=2 then begin

Form1.Query1.Close;

Form1.Query1.SQL.Clear;

Form1.Query1.SQL.Add('Select FiO_sotrudnika,Adress_sotrudnika,Telefon,Obrazovanie,Naimen_dolzhnosti');

Form1.Query1.SQL.Add('From Table1,Table2,Table3,Table4');

Form1.Query1.SQL.Add('where (Tovar_name=:Par) and (Table1.Kod_tovara=Table2.Kod_tovara) and (Table2.Kod_sotrudnika=Table3.Kod_sotrudnika) and (Table3.Kod_dolzhnosti=Table4.Kod_dolzhnosti)');

Form1.Query1.ParamByName('Par').AsString:=Form6.Edit1.Text;

Form1.Query1.Active:=true;

Form6.Close;

Form1.DBGrid1.DataSource:=Form1.DataSource5;

end;

end;

end.

Рис. Б.7 - Форма для работы сдинамическими запросами




Похожие работы, которые могут быть Вам интерестны.

1. Организация программирования в Word с использованием встроенного языка VBA. Организация программирования в таблице Excel с использованием встроенного языка VBA

2. ПЕРЕМЕННЫЕ В ЯЗЫКАХ ПРОГРАММИРОВАНИЯ

3. Современные языки программирования

4. ВИЗУАЛЬНАЯ СРЕДА ПРОГРАММИРОВАНИЯ КОНСПЕКТ

5. ОСНОВНЫЕ ПОНЯТИЯ, ТРЕБОВАНИЯ И ПРАВИЛА ПРОГРАММИРОВАНИЯ

6. Разработка программного комплекса на языке программирования С++

7. Создание web‒справочника по языкам программирования для кафедры

8. Автоматизированная информационная систему «Регистратура поликлиники» на языке программирования С++

9. Оперативное управление на основе решения задач линейного программирования

10. ФОРМАЛЬНЫЙ СИНТАКСИС КОНСТРУКЦИЙ ЯЗЫКА ПРОГРАММИРОВАНИЯ НА ПРИМЕРЕ VISUAL BASIC