|
Создание базы данных "РЭО-ГАИ"
Создание базы данных "РЭО-ГАИ"
2 Министерство образования и науки Республики Казахстан Карагандинский государственный технический университет Кафедра САПР ПОЯСНИТЕЛЬНАЯ ЗАПИСКА к курсовой работе по дисциплине "Технология разработки баз данных" Тема: "Создание базы данных "РЭО-ГАИ" Руководители: (подпись) (дата) (подпись) (дата) Студенты (группа) _____________________ (подпись) (дата) Караганда 2009 Содержание - Введение
- 1. Постановка задачи
- 2. Структура базы данных
- 2.1 Структура таблиц
- 2.2 Структура хранимой информации
- 2.3 Нормализация отношений
- 3. Структура программы
- 3.1 Описание модулей
- 3.2 Описание запросов выполняемых в программе
- Заключение
- Приложение
ВведениеВ настоящее время все большее значение получает автоматизация процессов, связанных с бытовыми услугами для удобства и уменьшения затрат на обслуживание. Вследствие этого появляется необходимость в разработке универсальных систем, позволяющих довольно легко обрабатывать информацию, а также генерировать необходимые отчеты.Целью выполнения данного курсового проекта является разработка системы "РЭО-ГАИ" и соответствующей ей базы данных, позволяющей документировать в электронном виде автоматизацию учета движений автомобилей и предоставлять необходимые отчеты.В качестве среды разработки базы данных была выбрана СУБД MSSQL Server 2000. Эта СУБД была выбрана в качестве инструмента потому, что она способна работать на серверной основе, и имеет большие функциональные возможности. В качестве языка программирования был выбран язык Borland Delphi. Данная среда позволяет легко работать с базой данных, созданной в MSSQL Server 2000, редактировать и дополнять ее.Язык SQL (Structured Query Language) в настоящее время стал фактически стандартным языком доступа к реляционным базам данных. Целью стандартизации является переносимость приложений между различными СУБД.Реализация в SQL концепции операции, ориентированных на табличное представление данных, позволило создать компактный язык с небольшим (менее 30) набором предложений. SQL может использоваться как интерактивный (для выполнения запросов) и как встроенный (для построения прикладных программ). В нем существует:предложение определения данных (определение баз данных, а также определение и уничтожение таблиц и индексов);предложение на выбор данных;предложение управления данными (предоставление и отмена привилегии на доступ данным и др.);предложение на модификацию данных (добавление, удаление, изменение данных).Кроме того, предоставляет возможность выполнять в этих предложениях:арифметические вычисления, обработку текстовых строк;упорядочивание строк, столбцов при выводе содержимого таблиц;запоминание выводимого по запросу содержимого таблицы;создание представлений (виртуальных таблиц);агрегирование данных: группирование данных и применение к этим группам таких операций, как среднее, сумма, максимум, минимум, число элементов.К инструментальным средствам, позволяющим обеспечить простое и эффективное использование MSSQL Server можно отнести:Enterprise Manager;Service Manager;Query Analyzer.База данных SQL Server - это контейнер объектов, предназначенных для хранения, записи и извлечения данных в безопасном режиме - содержит следующие компоненты:Таблицы;Хранимые процедуры;Индексы;Представления.1. Постановка задачиЗадачей данного курсового проекта является разработка системы "РЭО - ГАИ", включающую в себя 9 таблиц:Автомобили (№ автомобиля, код района учета, код марки автомобиля, код типа кузова, № двигателя, № шасси, код цвета, РНН владельца, дата выпуска);Владельцы (РНН владельца, признак владельца, адрес владельца, ФИО/наименование, телефон, адрес стоянки авто, пол, год рождения, № удостоверения личности, дата выдачи, профессия);Движение (№ авто, код операции, код района учета, РНН владельца, дата операции);Категория цвета (код категории цвета, наименование категории);Марка автомобиля (код марки авто, наименование);Операции (код операции, наименование операции);Районы учета (код учета района, наименование района);Тип кузова (код типа кузова, наименование);Цвета (код цвета, код категории цвета, наименование).При работе с системой работник ГАИ должен иметь возможность решать следующие задачи:Регистрировать новые автомобили в системе.Относить автомобили к районам учета.Проводить каталогизацию автомобилей.Вести учет количества автомобилей, принадлежащих владельцам.Вести учет движений автомобилей, при этом предполагается три вида операций: постановка на учет, снятие с учета, перерегистрация.Вести поиск автомобилей по неполному номеру двигателя.Вычислять "возраст" каждого из автомобилей, состоящих на учете на текущую дату.Вести поиск автомобилей по категориям цветов, поставленных на учет в текущем году.Администрация управления дорожной полиции должно иметь возможность получать сведенияО владельцах автомобилей, которые были сняты с учета одного района и не поставлены на учет другого района.О перерегистрации автомобилей на других владельцев.О движении транспортных средств на некоторую дату.2. Структура базы данных2.1 Структура таблицИнформационная система предназначена для автоматизации учета движений автомобилей в "РЭО_ГАИ". Система должна предусматривать режимы ведения системного каталога, отражающего список районов учета движений автомобилей, марок, типов кузова, категорий цвета, а также цветов автомобилей. В движении аавтомобиля может происходить три операции - постановка на учет, снятие с учета, перерегистрация. В системном каталоге операция имеет код и полное наименование, каждый автомобиль характеризуется следующими параметрами: марка автомобиля, тип кузова, категория цвета, квет; эти параметры имеют уникальные коды.Также каждый автомобиль характеризауется следующими параметрами:№ автомобиля;код района учета,код марки,код типа кузова,№ двигателя,№ шасси,№ кузова,дата выпуска,код цвета,РНН владельца.В "РЭО_ГАИ" ведется учет владельцев автомобилей. Владелец может быть юридическим и физическим лицом. Если владелец - юридическое лицо, то он характеризуется следующими параметрами:РННФИО/наименование владельцаадрестелефонадрес стоянки автомобиляНа владельца - физическое лицо заносятся следующие данные:РННполгод рождения№ удостоверения личностидата выдачипрофессияПредусмотреть следующие ограничения на информацию в системе:У каждого владельца может быть одновременно несколько автомобилей, тогда как у одного автомобиля не может быть больше одного владельца.На учете каждого района может стоять множество автомобилей, но каждый автомобиль может состоять на учете только одного района.Каждый автомобиль, снятый с одного района учета, должен встать на учет другого района.2.2 Структура хранимой информацииВся информация, поступающая от пользователя, записывается в основные таблицы базы данных ("Владельцы", "Автомобили", "Движение", "Категории цвета", Марки автомобиля", "Операции", "Районы учета", "Типы кузова" и "Цвета"). Для обеспечения целостности данных между таблицами существуют строгие связи. Поле "РНН владельца" таблицы "Владельцы" связано отношением один ко многим с соответствующими полями таблиц "Движение" и "Автомобили".Поле "№ автомобиля" таблицы "Автомобили" связано отношением один ко многим с соответствующим полем таблицы "Движение".Поле "Код учета района" таблицы "Районы учета" связано отношением один ко многим с соответствующими полями таблиц "Движение" и "Автомобили".Поле "Код операции" таблицы "Операции" связано отношением один ко многим с соответствующим полем таблицы "Движение".Поле "Код марки авто" таблицы "Марки автомобиля" связано отношением один ко многим с соответствующим полем таблицы "Автомобили". Поле "Код типа кузова" таблицы "Типы кузова" связано отношением один ко многим с соответствующим полем таблицы "Автомобили". Поле "Код категории цвета" таблицы "Категория цветов" связано отношением один ко многим с соответствующим полем таблицы "Цвета". Поле "Код цвета" таблицы "Цвета" связано отношением один ко многим с соответствующим полем таблицы "Автомобили". Более наглядно связь между таблицами изображена на рис.2.2.1Рис.2.2.1 - Диаграмма связей таблиц в базе данных 2.3 Нормализация отношенийНормализация - это пошаговый обратимый процесс композиций и декомпозиций исходных отношений, обладающих лучшими свойствами при включении, изменении, удалении данных, назначении им ключей по определенным правилам и выявлении всех функциональных зависимостей.Первая нормальная формаТаблица находится в 1NF тогда и только тогда, когда ни одна из ее строк не содержит в любом своем поле более одного значения и ни одно из ее ключевых полей не пусто. Таблица находится в 1-ой формеВторая нормальная формаРассмотрим схему отношения:Владельцы (РНН владельца, Признак владельца, ФИО/Наименование, Адрес владельца, Телефон, Адрес стоянки авто, Пол, Год рождения, № уд. личности, Дата выдачи, Профессия)Первичный ключ: РНН владельца, Признак владельцаВозможные функциональные зависимостиРНН владельца - ФИОРНН владельца - Адрес владельцаРНН владельца - Адрес стоянки автоРНН владельца - ПолРНН владельца - Год рожденияРНН владельца - № уд. личностиРНН владельца - Дата выдачиРНН владельца - Профессия№ уд. личности - Дата выдачиПризнак владельца - НаименованиеВидно, что, хотя первичным ключом является составной атрибут РНН владельца, Признак владельца, атрибут ФИО/Наименование зависит от части первичного ключа. В результат при Признаке владельца - юридическое лицо, мы не сможем вставить кортеж, с Полом, Годом рождения и Профессией владельца. Можно произвести следующую декомпозицию отношения Владельцы на два отношения: Владельцы - юр_лица и Владельцы-физ_лица.Владельцы-юр_лица (РНН владельца, Признак владельца, Наименование, Адрес владельца, Адрес стоянки авто, Телефон)Первичный ключРНН владельца, Признак владельцаФункциональные зависимости:РНН владельца, Признак владельца - НаименованиеРНН владельца, Признак владельца - Адрес владельцаРНН владельца, Признак владельца - ТелефонРНН владельца, Признак владельца - Адрес стоянки автоВладельцы-физ_лица (РНН владельца, Признак владельца, ФИО, Адрес владельца, Телефон, Адрес стоянки авто, Пол, Год рождения, № уд. личности, Дата выдачи, Профессия)РНН владельца, Признак владельца - ФИОРНН владельца, Признак владельца - Адрес владельцаРНН владельца, Признак владельца - ТелефонРНН владельца, Признак владельца - Адрес стоянки автоРНН владельца, Признак владельца - ПолРНН владельца, Признак владельца - Год рожденияРНН владельца, Признак владельца - № уд. личностиРНН владельца, Признак владельца - Дата выдачиРНН владельца, Признак владельца - Профессия№ уд. личности - Дата выдачиКаждое из этих двух отношений находятся в 2 NFТретья нормальная формаРассмотрим отношение Владельцы-физ_лица. Функциональная зависимость РНН владельца - Дата выдачи является транзитивной; она является следствием функциональных зависимостей РНН владельца - № уд. личности и № уд. личности - Дата выдачи. То есть, дата выдачи является характеристикой удостоверения личности владельца.Можно декомпозировать отношение Владельцы-физ_лица в два отношения Владельцы-физ_лица-уд. личности и Удостоверения личности:Владельцы-физ_лица-уд. личности (РНН владельца, Признак владельца, ФИО, Адрес владельца, Телефон, Адрес стоянки авто, Пол, Год рождения, № уд. личности, Профессия)Первичный ключ:Возможные функциональные зависимости:РНН владельца, Признак владельца - ФИОРНН владельца, Признак владельца - Адрес владельцаРНН владельца, Признак владельца - ТелефонРНН владельца, Признак владельца - Адрес стоянки автоРНН владельца, Признак владельца - ПолРНН владельца, Признак владельца - Год рожденияРНН владельца, Признак владельца - № уд. личностиРНН владельца, Признак владельца - ПрофессияУдостоверения личности (№ удостоверения личности, Дата выдачи)Первичный ключ:№ уд. личностиВозможные функциональные зависимости:№ уд. личности - Дата выдачиКаждое из этих двух отношений находится в 3NF.Нормальная форма Бойса-КоддаРассмотрим схему отношения Владельцы-физ_лица-уд. личности (РНН владельца, Признак владельца, ФИО, Адрес владельца, Телефон, Адрес стоянки авто, Пол, Год рождения, № уд. личности, Профессия)Здесь личность владельца может полностью определятся как именем, так и его РНН.Можно произвести декомпозицию отношения в два отношения: Владельцы-физ_лица-имена иВладельцы-физ_лица-имена (РНН владельца, ФИО)Первичный ключ: РНН владельцаФункциональные зависимости:РНН владельца - ФИОВладельцы-физ_лица-атрибуты (РНН владельца, Признак владельца, Адрес владельца, Телефон, Адрес стоянки авто, Пол, Год рождения, № уд. личности, Профессия)Первичный ключ: РНН владельца, Признак владельцаВозможные функциональные зависимости:РНН владельца, Признак владельца - Адрес владельцаРНН владельца, Признак владельца - ТелефонРНН владельца, Признак владельца - Адрес стоянки автоРНН владельца, Признак владельца - ПолРНН владельца, Признак владельца - Год рожденияРНН владельца, Признак владельца - № уд. личностиРНН владельца, Признак владельца - ПрофессияЧетвертая нормальная формаВидим, что каждому владельцу соответствует множество, состоящее из нуля или более значений атрибута телефон (А>В), также как и соответствует множество, состоящее из нуля или более значений атрибута адрес стоянки авто (А>С). Но телефон владельца авто не зависит от адреса стоянки авто.Многозначные зависимости:РНН владельца >> ТелефонРНН владельца >> Адрес стоянки автоМожно произвести декомпозицию отношения:Владельцы-физ_лица-телефоны (РНН владельца, Признак владельца, Адрес владельца, Телефон, Пол, Год рождения, № уд. личности, ПрофессияПервичный ключ: РНН владельца, Признак владельцаВозможные функциональные зависимости:РНН владельца, Признак владельца - Адрес владельцаРНН владельца, Признак владельца - ТелефонРНН владельца, Признак владельца - ПолРНН владельца, Признак владельца - Год рожденияРНН владельца, Признак владельца - № уд. личностиРНН владельца, Признак владельца - ПрофессияВладельцы-физ_лица-адреса стоянок (РНН владельца, Признак владельца, Адрес владельца, Адрес стоянки авто, Пол, Год рождения, № уд. личности, Профессия)Первичный ключ: РНН владельца, Признак владельцаВозможные функциональные зависимости:РНН владельца, Признак владельца - Адрес владельцаРНН владельца, Признак владельца - Адрес стоянки автоРНН владельца, Признак владельца - ПолРНН владельца, Признак владельца - Год рожденияРНН владельца, Признак владельца - № уд. личностиРНН владельца, Признак владельца - ПрофессияОтношения находятся в 4NFПятая нормальная формаТаблица находится в пятой нормальной форме 5NF, тогда и только тогда, когда в каждой ее полной декомпозиции все проекции содержат возможный ключ.Декомпозиция отношений6Владельцы-юр_лица_наименования (РНН владельца, Признак владельца, Наименование)Первичный ключРНН владельца, Признак владельцаФункциональные зависимости:РНН владельца, Признак владельца - НаименованиеВладельцы-юр_лица_адреса владельцев (РНН владельца, Признак владельца, Адрес владельца)Первичный ключРНН владельца, Признак владельцаФункциональные зависимости:РНН владельца, Признак владельца - Адрес владельцаВладельцы-юр_лица_адреса стоянок авто (РНН владельца, Признак владельца, Адрес стоянки авто, Телефон)Первичный ключРНН владельца, Признак владельцаФункциональные зависимости:РНН владельца, Признак владельца - Адрес стоянки автоВладельцы-юр_лица_телефоны (РНН владельца, Признак владельца, Телефон)Первичный ключРНН владельца, Признак владельцаФункциональные зависимости:РНН владельца, Признак владельца - ТелефонВладельцы-физ_лица-имена (РНН владельца, ФИО)Первичный ключ: РНН владельцаФункциональные зависимости:РНН владельца - ФИОВладельцы-физ_лица_адреса владельцев (РНН владельца, Признак владельца, Адрес владельца)Первичный ключ: РНН владельца, Признак владельцаРНН владельца, Признак владельца - Адрес владельцаВладельцы-физ_лица-телефоны (РНН владельца, Признак владельца, Телефон, рождения)Первичный ключ: РНН владельца, Признак владельцаВозможные функциональные зависимости:РНН владельца, Признак владельца - ТелефонВладельцы-физ_лица-адреса стоянок (РНН владельца, Признак владельца, Адрес стоянки авто)Первичный ключ: РНН владельца, Признак владельцаВозможные функциональные зависимости:РНН владельца, Признак владельца - Адрес стоянки автоВладельцы-физ_лица-пол (РНН владельца, Признак владельца, Пол)Первичный ключ: РНН владельца, Признак владельцаВозможные функциональные зависимости:РНН владельца, Признак владельца - ПолВладельцы-физ_лица-год рождения (РНН владельца, Признак владельца, Год рождения)Первичный ключ: РНН владельца, Признак владельцаВозможные функциональные зависимости:РНН владельца, Признак владельца - Год рожденияВладельцы-физ_лица-уд. личности (РНН владельца, Признак владельца, № уд. личности)Первичный ключ: РНН владельца, Признак владельцаВозможные функциональные зависимости:РНН владельца, Признак владельца - № уд. личностиВладельцы-физ_лица-профессии (РНН владельца, Признак владельца, Профессия)Первичный ключ: РНН владельца, Признак владельцаВозможные функциональные зависимости:РНН владельца, Признак владельца - профессия3. Структура программыПрограмма "РЭО-ГАИ" реализована на языке программирования Borland Delphi с подключением MSSQL Server 2000. Структуру программы составляют 4 класса и 6 программных модулей.3.1 Описание модулейМодули данной программы подразделяются на:1. Модуль Unit1, который находится в файле Unit1. pas содержит информацию о всех таблицах данной базы данных.2. В модуле Unit2, находящемся в файле Unit2. pas происходит реализация класса TZaprosy (запросы).3. Модуль Unit3 расположен в файле Unit3. pas, в котором находится реализация класса TOtchety (отчеты).4. Модуль Unit4 расположен в файле Unit4. pas, в нем находится код описания класса TProcedury (процедуры).5. Модуль Unit5, который расположен в файле Unit5. pas содержит реализацию класса TSpravka (справка).6. Модуль Unit6 находится в файле Unit6. pas и содержит информацию об отчетах.3.2 Описание запросов выполняемых в программеЗапрос 1. Количество автотранспортных средств, принадлежащих каждому из владельцев.SELECT [РНН владельца], COUNT ([№автомобиля])FROM АвтомобилиGROUP BY [РНН владельца]ORDER BY [РНН владельца] ;Запрос 2. Найти автомобиль по неполному номеру двигателя <…>SELECT [№автомобиля], [№двигателя]FROM АвтомобилиWHERE [№двигателя] LIKE '%111%';Запрос 3. Вычислить "возраст" каждого из автомобилей, стоящих на учете на текущую дату.SELECT Движение. [№автомобиля], 'Возраст =', datediff (yy, Автомобили. [Дата выпуска],getdate ())FROM Движение, Автомобили, ОперацииWHERE Автомобили. [№автомобиля] =Движение. [№автомобиля]and Операции. [Код операции] =Движение. [Код операции]and Операции. [Наименование] like '%постан%'and [Дата операции] < getdate ();Запрос 4. Какие операции проводились с автомобилями по <i-му> району учета в текущем месяце.SELECT Движение. [№автомобиля], Районы_учета. [Наименование района учета], Операции. [Наименование операции]FROM Операции, Районы_учета, ДвижениеWHERE Районы_учета. [Код района учета] =Движение. [Код района учета]AND Операции. [Код операции] =Движение. [Код операции]AND Районы_учета. [Наименование района учета] ='Казыбек-бийский'AND month ([Дата операции]) =month (getdate ());Запрос 5. Автомобили, каких категорий цветов поставлены на учет в текущем году.SELECT Движение. [№автомобиля], Категории_цвета. [Наименование категории цвета]FROM Категории_цвета, Цвета, Автомобили, Операции, ДвижениеWHERE Категории_цвета. [Код категории цвета] =Цвета. [Код категории цвета]AND Цвета. [Код цвета] =Автомобили. [Код цвета]AND Автомобили. [№автомобиля] =Движение. [№автомобиля]AND Операции. [Наименование операции] = 'Постановка на учет'AND year (Движение. [Дата операции]) =year (getdate ());Отчет 1. Карточка учета автотранспортного средстваSELECT Движение. [№автомобиля],Движение. [РНН владельца],Операции. [Наименование операции],Районы_учета. [Наименование района учета],Движение. [Дата операции]FROM Движение, Операции, Районы_учетаWHERE Районы_учета. [Код района учета] = Движение. [Код района учета]AND Операции. [Код операции] = Движение. [Код операции] ;Отчет 2. Отчет о движении транспортных средств на "I-ю" датуSELECT Движение. [Дата операции],Движение. [№автомобиля],Движение. [РНН владельца],Районы_учета. [Наименование района учета],Операции. [Наименование операции]FROM Движение, Районы_учета, ОперацииWHERE Районы_учета. [Код района учета] = Движение. [Код района учета]AND Операции. [Код операции] = Движение. [Код операции]AND year (Движение. [Дата операции]) =year ('13 October 2007')and month (Движение. [Дата операции]) =month ('13 October 2007')and day (Движение. [Дата операции]) =day ('13 October 2007');Отчет 3. Список автомобилей, владельцами которых являются физические лицаSELECT Движение. [№автомобиля],Категории_цвета. [Наименование категории цвета]FROM Категории_цвета, Цвета, Автомобили, Операции, ДвижениеWHERE Категории_цвета. [Код категории цвета] =Цвета. [Код категории цвета]AND Цвета. [Код цвета] =Автомобили. [Код цвета]AND Автомобили. [№автомобиля] =Движение. [№автомобиля]AND Операции. [Наименование операции] = 'Постановка на учет'AND year (Движение. [Дата операции]) =year (getdate ());Описание процедур выполняемых в программеПроцедура 1. Необходимо выбрать автомобили, возраст которых не превышает 10 лет.USE РЭО_ГАИGOCREATE PROCEDURE Vyboravto1ASSELECT *FROM АвтомобилиWHERE year ([Дата выпуска]) > year ('01 January 1997')GOexecute Vyboravto1goПроцедура 2. Необходимо выбрать автомобили определенной марки и с определенным типом кузова.USE РЭО_ГАИGOCREATE PROCEDURE Vyboravto2 @marka_id int, @kuzov_id intASSELECT *FROM АвтомобилиWHERE [Код марки авто] = @marka_idand [Код типа кузова] = @kuzov_idGOUSE РЭО_ГАИGOEXECUTE Vyboravto2 2, 2GOЗаключениеВ первом разделе данного курсового проекта была описана постановка задачи с нововведениями и дополнениями со стороны разработчика.Во втором и третьем разделах была описана структура разработанной базы данных и структура хранимой в ней информации. Также были подробно описаны связи между таблицами.В четвертом разделе была описана структура программы, её классы и модули.В пятом разделе было представлено подробное руководство по использованию программы.Приложениеunit Unit1;interfaceusesWindows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,Dialogs, Menus, DB, ADODB, ExtCtrls, DBCtrls, Grids, DBGrids, ComCtrls;typeTForm1 = class (TForm)MainMenu1: TMainMenu;N1: TMenuItem;N2: TMenuItem;N3: TMenuItem;N4: TMenuItem;N5: TMenuItem;N6: TMenuItem;N7: TMenuItem;N8: TMenuItem;N9: TMenuItem;N10: TMenuItem;N11: TMenuItem;N12: TMenuItem;N13: TMenuItem;N14: TMenuItem;N15: TMenuItem;N16: TMenuItem;ADOTable1: TADOTable;DataSource1: TDataSource;DBGrid1: TDBGrid;DBNavigator1: TDBNavigator;StatusBar1: TStatusBar;N17: TMenuItem;procedure N15Click (Sender: TObject);procedure N3Click (Sender: TObject);procedure N4Click (Sender: TObject);procedure N5Click (Sender: TObject);procedure N16Click (Sender: TObject);procedure N6Click (Sender: TObject);procedure N7Click (Sender: TObject);procedure N8Click (Sender: TObject);procedure N9Click (Sender: TObject);procedure N10Click (Sender: TObject);procedure N11Click (Sender: TObject);procedure N12Click (Sender: TObject);procedure N13Click (Sender: TObject);procedure N14Click (Sender: TObject);private{ Private declarations }public{ Public declarations }end;varForm1: TForm1;implementationuses Unit2, Unit3, Unit4, Unit5;{$R *. dfm}procedure TForm1. N15Click (Sender: TObject);beginSpravka. Show; // close;end;procedure TForm1. N3Click (Sender: TObject);beginZaprosy. Show;end;procedure TForm1. N4Click (Sender: TObject);beginOtchety. Show;end;procedure TForm1. N5Click (Sender: TObject);beginProcedury. Show;end;procedure TForm1. N16Click (Sender: TObject);beginclose;end;procedure TForm1. N6Click (Sender: TObject);beginADOTable1. Active: =false;ADOTable1. TableName: ='Районы_учета';ADOTable1. Active: =true;StatusBar1. SimpleText: =n6. Caption;end;procedure TForm1. N7Click (Sender: TObject);beginADOTable1. Active: =false;ADOTable1. TableName: ='Операции';ADOTable1. Active: =true;StatusBar1. SimpleText: =n7. Caption;end;procedure TForm1. N8Click (Sender: TObject);beginADOTable1. Active: =false;ADOTable1. TableName: ='Марки_автомобиля';ADOTable1. Active: =true;StatusBar1. SimpleText: =n8. Caption;end;procedure TForm1. N9Click (Sender: TObject);beginADOTable1. Active: =false;ADOTable1. TableName: ='Типы_кузова';ADOTable1. Active: =true;StatusBar1. SimpleText: =n9. Caption;end;procedure TForm1. N10Click (Sender: TObject);beginADOTable1. Active: =false;ADOTable1. TableName: ='Категории_цвета';ADOTable1. Active: =true;StatusBar1. SimpleText: =n10. Caption;end;procedure TForm1. N11Click (Sender: TObject);beginADOTable1. Active: =false;ADOTable1. TableName: ='Цвета';ADOTable1. Active: =true;StatusBar1. SimpleText: =n11. Caption;end;procedure TForm1. N12Click (Sender: TObject);beginADOTable1. Active: =false;ADOTable1. TableName: ='Автомобили';ADOTable1. Active: =true;StatusBar1. SimpleText: =n12. Caption;end;procedure TForm1. N13Click (Sender: TObject);beginADOTable1. Active: =false;ADOTable1. TableName: ='Движение';ADOTable1. Active: =true;StatusBar1. SimpleText: =n13. Caption;end;procedure TForm1. N14Click (Sender: TObject);beginADOTable1. Active: =false;ADOTable1. TableName: ='Владельцы';ADOTable1. Active: =true;StatusBar1. SimpleText: =n14. Caption;end;end.unit Unit2;interfaceusesWindows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,Dialogs, StdCtrls, Grids, DBGrids, DB, ADODB, Mask, Buttons;typeTZaprosy = class (TForm)ADODataSet1: TADODataSet;DataSource1: TDataSource;DBGrid1: TDBGrid;Label1: TLabel;Label2: TLabel;Label3: TLabel;Label4: TLabel;Label5: TLabel;MaskEdit1: TMaskEdit;ComboBox1: TComboBox;Label6: TLabel;SpeedButton1: TSpeedButton;SpeedButton2: TSpeedButton;SpeedButton3: TSpeedButton;SpeedButton4: TSpeedButton;SpeedButton5: TSpeedButton;Label7: TLabel;Label8: TLabel;Label9: TLabel;Label10: TLabel;Label11: TLabel;procedure SpeedButton1Click (Sender: TObject);procedure SpeedButton2Click (Sender: TObject);procedure SpeedButton3Click (Sender: TObject);procedure SpeedButton4Click (Sender: TObject);procedure SpeedButton5Click (Sender: TObject);private{ Private declarations }public{ Public declarations }end;varZaprosy: TZaprosy;implementation{$R *. dfm}procedure TZaprosy. SpeedButton1Click (Sender: TObject);beginadodataset1. Active: =false;adodataset1.commandText: =' SELECT Автомобили. [РНН владельца], COUNT (Автомобили. [№автомобиля]) '+' FROM Автомобили '+ // ' WHERE Владельцы. [РНН владельца] = Автомобили. [РНН владельца] ';' GROUP BY Автомобили. [РНН владельца] ' +' ORDER BY Автомобили. [РНН владельца] ; ';adodataset1. Active: =true;end;procedure TZaprosy. SpeedButton2Click (Sender: TObject);beginadodataset1. Active: =false;adodataset1.commandText: =' SELECT [№автомобиля], [№двигателя] '+' FROM Автомобили '+' WHERE [№двигателя] LIKE '+''''+'%'+MaskEdit1. Text+'%'+'''';adodataset1. Active: =true;end;procedure TZaprosy. SpeedButton3Click (Sender: TObject);beginadodataset1. Active: =false;adodataset1.commandText: =' SELECT Движение. [№автомобиля], datediff (yy, Автомобили. [Дата выпуска],getdate ()) '+' FROM Движение, Автомобили, Операции '+' WHERE Автомобили. [№автомобиля] =Движение. [№автомобиля] '+' and Операции. [Код операции] =Движение. [Код операции] '+' and Операции. [Наименование операции] like ''%постан%'''+' and [Дата операции] < getdate (); ';adodataset1. Active: =true;end;procedure TZaprosy. SpeedButton4Click (Sender: TObject);beginadodataset1. Active: =false;adodataset1.commandText: =' SELECT Движение. [№автомобиля], Районы_учета. [Наименование района учета], Операции. [Наименование операции] '+' FROM Операции, Районы_учета, Движение '+' WHERE Районы_учета. [Код района учета] =Движение. [Код района учета] '+' AND Операции. [Код операции] =Движение. [Код операции] '+' AND Районы_учета. [Наименование района учета] like '+''''+'%'+combobox1. Text+'%'+'''' +' AND month ([Дата операции]) =month (getdate ()); ';adodataset1. Active: =true;end;procedure TZaprosy. SpeedButton5Click (Sender: TObject);beginadodataset1. Active: =false;adodataset1.commandText: =' SELECT Движение. [№автомобиля], Категории_цвета. [Наименование категории цвета] '+' FROM Категории_цвета, Цвета, Автомобили, Операции, Движение '+' WHERE Категории_цвета. [Код категории цвета] =Цвета. [Код категории цвета] '+' AND Цвета. [Код цвета] =Автомобили. [Код цвета] '+' AND Автомобили. [№автомобиля] =Движение. [№автомобиля] '+' AND Операции. [Наименование операции] = ''Постановка на учет'''+' AND year (Движение. [Дата операции]) =year (getdate ()); ';adodataset1. Active: =true;end;end.unit Unit3;interfaceusesWindows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,Dialogs, StdCtrls, Buttons, Grids, DBGrids, DB, ADODB, Mask, Menus,Word2000, OleServer;typeTOtchety = class (TForm)MainMenu1: TMainMenu;N1: TMenuItem;Label1: TLabel;Label2: TLabel;Label3: TLabel;ADODataSet2: TADODataSet;DBGrid1: TDBGrid;DataSource1: TDataSource;Label4: TLabel;ComboBox1: TComboBox;SpeedButton1: TSpeedButton;SpeedButton2: TSpeedButton;SpeedButton3: TSpeedButton;Label5: TLabel;Label6: TLabel;ComboBox2: TComboBox;Label7: TLabel;N2: TMenuItem;WordDocument1: TWordDocument;WordApplication1: TWordApplication;SaveDialog1: TSaveDialog;procedure N1Click (Sender: TObject);procedure SpeedButton1Click (Sender: TObject);procedure SpeedButton2Click (Sender: TObject);procedure SpeedButton3Click (Sender: TObject);procedure N2Click (Sender: TObject);private{ Private declarations }public{ Public declarations }end;varOtchety: TOtchety;otchetnum: integer;implementationuses Unit6;{$R *. dfm}procedure TOtchety. N1Click (Sender: TObject);varc,n: integer;s,rs: string;beginform6. Show; // leep (10);for n: =0 to adodataset2. RecordCount-1 dobeginrs: ='';s: ='';if n=0 thenbeginfor c: =0 to DBGrid1. Columns. Count-1 dobegins: =DBGrid1. Columns [c]. FieldName+ '';rs: =rs+s;end;form6. Memo1. Lines. Add (rs);rs: ='';s: ='';end;for c: =0 to DBGrid1. Columns. Count-1 dobegins: =DBGrid1. Columns [c]. Field. AsString+'';rs: =rs+s;end;form6. memo1. Lines. Add (rs);adodataset2. Next;end;beginif form6. savedialog1. Execute thenform6. memo1. Lines. SaveToFile (form6. savedialog1. FileName);end;end;procedure TOtchety. SpeedButton1Click (Sender: TObject);beginadodataset2. Active: =false;adodataset2.commandText: =' SELECT Движение. [№автомобиля], Движение. [РНН владельца],'+'Операции. [Наименование операции], Районы_учета. [Наименование района учета],'+'Движение. [Дата операции] '+' FROM Движение, Операции,Районы_учета '+' WHERE Движение. [№автомобиля] like '+''''+'%'+combobox1. Text+'%'+'''' +' AND Районы_учета. [Код района учета] = Движение. [Код района учета] '+' AND Операции. [Код операции] = Движение. [Код операции] ; ';adodataset2. Active: =true;end;procedure TOtchety. SpeedButton2Click (Sender: TObject);beginadodataset2. Active: =false;adodataset2.commandText: =' SELECT [№автомобиля], Автомобили. [РНН владельца], Владельцы. [ФИО/наименование] '+' FROM Автомобили, Владельцы '+' WHERE Владельцы. [Рнн владельца] = Автомобили. [РНН владельца] '+' AND [Признак владельца] = ''ф'' '+' order by Владельцы. [ФИО/наименование] ';adodataset2. Active: =true;end;procedure TOtchety. SpeedButton3Click (Sender: TObject);begin // QuotedStr (Maskedit2. Text);adodataset2. Active: =false;adodataset2.commandText: =' SELECT Движение. [Дата операции], Движение. [№автомобиля], Движение. [РНН владельца],'+'Районы_учета. [Наименование района учета], Операции. [Наименование операции] '+' FROM Движение, Районы_учета, Операции '+' WHERE Районы_учета. [Код района учета] = Движение. [Код района учета] '+' AND Операции. [Код операции] = Движение. [Код операции] '+' and Движение. [Дата операции] ='''+ComboBox2. Text +''''; // ' AND year (Движение. [Дата операции]) =year (''13 October 2007'') '+ // ' and month (Движение. [Дата операции]) =month (''13 October 2007'') '+ // ' and day (Движение. [Дата операции]) =day (''13 October 2007''); '; // ' and SHTRAFI. Oplacheno = ''Оплачено '' AND dbo. SHTRAFI. Data BETWEEN '''+ MaskEdit3. Text +''' AND '''+ MaskEdit4. Text +''' '+ // ' AND Aaeea? aoee. "aaoa iiaa? e"='''+ComboBox2. Text +''''+adodataset2. Active: =true;end;procedure TOtchety. N2Click (Sender: TObject);var filename,ran1: Olevariant;rowcount,colcount, i,j: integer;temp: string;beginsavedialog1. FileName: ='otchet'+inttostr (otchetnum) +'. doc'; // имя файлаotchetnum: =otchetnum+1; // формирование след отчетаwordapplication1. Connect; // соединениеfilename: =savedialog1. FileName;wordapplication1. Documents. Add (emptyparam,emptyparam,emptyparam,emptyparam); // создание нового файлаworddocument1. connectto (wordapplication1. activedocument); // обратится к новому файлу // ran1: =worddocument1. Range;rowcount: =adodataset2. RecordCount; // сколько строк нужно создать в файлеcolcount: =dbgrid1. Columns. Count; // сколько столбцов нужно создать в файлеworddocument1. Tables. Add (worddocument1. Range,rowcount,colcount,emptyparam,emptyparam); // соз-е строк и столбцовfor i: =1 to rowcount dobeginfor j: =1 to colcount dobegintemp: =dbgrid1. Fields [j-1]. AsString; // содержание ячейки в таблицеworddocument1. Tables. Item (1). cell (i,j). range. text: =temp; // занести в docend;adodataset2. Next; // следующая строкаend;WordApplication1. Visible: = True; // сделать документ видимымworddocument1. SaveAs (filename); // сохранить документend;end.procedure TForm3. BitBtn1Click (Sender: TObject);beginQuotedStr (maskedit1. Text);QuotedStr (maskedit2. Text);adodataset2. Active: =false;adodataset2.commandText: =' SELECT dbo. UDOSTOVERENIYA. N_udostovereniya, dbo. UDOSTOVERENIYA. Data_vipiski, dbo. UDOSTOVERENIYA. Srok_deistviya, dbo. INSPEKTOR. FIO '+' FROM dbo. UDOSTOVERENIYA INNER JOIN '+' dbo. INSPEKTOR ON dbo. UDOSTOVERENIYA. Kod_inspectora = dbo. INSPEKTOR. Kod_inspektora '+' WHERE (dbo. INSPEKTOR. FIO LIKE '+'''%'+Edit3. Text+'%'+''' AND dbo. UDOSTOVERENIYA. Data_vipiski BETWEEN '''+ MaskEdit1. Text + ''' AND '''+ MaskEdit2. Text +''') ';adodataset2. Active: =true;end.unit Unit4;interfaceusesWindows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,Dialogs, StdCtrls, Grids, DBGrids, DB, ADODB, Buttons;typeTProcedury = class (TForm)ADODataSet1: TADODataSet;DataSource1: TDataSource;DBGrid1: TDBGrid;Label1: TLabel;Label2: TLabel;Label5: TLabel;Label6: TLabel;Label7: TLabel;ComboBox1: TComboBox;Label8: TLabel;ComboBox2: TComboBox;ComboBox3: TComboBox;ComboBox4: TComboBox;SpeedButton1: TSpeedButton;SpeedButton2: TSpeedButton;Label10: TLabel;Label11: TLabel;procedure ComboBox1KeyPress (Sender: TObject; var Key: Char);procedure ComboBox3KeyPress (Sender: TObject; var Key: Char);procedure ComboBox2KeyPress (Sender: TObject; var Key: Char);procedure ComboBox3Change (Sender: TObject);procedure ComboBox4Change (Sender: TObject);procedure SpeedButton1Click (Sender: TObject);procedure SpeedButton2Click (Sender: TObject);private{ Private declarations }public{ Public declarations }end;varProcedury: TProcedury;implementation{$R *. dfm}procedure TProcedury.comboBox1KeyPress (Sender: TObject; var Key: Char);beginif not (key in ['0'. '9',#8]) then key: =#0;end;procedure TProcedury.comboBox3KeyPress (Sender: TObject; var Key: Char);beginif not (key in ['0'. '9',#8]) then key: =#0;end;procedure TProcedury.comboBox2KeyPress (Sender: TObject; var Key: Char);beginif not (key in ['0'. '9',#8]) then key: =#0;end;procedure TProcedury.comboBox3Change (Sender: TObject);vari: integer;beginfor i: =0 to ComboBox3. Items. Count doif ComboBox3. ItemIndex=i then ComboBox1. ItemIndex: =i;end;procedure TProcedury.comboBox4Change (Sender: TObject);vari: integer;beginfor i: =0 to ComboBox4. Items. Count doif ComboBox4. ItemIndex=i then ComboBox2. ItemIndex: =i;end;procedure TProcedury. SpeedButton1Click (Sender: TObject);beginadodataset1. Active: =false;adodataset1.commandText: ='execute Vyboravto1';adodataset1. Active: =true;end;procedure TProcedury. SpeedButton2Click (Sender: TObject);beginadodataset1. Active: =false;adodataset1.commandText: ='execute Vyboravto2 '''+ combobox1. Text + ''',''' + combobox2. Text +''' ';adodataset1. Active: =true;end;end.unit Unit5;interfaceusesWindows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,Dialogs, DB, ADODB, Grids, DBGrids, StdCtrls, Buttons;typeTSpravka = class (TForm)DataSource1: TDataSource;DBGrid1: TDBGrid;ADODataSet1: TADODataSet;Label5: TLabel;Label8: TLabel;Label3: TLabel;ComboBox4: TComboBox;Label11: TLabel;Label12: TLabel;ComboBox5: TComboBox;Label14: TLabel;Label15: TLabel;ComboBox6: TComboBox;BitBtn1: TBitBtn;procedure BitBtn1Click (Sender: TObject);{ Private declarations }public{ Public declarations }end;varSpravka: TSpravka;sum1, sum2, sum3: boolean;implementation{$R *. dfm}procedure TSpravka. BitBtn1Click (Sender: TObject);beginsum1: =false;sum2: =false;sum3: =false;if ComboBox4. Text<>'' then sum1: =true;if ComboBox5. Text<>'' then sum2: =true;if ComboBox6. Text<>'' then sum3: =true;if (sum1) and (sum2) and (sum3) thenbeginadodataset1. Active: =false;adodataset1.commandText: ='SELECTАвтомобили. * ' +' FROMАвтомобили, Марки_автомобиля, Цвета, Типы_кузова' +' WHERE Автомобили. [Код типа кузова] =Типы_кузова. [Код типа кузова] ' +' AND Автомобили. [Код марки авто] =Марки_автомобиля. [Код марки авто] ' +' AND Автомобили. [Код цвета] =Цвета. [Код цвета] '+' AND Типы_кузова. [Наименование] ='''+ComboBox4. Text +''''+' AND Марки_автомобиля. [Наименование] ='''+ComboBox5. Text +''''+' AND Цвета. [Наименование] ='''+ComboBox6. Text +'''';adodataset1. Active: =true;end;if (not sum1) and (not sum2) and (not sum3) thenbeginadodataset1. Active: =false;adodataset1.commandText: ='SELECT* '+' FROMАвтомобили';adodataset1. Active: =true;end;if (not sum1) and (not sum2) and (sum3) thenbeginadodataset1. Active: =false;adodataset1.commandText: ='SELECTАвтомобили. * ' +' FROMАвтомобили, Цвета' +' WHERE Автомобили. [Код цвета] =Цвета. [Код цвета] '+' AND Цвета. [Наименование] ='''+ComboBox6. Text +'''';adodataset1. Active: =true;end;if (not sum1) and (sum2) and (not sum3) thenbeginadodataset1. Active: =false;adodataset1.commandText: ='SELECTАвтомобили. * ' +' FROMАвтомобили, Марки_автомобиля' +' WHERE Автомобили. [Код марки авто] =Марки_автомобиля. [Код марки авто] ' +' AND Марки_автомобиля. [Наименование] ='''+ComboBox5. Text +'''';adodataset1. Active: =true;end;if (sum1) and (not sum2) and (not sum3) thenbeginadodataset1. Active: =false;adodataset1.commandText: ='SELECTАвтомобили. * ' +' FROMАвтомобили, Типы_кузова' +' WHERE Автомобили. [Код типа кузова] =Типы_кузова. [Код типа кузова] ' +' AND Типы_кузова. [Наименование] ='''+ComboBox4. Text +'''';adodataset1. Active: =true;end;if (not sum1) and (sum2) and (sum3) thenbeginadodataset1. Active: =false;adodataset1.commandText: ='SELECTАвтомобили. * ' +' FROMАвтомобили, Марки_автомобиля, Цвета' +' WHERE Автомобили. [Код марки авто] =Марки_автомобиля. [Код марки авто] ' +' AND Автомобили. [Код цвета] =Цвета. [Код цвета] '+' AND Марки_автомобиля. [Наименование] ='''+ComboBox5. Text +''''+' AND Цвета. [Наименование] ='''+ComboBox6. Text +'''';adodataset1. Active: =true;end;if (sum1) and (not sum2) and (sum3) thenbeginadodataset1. Active: =false;adodataset1.commandText: ='SELECTАвтомобили. * ' +' FROMАвтомобили, Марки_автомобиля, Цвета, Типы_кузова' +' WHERE Автомобили. [Код типа кузова] =Типы_кузова. [Код типа кузова] ' +' AND Автомобили. [Код цвета] =Цвета. [Код цвета] '+' AND Типы_кузова. [Наименование] ='''+ComboBox4. Text +''''+' AND Цвета. [Наименование] ='''+ComboBox6. Text +'''';adodataset1. Active: =true;end;if (sum1) and (sum2) and (not sum3) thenbeginadodataset1. Active: =false;adodataset1.commandText: ='SELECTАвтомобили. * ' +' FROMАвтомобили, Марки_автомобиля, Типы_кузова' +' WHERE Автомобили. [Код типа кузова] =Типы_кузова. [Код типа кузова] ' +' AND Автомобили. [Код марки авто] =Марки_автомобиля. [Код марки авто] ' +' AND Типы_кузова. [Наименование] ='''+ComboBox4. Text +''''+' AND Марки_автомобиля. [Наименование] ='''+ComboBox5. Text +'''';adodataset1. Active: =true;end;end;end.unit Unit6;interfaceusesWindows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,Dialogs, StdCtrls;typeTForm6 = class (TForm)Memo1: TMemo;SaveDialog1: TSaveDialog;Button1: TButton;procedure Button1Click (Sender: TObject);private{ Private declarations }public{ Public declarations }end;varForm6: TForm6;implementation{$R *. dfm}procedure TForm6. Button1Click (Sender: TObject);beginmemo1. Lines. Text: ='';form6. Hide;end; end.
|
|