ФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮ
АНГАРСКАЯ ГОСУДАРСТВЕННАЯ ТЕХНИЧЕСКАЯ АКАДАМИЯ
ФАКУЛЬТЕТ ТЕХНИЧЕСКОЙ КИБЕРНЕТИКИ
КАФЕДРА “ВЫЧИСЛИТЕЛЬНЫЕ МАШИНЫ И КОМПЛЕКСЫ ”
КУРСОВОЙ ПРОЕКТ
по дисциплине «Проектирование клиент/серверных систем»
Тема:
Информационная система «Data-центр»
Выполнил: Зиннер Е.С.
Проверила: Засухина О. А.
Ангарск 2009 г.
Содержание
Введение
1. Техническое задание
1.1 Обоснование необходимости разработки приложения
1.1.1 Постановка задачи
1.1.1.1 Входные данные
1.1.1.2 Выходные данные
1.2 Научно исследовательские работы
1.2.1 Выбор СУБД
1.2.2 Выбор визуальной среды программирования
1.2.3 Механизм доступа данных к ADO
1.2.4 Выбор технических средств
2. Технический проект
2.1 Разработка структурированного приложения
2.2 Определение структуры входных и выходных данных
2.2.1 Структура таблиц
2.2.2 Схема данных
2.3 Определение формы представления входных и выходных данных
2.3.1 Формы
3. Рабочий проект
3.1 Текст программы
3.1.1 Сценарий в Microsoft SQL Server
3.1.2 Клиентское приложение
3.2 Руководство пользователя
Заключение
Литература
Введение
Целью курсовой работы является разработка информационной системы «Библиотека Дорам» в архитектуре клиент/сервер. БД «Библиотека Дорам» разрабатывается в серверной системе управления БД Microsoft SQL Server. Клиентское приложение разрабатывается в Code Gear RAD Studio механизм доступа ADO.
Microsoft SQL Server
— система управления реляционными базами данных (СУБД), разработанная корпорацией Microsoft. Основной используемый язык запросов — Transact-SQL, создан совместно Microsoft и Sybase. Transact-SQL является реализацией стандарта ANSI/ISO по структурированному языку запросов (SQL) с расширениями. Используется для от небольших и средних по размеру баз данных до крупных баз данных масштаба предприятия, конкурирует с другими СУБД в этом сегменте рынка.
Последняя версия SQL Server — SQL Server 2008 (кодовое название «Katmai»). Была выпущена 6 августа 2008 года.
SQL Server 2008 направлен на то, чтобы сделать управление данными самонастраивающимся, самоорганизующимся и самообслуживающимся механизмом — для реализации этих возможностей были созданы технологии SQL Server Always On. Это позволит уменьшить до нуля время нахождения сервера в нерабочем состоянии.
В SQL Server 2008 была добавлена поддержка структурированных и частичноструктурированных данных, включая цифровые форматы для изображений, звуков, видео и других типов мультимедиа. Поддержка мультимедиа форматов внутри СУБД позволила специализированным функциям взаимодействовать с этими типами данных.
Кроме этого, были включены специализированные форматы даты и времени и пространственный (англ. Spatial) тип для пространственно зависимых данных. Для неструктурированных данных были добавлены специализированные типы, например, тип File.
Для повышения эффективности администрирования в SQL Server были включены библиотеки Declarative Management Framework, позволяющие распределять полномочия для баз данных или отдельных таблиц. Были улучшены методы компрессии данных. SQL Server Katmai поддерживает набор библиотек ADO.NET Entity Framework и средства оповещения, репликации и определения данных.
CodeGear RAD Studio 2007
- среда быстрой разработки приложений (RAD) для Microsoft Windows. CodeGear RAD Studio, ранее известный как проект Highlander, объединяет Delphi для Win32, C++Builder и новый Delphi.NET 2.0 в единую интегрированную среду. Это единственная интегрированная среда разработки (IDE), которая поддерживает быструю разработку как Windows, так и.NET-приложений для Microsoft Windows 2000, XP, и Vista. Подобная универсальность позволяет разработчикам строить Web, клиент/серверные и десктоп Windows-приложения для всех трех ОС и использовать такие приложения на любой из этих платформ.
CodeGear RAD Studio дает разработчикам гибкость в выборе операционной системы, которая наиболее полно удовлетворяет их требованиям при создании приложения для нескольких ОС Windows, включая программы для Windows Vista и Web-приложения.
Новые функции и возможности CodeGear RAD Studio 2007:
Расширенная поддержка Delphi для пользовательского интерфейса Microsoft Vista Aero, включая прикладные приложения, библиотеки визуальных компонентов (VCL) и поддержку VCL.NET для 3D эффектов и анимации пользовательского интерфейса, эффекта прозрачности, компонентов диалоговых окон для работы с файлами и задачами.
Поддержка языка Delphi для разработки в среде Microsoft.NET 2.0 (совместимо с.NET 3.0) и ASP.NET 2.0. ASP.NET представляет собой набор технологий в рамках.NET framework для создания Web-приложений и XML Web-сервисов.
Delphi для.NET имеет поддержку параметризованных типов, позволяющую разработчикам.NET применять Delphi для создания и использования классов, используя любой тип структуры данных в качестве параметров.
Blackfish SQL - сервер баз данных, полностью написанный на платформе.NET, который поддерживает SQL и обеспечивает легкое развертывание XCopy, поддержку транзакций, а также создание триггеров и хранимых процедур на языке.NET (Delphi.NET, C#, и Visual Basic.NET).
Enterprise Core Objects (ECO) IV - мощная среда для разработки на основе моделей (Model-Driven Development) для.NET 2.0. ECO позволяет разработчикам использовать визуальные диаграммы для построения объектов, а также связей и логики взаимодействия между ними, а затем автоматически создает и поддерживает инфраструктуру базы данных (с использованием Microsoft ADO.NET) и интерфейс взаимодействия данных, оставляя разработчику только заботу о бизнес-логике и внешнем виде приложения.
Обновленная архитектура доступа к базам данных dbExpress 4 с поддержкой ADO.NET 2.0. dbExpress 4 - это единое решение для доступа к базам данных для.NET и Windows с поддержкой ADO.NET, которое упрощает разработку и сопряжение десктоп и клиент/серверных приложений баз данных.
Как и платформа Windows, аппаратное обеспечение компьютеров и сеть постоянно эволюционируют, так и продукты CodeGear для Delphi и C++ также совершенствуются, чтобы дать разработчикам возможность извлечь из перемен пользу, создавая новые возможности для независимых поставщиков программного обеспечения (ISV) и создателей клиент/сервер приложений на основе баз данных.
1. Техническое задание
1.1 Обоснование необходимости разработки приложения
СУБД используются практически во всех сферах человеческой деятельности;
Подготовка и издание данного приложения позволит отслеживать новинки, а так же узнавать ход перевода.
1.1.1 Постановка задачи
Разработать БД «Библиотека Дорам» в серверной системе управления БД Microsoft SQL Server, клиентское приложение разрабатывается в Code Gear RAD Studio. БД должна хранить и предоставлять пользователю информацию о сериалах и переводчиках, подсчитывает количество записей в базе, возможность поиска определенной записи по режиссеру через фильтрацию, сортировку по выбранным параметрам (по стране или по году), вывод отчетов для последующей печати.
1.1.1.1 Входные данные
Технические характеристики оборудования
Цена оборудования
Клиенты
Время аренды
1.1.1.2 Выходные данные
Технические характеристики оборудования
Цена оборудования
Клиенты
Время аренды
1.2 Научно исследовательские работы
1.2.1 Выбор СУБД
Microsoft SQL Server
— система управления реляционными базами данных (СУБД), разработанная корпорацией Microsoft. Основной используемый язык запросов — Transact-SQL, создан совместно Microsoft и Sybase. Transact-SQL является реализацией стандарта ANSI/ISO по структурированному языку запросов (SQL) с расширениями. Используется для от небольших и средних по размеру баз данных до крупных баз данных масштаба предприятия, конкурирует с другими СУБД в этом сегменте рынка.
Последняя версия SQL Server — SQL Server 2008 (кодовое название «Katmai»). Была выпущена 6 августа 2008 года.
SQL Server 2008 направлен на то, чтобы сделать управление данными самонастраивающимся, самоорганизующимся и самообслуживающимся механизмом — для реализации этих возможностей были созданы технологии SQL Server Always On. Это позволит уменьшить до нуля время нахождения сервера в нерабочем состоянии.
1.2.2 Выбор визуальной среды программирования
CodeGear RAD Studio 2007
- среда быстрой разработки приложений (RAD) для Microsoft Windows. CodeGear RAD Studio, ранее известный как проект Highlander, объединяет Delphi для Win32, C++Builder и новый Delphi.NET 2.0 в единую интегрированную среду. Это единственная интегрированная среда разработки (IDE), которая поддерживает быструю разработку как Windows, так и.NET-приложений для Microsoft Windows 2000, XP, и Vista. Подобная универсальность позволяет разработчикам строить Web, клиент/серверные и десктоп Windows-приложения для всех трех ОС и использовать такие приложения на любой из этих платформ. CodeGear RAD Studio 2007 открывает новые возможности для разработчиков, которые интересуются разработкой высокопроизводительных Windows-приложений с высокими требованиями к GUI, прикладных программ, работающих с базами данных, Web-приложений для бизнеса, а также стремятся извлечь максимальную пользу из усовершенствований аппаратного обеспечения и операционной системы Windows.
1.2.3 Механизм доступа данных к ADO
ADO (от англ. ActiveX Data Objects — «объекты данных ActiveX») — интерфейс программирования приложений для доступа к данным, разработанный компанией Microsoft (MS Access, MS SQL Server) и основанный на технологии компонентов ActiveX. ADO позволяет представлять данные из разнообразных источников (реляционных баз данных, текстовых файлов и т. д.) в объектно-ориентированном виде. Компонент ADOQuery обеспечивает выполнение SQL запросов и получение требуемого набора данных. ADOConnection предназначен для хранения данных ADOTable, ADOQuery, ADOCommand. Основное свойство Connection string позволяет определить параметры Настроить вручную или при помощи редактора. ADOTable используется для доступа к хранилищам данных ADO и придоставляет информацию из них в табличном виде. Компонент связывается с данными при помощи Connection->ADOConnection, TableName-> Имя Таблицы, Active->True.
Объектная модель ADO состоит из следующих объектов высокого уровня и семейств объектов:
Connection (представляет подключение к удалённому источнику данных)
Recordset (представляет набор строк, полученный от источника данных)
Command (используется для выполнения команд и SQL-запросов с параметрами)
Record (может представлять одну запись объекта Recordset или же иерархическую структуру, состоящую из текстовых данных)
Stream (используется для чтения и записи потоковых данных, например, документов XML или двоичных объектов)
Errors (представляет ошибки)
Fields (представляет столбцы таблицы базы данных)
Parameters (представляет набор параметров SQL-инструкции)
Properties (представляет набор свойств объекта)
1.2.4. Выбор технических средств
Основанная база хранится на сервере, клиентские приложения хранятся на ПК в сети, доступ к базе осуществляется посредством локальной сети:
Рисунок 1.1 Архитектура локальной сети для клиент-серверных приложений
2. ТЕХНИЧЕСКИЙ ПРОЕКТ
2.1 Разработка структурированного приложения
Схема 2.1 Дерево модулей и форм.
2.2 Определение структуры входных и выходных данных
2.2.1 Структура таблиц
Таблица 2.1 TB_DOGOVOR
Имя поля |
Пояснение |
Тип данных |
Ключ поля |
ID_DOGOVOR |
Код договора |
Int |
Первичный |
ID_KLIENT |
Код клиента |
Int |
Внешний |
ID_MASHIN |
Код конфигурации |
Int |
Внешний |
Date_zakl |
Дата заключения |
DateTime |
|
Date_okonch |
Дата окончания |
DateTime |
|
Stoimost |
Общая стоимостьтоимость |
DateTime |
Таблица 2.2 TB_MASHIN
Имя поля |
Пояснение |
Тип данных |
Ключ поля |
ID_MASHIN |
Код конфигурации |
Int |
Первичный |
ID_PROC |
Код процессора |
Int |
Внешний |
ID_HDD |
Код конфигурации |
Int |
Внешний |
ID_MEM |
Код оперативной памяти |
Int |
Внешний |
ID_SPEED |
Код скорости подключения |
Int |
Внешний |
NAIM |
Название конфигурации |
nchar |
|
CENA |
Цена аренды в месяц |
Real |
Таблица 2.3 TB_HDD
Имя поля |
Пояснение |
Тип данных |
Ключ поля |
ID_HDD |
Код жесткого диска |
Int |
Первичный |
NAIM |
Наименование |
nchar |
|
HARACT |
Характеристики |
nchar |
Таблица 2.4 TB_KLIENTS
Имя поля |
Пояснение |
Тип данных |
Ключ поля |
ID_KLIENT |
Код клиента |
Int |
Первичный |
NAIM |
ФИО |
nchar |
|
HARACT |
Контактные данные |
nchar |
Таблица 2.5 TB_MEM
Имя поля |
Пояснение |
Тип данных |
Ключ поля |
ID_MEM |
Код памяти |
Int |
Первичный |
NAIM |
Наименование |
nchar |
|
HARACT |
Характеристики |
nchar |
Таблица 2.6 TB_PROC
Имя поля |
Пояснение |
Тип данных |
Ключ поля |
ID_PROC |
Код процессора |
Int |
Первичный |
NAIM |
Наименование |
nchar |
|
HARACT |
Характеристики |
nchar |
Таблица 2.4 TB_SPEED
Имя поля |
Пояснение |
Тип данных |
Ключ поля |
ID_SPEED |
Код скорости |
Int |
Первичный |
NAIM |
Наименование |
nchar |
|
HARACT |
Характеристики |
nchar |
2.2.2 Схема данных
Схема 2.2 Структура таблиц
2.3 Определение формы представления входных и выходных данных
2.3.1 Формы
Рисунок 2.2 Главная форма
Рисунок 2.3 Форма запросов, таблиц и представлений.
Рисунок 2.4 Форма справочников
Рисунок 2.5 Форма добавления элементов в таблицы.
Рисунок 2.5 Data Module
3. РАБОЧИЙ ПРОЕКТ
3.1 Текст программы
3.1.1 Сценарий в Microsoft SQL Server
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[TB_SPEED]') AND type in (N'U'))
BEGIN
CREATE TABLE [dbo].[TB_SPEED](
[ID_SPEED] [int] IDENTITY(1,1) NOT NULL,
[NAIM] [nchar](10) NULL,
[HARACT] [nchar](10) NULL,
CONSTRAINT [PK_TB_SPEED] PRIMARY KEY CLUSTERED
(
[ID_SPEED] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
END
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[TB_KLIENTS]') AND type in (N'U'))
BEGIN
CREATE TABLE [dbo].[TB_KLIENTS](
[ID_KLIENT] [int] IDENTITY(1,1) NOT NULL,
[NAIM] [nchar](25) NULL,
[HARACT] [nchar](50) NULL,
CONSTRAINT [PK_TB_KLIENTS] PRIMARY KEY CLUSTERED
(
[ID_KLIENT] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
END
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[TB_PROC]') AND type in (N'U'))
BEGIN
CREATE TABLE [dbo].[TB_PROC](
[ID_PROC] [int] IDENTITY(1,1) NOT NULL,
[NAIM] [nchar](10) NULL,
[HARACT] [nchar](10) NULL,
CONSTRAINT [PK_TB_PROC] PRIMARY KEY CLUSTERED
(
[ID_PROC] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
END
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[TB_MEM]') AND type in (N'U'))
BEGIN
CREATE TABLE [dbo].[TB_MEM](
[ID_MEM] [int] IDENTITY(1,1) NOT NULL,
[NAIM] [nchar](10) NULL,
[HARACT] [nchar](10) NULL,
CONSTRAINT [PK_TB_MEM] PRIMARY KEY CLUSTERED
(
[ID_MEM] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
END
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[TB_HDD]') AND type in (N'U'))
BEGIN
CREATE TABLE [dbo].[TB_HDD](
[ID_HDD] [int] IDENTITY(1,1) NOT NULL,
[NAIM] [nchar](10) NULL,
[HARACT] [nchar](10) NULL,
CONSTRAINT [PK_TB_HDD] PRIMARY KEY CLUSTERED
(
[ID_HDD] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
END
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[TB_MASHIN]') AND type in (N'U'))
BEGIN
CREATE TABLE [dbo].[TB_MASHIN](
[ID_MASHIN] [int] IDENTITY(1,1) NOT NULL,
[ID_PROC] [int] NULL,
[ID_HDD] [int] NULL,
[ID_MEM] [int] NULL,
[ID_SPEED] [int] NULL,
[NAIM] [nchar](10) NULL,
[CENA] [real] NULL,
CONSTRAINT [PK_TB_MASHIN] PRIMARY KEY CLUSTERED
(
[ID_MASHIN] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
END
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[TB_DOGOVOR]') AND type in (N'U'))
BEGIN
CREATE TABLE [dbo].[TB_DOGOVOR](
[ID_DOGOVOR] [int] IDENTITY(1,1) NOT NULL,
[ID_KLIENT] [int] NULL,
[ID_MASHIN] [int] NULL,
[Date_zakl] [datetime] NULL,
[Date_okonch] [datetime] NULL,
[Stoimost] [real] NULL,
CONSTRAINT [PK_TB_DOGOVOR] PRIMARY KEY CLUSTERED
(
[ID_DOGOVOR] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
END
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
IF NOT EXISTS (SELECT * FROM sys.views WHERE object_id = OBJECT_ID(N'[dbo].[PR_MASHIN]'))
EXEC dbo.sp_executesql @statement = N'CREATE VIEW [dbo].[PR_MASHIN]
AS
SELECT dbo.TB_MASHIN.NAIM AS NAIM_MASH, dbo.TB_MEM.NAIM AS NAIM_MEM, dbo.TB_SPEED.NAIM AS NAIM_SPEED, dbo.TB_PROC.NAIM AS NAIM_PROC,
dbo.TB_HDD.NAIM AS NAIM_HDD, dbo.TB_MASHIN.CENA
FROM dbo.TB_MASHIN INNER JOIN
dbo.TB_MEM ON dbo.TB_MASHIN.ID_MEM = dbo.TB_MEM.ID_MEM INNER JOIN
dbo.TB_PROC ON dbo.TB_MASHIN.ID_PROC = dbo.TB_PROC.ID_PROC INNER JOIN
dbo.TB_SPEED ON dbo.TB_MASHIN.ID_SPEED = dbo.TB_SPEED.ID_SPEED INNER JOIN
dbo.TB_HDD ON dbo.TB_MASHIN.ID_HDD = dbo.TB_HDD.ID_HDD
'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_DiagramPane1', @value=N'[0E232FF0-B466-11cf-A24F-00AA00A3EFFF, 1.00]
Begin DesignProperties =
Begin PaneConfigurations =
Begin PaneConfiguration = 0
NumPanes = 4
Configuration = "(H (1[40] 4[20] 2[20] 3))"
End
Begin PaneConfiguration = 1
NumPanes = 3
Configuration = "(H (1 [50] 4 [25] 3))"
End
Begin PaneConfiguration = 2
NumPanes = 3
Configuration = "(H (1 [50] 2 [25] 3))"
End
Begin PaneConfiguration = 3
NumPanes = 3
Configuration = "(H (4 [30] 2 [40] 3))"
End
Begin PaneConfiguration = 4
NumPanes = 2
Configuration = "(H (1 [56] 3))"
End
Begin PaneConfiguration = 5
NumPanes = 2
Configuration = "(H (2 [66] 3))"
End
Begin PaneConfiguration = 6
NumPanes = 2
Configuration = "(H (4 [50] 3))"
End
Begin PaneConfiguration = 7
NumPanes = 1
Configuration = "(V (3))"
End
Begin PaneConfiguration = 8
NumPanes = 3
Configuration = "(H (1[56] 4[18] 2))"
End
Begin PaneConfiguration = 9
NumPanes = 2
Configuration = "(H (1 [75] 4))"
End
Begin PaneConfiguration = 10
NumPanes = 2
Configuration = "(H (1[66] 2))"
End
Begin PaneConfiguration = 11
NumPanes = 2
Configuration = "(H (4 [60] 2))"
End
Begin PaneConfiguration = 12
NumPanes = 1
Configuration = "(H (1))"
End
Begin PaneConfiguration = 13
NumPanes = 1
Configuration = "(V (4))"
End
Begin PaneConfiguration = 14
NumPanes = 1
Configuration = "(V (2))"
End
ActivePaneConfig = 0
End
Begin DiagramPane =
Begin Origin =
Top = 0
Left = 0
End
Begin Tables =
Begin Table = "TB_MEM"
Begin Extent =
Top = 6
Left = 245
Bottom = 108
Right = 414
End
DisplayFlags = 280
TopColumn = 0
End
Begin Table = "TB_PROC"
Begin Extent =
Top = 6
Left = 452
Bottom = 108
Right = 621
End
DisplayFlags = 280
TopColumn = 0
End
Begin Table = "TB_SPEED"
Begin Extent =
Top = 108
Left = 245
Bottom = 210
Right = 414
End
DisplayFlags = 280
TopColumn = 0
End
Begin Table = "TB_HDD"
Begin
Top = 108
Left = 452
Bottom = 210
Right = 621
End
DisplayFlags = 280
TopColumn = 0
End
Begin Table = "TB_MASHIN"
Begin Extent =
Top = 6
Left = 38
Bottom = 123
Right = 207
End
DisplayFlags = 280
TopColumn = 3
End
End
End
Begin SQLPane =
End
Begin DataPane =
Begin ParameterDefaults = ""
End
End
Begin CriteriaPane =
Begin ColumnWidths = 11
Column = 1440
Alias = 900
Table = 1170
Output = 720
Append = 1400
NewValue = 1170
SortType = 1350
SortOrder = 1410
GroupBy = 1350
Filter = 1350
Or = 1350
Or = 1350
Or = 135',@level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'VIEW', @level1name=N'PR_MASHIN'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_DiagramPane2', @value=N'0
End
End
End
',@level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'VIEW', @level1name=N'PR_MASHIN'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_DiagramPaneCount', @value=2,@level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'VIEW', @level1name=N'PR_MASHIN'
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
IF NOT EXISTS (SELECT * FROM sys.views WHERE object_id = OBJECT_ID(N'[dbo].[PR_DOGOVOR]'))
EXEC dbo.sp_executesql @statement = N'CREATE VIEW [dbo].[PR_DOGOVOR]
AS
SELECT dbo.TB_KLIENTS.NAIM AS NAIM_KLIENT, dbo.TB_MASHIN.NAIM AS NAIM_MASH, dbo.TB_MASHIN.CENA, dbo.TB_DOGOVOR.Date_zakl,
dbo.TB_DOGOVOR.Date_okonch, dbo.TB_DOGOVOR.Stoimost
FROM dbo.TB_DOGOVOR INNER JOIN
dbo.TB_KLIENTS ON dbo.TB_DOGOVOR.ID_KLIENT = dbo.TB_KLIENTS.ID_KLIENT INNER JOIN
dbo.TB_MASHIN ON dbo.TB_DOGOVOR.ID_MASHIN = dbo.TB_MASHIN.ID_MASHIN
'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_DiagramPane1', @value=N'[0E232FF0-B466-11cf-A24F-00AA00A3EFFF, 1.00]
Begin DesignProperties =
Begin PaneConfigurations =
Begin PaneConfiguration = 0
NumPanes = 4
Configuration = "(H (1[40] 4[20] 2[20] 3))"
End
Begin PaneConfiguration = 1
NumPanes = 3
Configuration = "(H (1 [50] 4 [25] 3))"
End
Begin PaneConfiguration = 2
NumPanes = 3
Configuration = "(H (1 [50] 2 [25] 3))"
End
Begin PaneConfiguration = 3
NumPanes = 3
Configuration = "(H (4 [30] 2 [40] 3))"
End
Begin PaneConfiguration = 4
NumPanes = 2
Configuration = "(H (1 [56] 3))"
End
Begin PaneConfiguration = 5
NumPanes = 2
Configuration = "(H (2 [66] 3))"
End
Begin PaneConfiguration = 6
NumPanes = 2
Configuration = "(H (4 [50] 3))"
End
Begin PaneConfiguration = 7
NumPanes = 1
Configuration = "(V (3))"
End
Begin PaneConfiguration = 8
NumPanes = 3
Configuration = "(H (1[56] 4[18] 2))"
End
Begin PaneConfiguration = 9
NumPanes = 2
Configuration = "(H (1 [75] 4))"
End
Begin PaneConfiguration = 10
NumPanes = 2
Configuration = "(H (1[66] 2))"
End
Begin PaneConfiguration = 11
NumPanes = 2
Configuration = "(H (4 [60] 2))"
End
Begin PaneConfiguration = 12
NumPanes = 1
Configuration = "(H (1))"
End
Begin PaneConfiguration = 13
NumPanes = 1
Configuration = "(V (4))"
End
Begin PaneConfiguration = 14
NumPanes = 1
Configuration = "(V (2))"
End
ActivePaneConfig = 0
End
Begin DiagramPane =
Begin Origin =
Top = 0
Left = 0
End
Begin Tables =
Begin Table = "TB_MASHIN"
Begin Extent =
Top = 6
Left = 38
Bottom = 123
Right = 207
End
DisplayFlags = 280
TopColumn = 3
End
Begin Table = "TB_KLIENTS"
Begin Extent =
Top = 6
Left = 245
Bottom = 108
Right = 414
End
DisplayFlags = 280
TopColumn = 0
End
Begin Table = "TB_DOGOVOR"
Begin Extent =
Top = 6
Left = 452
Bottom = 123
Right = 621
End
DisplayFlags = 280
TopColumn = 0
End
End
End
Begin SQLPane =
End
Begin DataPane =
Begin ParameterDefaults = ""
End
End
Begin CriteriaPane =
Begin ColumnWidths = 11
Column = 1440
Alias = 900
Table = 1170
Output = 720
Append = 1400
NewValue = 1170
SortType = 1350
SortOrder = 1410
GroupBy = 1350
Filter = 1350
Or = 1350
Or = 1350
Or = 1350
End
End
End
',@level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'VIEW', @level1name=N'PR_DOGOVOR'
GO
EXEC sys.sp_addextendedproperty @name=N'MS_DiagramPaneCount', @value=1,@level0type=N'SCHEMA', @level0name=N'dbo', @level1type=N'VIEW', @level1name=N'PR_DOGOVOR'
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[PPoisk]') AND type in (N'P', N'PC'))
BEGIN
EXEC dbo.sp_executesql @statement = N'-- -- Author:<Author,,Name>
-- Create date: <Create Date,,>
-- Description:<Description,,>
CREATE PROCEDURE [dbo].[PPoisk]
@p CHAR(10)
AS
BEGIN
SELECT NAIM_MASH, NAIM_MEM, NAIM_SPEED, NAIM_PROC, NAIM_HDD, CENA
FROM PR_MASHIN
WHERE (NAIM_SPEED = @p)
END
'
END
GO
IF NOT EXISTS (SELECT * FROM sys.foreign_keys WHERE object_id = OBJECT_ID(N'[dbo].[FK_TB_MASHIN_TB_HDD]') AND parent_object_id = OBJECT_ID(N'[dbo].[TB_MASHIN]'))
ALTER TABLE [dbo].[TB_MASHIN] WITH CHECK ADD CONSTRAINT [FK_TB_MASHIN_TB_HDD] FOREIGN KEY([ID_HDD])
REFERENCES [dbo].[TB_HDD] ([ID_HDD])
GO
IF NOT EXISTS (SELECT * FROM sys.foreign_keys WHERE object_id = OBJECT_ID(N'[dbo].[FK_TB_MASHIN_TB_MEM]') AND parent_object_id = OBJECT_ID(N'[dbo].[TB_MASHIN]'))
ALTER TABLE [dbo].[TB_MASHIN] WITH CHECK ADD CONSTRAINT [FK_TB_MASHIN_TB_MEM] FOREIGN KEY([ID_MEM])
REFERENCES [dbo].[TB_MEM] ([ID_MEM])
GO
IF NOT EXISTS (SELECT * FROM sys.foreign_keys WHERE object_id = OBJECT_ID(N'[dbo].[FK_TB_MASHIN_TB_PROC]') AND parent_object_id = OBJECT_ID(N'[dbo].[TB_MASHIN]'))
ALTER TABLE [dbo].[TB_MASHIN] WITH CHECK ADD CONSTRAINT [FK_TB_MASHIN_TB_PROC] FOREIGN KEY([ID_PROC])
REFERENCES [dbo].[TB_PROC] ([ID_PROC])
GO
IF NOT EXISTS (SELECT * FROM sys.foreign_keys WHERE object_id = OBJECT_ID(N'[dbo].[FK_TB_MASHIN_TB_SPEED]') AND parent_object_id = OBJECT_ID(N'[dbo].[TB_MASHIN]'))
ALTER TABLE [dbo].[TB_MASHIN] WITH CHECK ADD CONSTRAINT [FK_TB_MASHIN_TB_SPEED] FOREIGN KEY([ID_SPEED])
REFERENCES [dbo].[TB_SPEED] ([ID_SPEED])
GO
IF NOT EXISTS (SELECT * FROM sys.foreign_keys WHERE object_id = OBJECT_ID(N'[dbo].[FK_TB_DOGOVOR_TB_KLIENTS]') AND parent_object_id = OBJECT_ID(N'[dbo].[TB_DOGOVOR]'))
ALTER TABLE [dbo].[TB_DOGOVOR] WITH CHECK ADD CONSTRAINT [FK_TB_DOGOVOR_TB_KLIENTS] FOREIGN KEY([ID_KLIENT])
REFERENCES [dbo].[TB_KLIENTS] ([ID_KLIENT])
GO
IF NOT EXISTS (SELECT * FROM sys.foreign_keys WHERE object_id = OBJECT_ID(N'[dbo].[FK_TB_DOGOVOR_TB_MASHIN]') AND parent_object_id = OBJECT_ID(N'[dbo].[TB_DOGOVOR]'))
ALTER TABLE [dbo].[TB_DOGOVOR] WITH CHECK ADD CONSTRAINT [FK_TB_DOGOVOR_TB_MASHIN] FOREIGN KEY([ID_MASHIN])
REFERENCES [dbo].[TB_MASHIN] ([ID_MASHIN])
3.1.2 Клиентское приложение
unit UnitMain;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Grids, DBGrids, Menus, ExtCtrls, DBCtrls, StdCtrls;
type
TFRMMain = class(TForm)
MainMenu1: TMainMenu;
N1: TMenuItem;
N2: TMenuItem;
N3: TMenuItem;
N4: TMenuItem;
N11: TMenuItem;
N21: TMenuItem;
N5: TMenuItem;
N6: TMenuItem;
N7: TMenuItem;
N8: TMenuItem;
N9: TMenuItem;
N10: TMenuItem;
N12: TMenuItem;
N13: TMenuItem;
N14: TMenuItem;
N15: TMenuItem;
N16: TMenuItem;
DBGrid1: TDBGrid;
procedure N10Click(Sender: TObject);
procedure N9Click(Sender: TObject);
procedure N7Click(Sender: TObject);
procedure N8Click(Sender: TObject);
procedure N12Click(Sender: TObject);
procedure N6Click(Sender: TObject);
procedure N15Click(Sender: TObject);
procedure N16Click(Sender: TObject);
procedure N5Click(Sender: TObject);
procedure N13Click(Sender: TObject);
procedure N14Click(Sender: TObject);
procedure N11Click(Sender: TObject);
procedure N21Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
FRMMain: TFRMMain;
implementation
uses UnitDM, UnitSprav, UnitTable;
{$R *.dfm}
procedure TFRMMain.N7Click(Sender: TObject);
begin
FRMSPRAV.DBGrid1.DataSource:=DM.DS_KLIENT;
FRMSPRAV.DBNavigator1.DataSource:=DM.DS_KLIENT;
FRMSPRAV.Caption:='Клиенты';
FRMSPRAV.Show;
end;
procedure TFRMMain.N8Click(Sender: TObject);
begin
FRMSPRAV.DBGrid1.DataSource:=DM.DS_PROC;
FRMSPRAV.DBNavigator1.DataSource:=DM.DS_PROC;
FRMSPRAV.Caption:='Процессоры';
FRMSPRAV.Show;
end;
procedure TFRMMain.N9Click(Sender: TObject);
begin
FRMSPRAV.DBGrid1.DataSource:=DM.DS_HDD;
FRMSPRAV.DBNavigator1.DataSource:=DM.DS_HDD;
FRMSPRAV.Caption:='Жесткие диски';
FRMSPRAV.Show;
end;
procedure TFRMMain.N10Click(Sender: TObject);
begin
FRMSPRAV.DBGrid1.DataSource:=DM.DS_MEM;
FRMSPRAV.DBNavigator1.DataSource:=DM.DS_MEM;
FRMSPRAV.Show;
FRMSPRAV.Caption:='Память';
end;
procedure TFRMMain.N11Click(Sender: TObject);
begin
FRMTable.Label1.Caption:=('Введите название машины');
FRMTable.DBGrid1.DataSource:=DM.DSQ_Dogovor;
FRMTable.ClientHeight:=211;
FRMTable.Show;
FRMTable.Panel1.Visible:=false;
FRMTable.Panel2.Visible:=true;
FRMTable.Caption:='Поиск арендаторов';
end;
procedure TFRMMain.N12Click(Sender: TObject);
begin
FRMSPRAV.DBGrid1.DataSource:=DM.DS_SPEED;
FRMSPRAV.DBNavigator1.DataSource:=DM.DS_SPEED;
FRMSPRAV.Show;
FRMSPRAV.Caption:='Скорость';
end;
procedure TFRMMain.N13Click(Sender: TObject);
begin
FRMTable.DBGrid1.DataSource:=DM.DSv_DOGOVOR;
FRMTable.Show;
FRMTable.ClientHeight:=169;
FRMTable.Caption:='Договора';
end;
procedure TFRMMain.N14Click(Sender: TObject);
begin
FRMTable.DBGrid1.DataSource:=DM.DSV_MASHINS;
FRMTable.Show;
FRMTable.ClientHeight:=169;
FRMTable.Caption:='Прайс-лист';
end;
procedure TFRMMain.N15Click(Sender: TObject);
begin
FRMTable.DBGrid1.DataSource:=DM.DS_DOGOVOR;
FRMTable.ClientHeight:=211;
FRMTable.Show;
FRMTable.Panel1.Visible:=true;
FRMTable.Panel2.Visible:=false;
FRMTable.Caption:='Договора';
end;
procedure TFRMMain.N16Click(Sender: TObject);
begin
FRMTable.DBGrid1.DataSource:=DM.DS_MASHIN;
FRMTable.ClientHeight:=211;
FRMTable.Show;
FRMTable.Panel1.Visible:=true;
FRMTable.Panel2.Visible:=false;
FRMTable.Caption:='Прайс-лист';
end;
procedure TFRMMain.N21Click(Sender: TObject);
begin
FRMTable.Label1.Caption:=('Введите требуемый объем памяти');
FRMTable.DBGrid1.DataSource:=DM.DSP_Poisk;
FRMTable.ClientHeight:=211;
FRMTable.Show;
FRMTable.Panel1.Visible:=false;
FRMTable.Panel2.Visible:=true;
FRMTable.Caption:='Поиск машины';
end;
procedure TFRMMain.N5Click(Sender: TObject);
begin
DM.RvDogovora.Execute;
end;
procedure TFRMMain.N6Click(Sender: TObject);
begin
close;
end;
end.
unit UnitDM;
interface
uses
SysUtils, Classes, DB, ADODB, RpCon, RpConDS, RpDefine, RpRave, RpRender,
RpRenderCanvas, RpRenderPreview, DBClient;
type
TDM = class(TDataModule)
T_KLIENTS: TADOTable;
T_DOGOVOR: TADOTable;
T_MASHIN: TADOTable;
T_SPEED: TADOTable;
T_MEM: TADOTable;
T_HDD: TADOTable;
T_PROC: TADOTable;
DS_DOGOVOR: TDataSource;
DS_MASHIN: TDataSource;
DS_SPEED: TDataSource;
DS_MEM: TDataSource;
DS_HDD: TDataSource;
DS_PROC: TDataSource;
DS_KLIENT: TDataSource;
ADOConnection1: TADOConnection;
T_HDDID_HDD: TAutoIncField;
T_HDDNAIM: TWideStringField;
T_HDDHARACT: TWideStringField;
T_PROCID_PROC: TAutoIncField;
T_PROCNAIM: TWideStringField;
T_PROCHARACT: TWideStringField;
T_MEMID_MEM: TAutoIncField;
T_MEMNAIM: TWideStringField;
T_MEMHARACT: TWideStringField;
T_KLIENTSID_KLIENT: TAutoIncField;
T_KLIENTSNAIM: TWideStringField;
T_SPEEDID_SPEED: TAutoIncField;
T_SPEEDNAIM: TWideStringField;
T_SPEEDHARACT: TWideStringField;
RvDogovora: TRvProject;
RvDogovor: TRvDataSetConnection;
TV_DOGOVOR: TADOTable;
DSV_DOGOVOR: TDataSource;
TV_MASHINS: TADOTable;
DSV_MASHINS: TDataSource;
TV_MASHINSNAIM_MASH: TWideStringField;
TV_MASHINSNAIM_MEM: TWideStringField;
TV_MASHINSNAIM_SPEED: TWideStringField;
TV_MASHINSNAIM_PROC: TWideStringField;
TV_MASHINSNAIM_HDD: TWideStringField;
TV_MASHINSCENA: TFloatField;
TV_DOGOVORNAIM_MASH: TWideStringField;
TV_DOGOVORCENA: TFloatField;
TV_DOGOVORDate_zakl: TDateTimeField;
TV_DOGOVORDate_okonch: TDateTimeField;
TV_DOGOVORStoimost: TFloatField;
TV_DOGOVORNAIM_KLIENT: TWideStringField;
QP_Dogovor: TADOQuery;
DSQ_Dogovor: TDataSource;
P_Poisk: TADOStoredProc;
DSP_Poisk: TDataSource;
T_KLIENTSHARACT: TWideStringField;
T_DOGOVORID_DOGOVOR: TAutoIncField;
T_DOGOVORID_KLIENT: TIntegerField;
T_DOGOVORID_MASHIN: TIntegerField;
T_DOGOVORDate_zakl: TDateTimeField;
T_DOGOVORDate_okonch: TDateTimeField;
T_DOGOVORStoimost: TFloatField;
T_MASHINID_MASHIN: TAutoIncField;
T_MASHINID_PROC: TIntegerField;
T_MASHINID_HDD: TIntegerField;
T_MASHINID_MEM: TIntegerField;
T_MASHINID_SPEED: TIntegerField;
T_MASHINNAIM: TWideStringField;
T_MASHINCENA: TFloatField;
QP_DogovorNAIM_KLIENT: TWideStringField;
QP_DogovorNAIM_MASH: TWideStringField;
QP_DogovorCENA: TFloatField;
QP_DogovorDate_zakl: TDateTimeField;
QP_DogovorDate_okonch: TDateTimeField;
QP_DogovorStoimost: TFloatField;
P_PoiskNAIM_MASH: TWideStringField;
P_PoiskNAIM_MEM: TWideStringField;
P_PoiskNAIM_SPEED: TWideStringField;
P_PoiskNAIM_PROC: TWideStringField;
P_PoiskNAIM_HDD: TWideStringField;
P_PoiskCENA: TFloatField;
procedure T_DOGOVORCalcFields(DataSet: TDataSet);
private
{ Private declarations }
public
{ Public declarations }
end;
var
DM: TDM;
implementation
uses UnitMain;
{$R *.dfm}
procedure TDM.T_DOGOVORCalcFields(DataSet: TDataSet);
begin
T_Dogovor.Fields[5].AsFloat:=round(T_Dogovor.Fields[4].AsDateTime-T_Dogovor.Fields[3].AsDateTime)*(T_Mashin.Fields[6].AsInteger/30);
end;
end.
unit UnitTable;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Grids, DBGrids, StdCtrls, ExtCtrls;
type
TFRMTable = class(TForm)
DBGrid1: TDBGrid;
Panel1: TPanel;
Button3: TButton;
Button2: TButton;
Button1: TButton;
Panel2: TPanel;
Edit1: TEdit;
Button4: TButton;
Label1: TLabel;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
FRMTable: TFRMTable;
implementation
uses UnitDM, UnitAdd;
{$R *.dfm}
procedure set_add_form_dogovor;
begin
FRMAdd.DBLookupComboBoxD1.Visible:=true;
FRMAdd.DBLookupComboBoxD2.Visible:=true;
FRMAdd.DBEditD1.Visible:=true;
FRMAdd.DBEditD2.Visible:=true;
FRMAdd.DBLookupComboBoxM1.Visible:=false;
FRMAdd.DBLookupComboBoxM2.Visible:=false;
FRMAdd.DBLookupComboBoxM3.Visible:=false;
FRMAdd.DBLookupComboBoxM4.Visible:=false;
FRMAdd.DBEditm1.Visible:=false;
FRMAdd.DBEditm2.Visible:=false;
FRMAdd.Label1.Caption:=('ФИО Клиента');
FRMAdd.Label2.Caption:=('Название машины');
FRMAdd.Label3.Caption:=('Дата заключения');
FRMAdd.Label4.Caption:=('Дата окончания');
FRMAdd.Label5.Caption:=('');
FRMAdd.Label6.Caption:=('');
end;
procedure set_add_form_mashin;
begin
FRMAdd.DBLookupComboBoxD1.Visible:=false;
FRMAdd.DBLookupComboBoxD2.Visible:=false;
FRMAdd.DBEditD1.Visible:=false;
FRMAdd.DBEditD2.Visible:=false;
FRMAdd.DBLookupComboBoxM1.Visible:=true;
FRMAdd.DBLookupComboBoxM2.Visible:=true;
FRMAdd.DBLookupComboBoxM3.Visible:=true;
FRMAdd.DBLookupComboBoxM4.Visible:=true;
FRMAdd.DBEditm1.Visible:=true;
FRMAdd.DBEditm2.Visible:=true;
FRMAdd.Label1.Caption:=('Процессор');
FRMAdd.Label2.Caption:=('Жесткий диск');
FRMAdd.Label3.Caption:=('Память');
FRMAdd.Label4.Caption:=('Скорость подключения');
FRMAdd.Label5.Caption:=('Название');
FRMAdd.Label6.Caption:=('Цена');
end;
procedure TFRMTable.Button1Click(Sender: TObject);
begin
if DBGrid1.DataSource=DM.DS_DOGOVOR then begin
DM.T_DOGOVOR.Append;
set_add_form_dogovor;
FRMAdd.Caption:='Добавить договор';
end else
if DBGrid1.DataSource=DM.DS_MASHIN then begin
DM.T_MASHIN.Append;
set_add_form_mashin;
FRMAdd.Caption:='Добавить конфигурацию';
end;
FRMAdd.show;
end;
procedure TFRMTable.Button2Click(Sender: TObject);
begin
if DBGrid1.DataSource=DM.DS_DOGOVOR then begin
DM.T_DOGOVOR.Edit;
set_add_form_dogovor;
FRMAdd.Caption:='Редактировать договор';
end else
if DBGrid1.DataSource=DM.DS_MASHIN then begin
DM.T_MASHIN.Edit;
set_add_form_mashin;
FRMAdd.Caption:='Редактировать конфигурацию';
end;
FRMAdd.show;
end;
procedure TFRMTable.Button3Click(Sender: TObject);
begin
if DBGrid1.DataSource=DM.DS_DOGOVOR then begin
DM.T_DOGOVOR.Delete;
end else
if DBGrid1.DataSource=DM.DS_MASHIN then begin
DM.T_MASHIN.Delete;
end;
end;
procedure TFRMTable.Button4Click(Sender: TObject);
var s:string;
begin
if DBGrid1.DataSource=DM.DSQ_DOGOVOR then begin
DM.QP_Dogovor.Close;
s:='SELECT NAIM_KLIENT, NAIM_MASH, CENA, Date_zakl, Date_okonch, ';
s:=s+' Stoimost FROM PR_DOGOVOR ';
s:=s+'WHERE NAIM_MASH =('''+edit1.Text+''')';
DM.QP_Dogovor.SQL.Clear;
DM.QP_Dogovor.SQL.Add(s);
try
dm.QP_Dogovor.Open;
except
showmessage('ошибка');
end;
end else
if DBGrid1.DataSource=DM.DSP_Poisk then begin
dm.P_Poisk.close;
dm.P_Poisk.Parameters.ParamByName('@p').Value:=Edit1.Text;
dm.P_Poisk.Open;
end;
end;
end.
unit UnitAdd;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, DBCtrls, Mask;
type
TFRMAdd = class(TForm)
Button1: TButton;
DBEditD1: TDBEdit;
DBEditD2: TDBEdit;
DBLookupComboBoxD1: TDBLookupComboBox;
DBLookupComboBoxD2: TDBLookupComboBox;
Button2: TButton;
DBLookupComboBoxM1: TDBLookupComboBox;
DBLookupComboBoxM2: TDBLookupComboBox;
DBLookupComboBoxM3: TDBLookupComboBox;
DBLookupComboBoxM4: TDBLookupComboBox;
DBEditM1: TDBEdit;
DBEditM2: TDBEdit;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
FRMAdd: TFRMAdd;
implementation
uses UnitDM, UnitTable;
{$R *.dfm}
procedure TFRMAdd.Button1Click(Sender: TObject);
begin
if FRMTable.DBGrid1.DataSource=DM.DS_DOGOVOR then begin
DM.T_Dogovor.Fields[5].AsFloat:=round(DM.T_Dogovor.Fields[4].AsDateTime-DM.T_Dogovor.Fields[3].AsDateTime)*(round(DM.T_Mashin.Fields[6].AsInteger/30));
DM.T_DOGOVOR.Post;
DM.T_DOGOVOR.Active:=false;
DM.T_DOGOVOR.Active:=true;
DM.T_DOGOVOR.Append;
end
else if FRMTable.DBGrid1.DataSource=DM.DS_MASHIN then begin
DM.T_MASHIN.Post;
DM.T_MASHIN.Active:=false;
DM.T_MASHIN.Active:=true;
DM.T_MASHIN.Append;
end;
end;
procedure TFRMAdd.Button2Click(Sender: TObject);
begin
close;
end;
end.
3.2 Руководство пользователя
Главная форма (рис. 3.1) позволяет получить доступ ко всем функциям программы, путем использования главного меню. Так же на ней отображен весь список договоров.
Рисунок 3.1 Главная форма
С помощью главного меню открывается редактор таблиц, путем использования кнопок «Добавить», «Редактировать», «Удалить» можно внести изменения в состав таблиц (рис. 3.2, 3.3). При нажатии кнопки «Ок» на форме добавления/редактирования записи автоматически посчитается сумма договора на основании длительности договора и стоимости аренды данной конфигурации.
Рисунок 3.2 Таблица «Договора» и форма для внесения изменений.
Рисунок 3.3 Таблица «Прайс-лист» и форма для внесения изменений.
При использовании второго пункта меню «Справочники» Можно внести изменения в имеющиеся в базе данных справочники (рис. 3.4 – 3.8)
Рисунок 3.4 Справочник «Клиенты».
Рисунок 3.5 Справочник «Процессоры».
Рисунок 3.6 Справочник «Жесткие диски».
Рисунок 3.7 Справочник «Оперативная память».
Рисунок 3.8 Справочник «Скорость».
Для удобства просмотра хранящейся в базе данных информации сделаны представления, которые можно увидеть с помощью пункта меню «Представления» (рис. 3.9, 3.10)
Рисунок 3.9 Представление Договоров.
Рисунок 3.10 Представление Прайс-листа.
Для получения каких-либо сведений из базы данных используются запросы. На рис 3.11 показан результат запроса на выборку всех арендаторов заданной конфигурации.
Рисунок 3.11 Запрос.
Для удобства просмотра и возможности вывода информации на печать была использована программа RaveReports с помощью которой можно создавать отчеты. На рис. 3.12 показан внешний вид получаемого отчета.
Рисунок 3.12 Вид отчета.
Заключение
В результате работы была создана реляционная база данных в Microsoft SQL Server, содержащая 7 таблиц, 5 из которых справочники. Клиентское приложение написанное с помощью CodeGear Delphi позволяющее просматривать, изменять и искать нужную информацию. Были рассмотрены различные способы внесения и получения данных из базы данных. Построен отчет для вывода на печать с помощью программы RaveReports. Изучены свойства и методы компонентов CodeGear Delphi для работы с базами данных.