Автор работы: Пользователь скрыл имя, 29 Октября 2012 в 14:23, лабораторная работа
Цель работы: познакомить с понятием "концептуальная модель"; научиться правильно использовать принципы нормализации при проектиировании базы данных.
Постановка задачи
Пусть некоторая риелтерская контора "Аренда Minus" специализируется на заключении договоров аренды жилых помещений. Круг клиентов-арендаторов "Аренда Minus" не стабилен. Необходимо автоматизировать процесс регистрации и хранения договоров аренды.
Аналогично выполнить скрипт tables.sql
Команда commit в приведенном скрипте позволяет завершать транзакцию, которую неявно стартует утилита Interactive SQL.
Контрольные задания
Цель работы: показать размещение компонент доступа к данным и компоненты отображения данных на листах различных типов приложения; грамотно использовать средства, события и методы компонентов;
Рассмотрим использование компонент для создания простейшего приложения. База Baza.gdb состоит из одной таблицы с полями: Ncar, marka, year, fio.
Для удобства работы всем компонентам можно дать соответствующие имена:
IBDatabase1 |
Dcars, |
IBTransaction1 |
Tcars, |
IBTable1 |
cars, |
DataSource |
DScars |
Компонента |
Свойство |
Значение |
DScars |
DataSet |
cars |
cars |
Database |
Dcars |
Transaction |
Tcars | |
Tcars |
DefaultDatabase |
Dcars |
Клиентская часть: размещение
визуальных компонентов,
отображения таблиц.
DBGrid1 - таблица для отображения данных базы данных,
DBNavigator1 - навигатор для управления курсором,
BitBtn1 - кнопка для активизации таблицы,
BitBtn2 - кнопка для закрытия приложения.
Компонента |
Свойство |
Значение |
DBGrid1 |
DataSourse |
DM.DScars |
DBNavigator1 |
||
cars |
Active |
True |
DBGrid1 |
Visible |
False |
DBNavigator1 |
Enabled |
False |
В процедуре BitBtn1.Click (кнопка "показать таблицу") напишите:
DBGrid1.Visible:=True;
DBNavigator1.Enabled:=true;
В процедуре BitBtn2.Click (кнопка "закрыть приложение") напишите:
Form1.Close;
Контрольное задание:
Создать приложение для базы EXMPL.gdb с использованием модуля данных и компонент для отображения и заполнения таблиц базы.
Цель работы: познакомить с принципами формирования и выполнения операторов добавления, редактирования и удаления данных.
Используя скрипт insert.sql, добавьте данные в таблицы базы из Exmpl.gdb.
Код скрипта insert.sql
//Добавить,
данные о хозяевах
INSERT INTO Owner VALUES (l, 'Иванов', 'Мира 36');
INSERT INTO Owner VALUES (2, 'Петров', 'Правды 2/36');
INSERT INTO Owner VALUES (3, 'Ивашко', 'Кирова 18');
commit;
//Добавить, данные
о стоимости аренды
INSERT INTO Rent VALUES ('2-к. квартира', 90);
INSERT INTO Rent VALUES ('1-к. квартира', 60);
INSERT INTO Rent VALUES ('дом', 1800);
commit;
//Добавить,
данные о местоположении
INSERT INTO Realty VALUES ('Кирова 118/2', '1-к. квартира');
INSERT INTO Realty VALUES ('Металлургов 56', 'дом');
INSERT INTO Realty VALUES ('Р-Корсакова 32/15', '2-к. квартира');
commit;
//Добавить,
данные о местоположении
INSERT INTO Lease VALUES (l, 'Петров', 'Правды 2/36', 1, 'Р-Корсакова 32/15', '01/01/01');
INSERT INTO Lease VALUES (2, 'Сидоров', 'Курская 18', 2, 'Кирова 118/2', '08/12/1999');
INSERT INTO Lease VALUES (3, 'Иванов', 'Мира 36', 3, 'Металлургов 56', '05/14/О2' ) ;
commit;
Прежде чем редактировать запись, ее следует выбрать. Для этого:
Ход работы:
CREATE VIEW sv_View_Lease(NLease, Tn, Ow, Adr, LDate) AS
SELECT L.NLease, L.Tn, O.Ow, L.Adr, L.LDate
FROM Lease L, Owner 0
WHERE O.Non = L.NOn
Форма отображения данных договоров
Свойство компонентов модуля данных
Компонент |
Свойство |
Значение |
TDatabase |
AliasName |
clsrvExmpl |
DatabaseName |
Exmpl | |
Name |
dbExmpl | |
Params |
User Name=SYSDBA PASSWORD=masterkey | |
LoginPrompt |
False | |
Connected |
True | |
TQuery |
Name |
quViewLease |
DatabaseName |
Exmpl | |
SQL |
Select * from sv_View_Lease | |
Active |
True | |
TDataSourse |
DataSet |
quViewLease |
Name |
dsViewLease |
Код процедуры btEditciick
procedure TfmViewLease.btEditcliick(
var Bookmark: TBookmark;
begin
Bookmark := dmEdit.quViewLease.
// Отобразить модально форму fmEdit
if (fmEdit.ShowModal = mrOK) and
{Если нажата кнопка OK и набор данных quEdLease находится в состоянии dsEdit или dslnsert }
((dmEdit.quEdLease.State = dsEdit) or (dmEdit.quEdLease.State = dslnsert}) then
begin
try
(сохранить
текущее состояние набора
dmEdit.quEdLease.Post;
{Показать текущее состояние набора данных}
dmEdit.quViewLease.Close;
dmEdit.quViewLease.Open;
finally
// Отобразить текущей ту запись, которую отредактировали
dmEdit.quViewLease.
dmEdit.quViewLease.
end;
end
else
dmEdit.quEdLease.Cancel;
end;
Итак, по нажатии кнопки Редактировать модально отображается форма fmEdit. По нажатии кнопки ОК на этой форме сохраняются отредактированные данные набора dmEdit. quEdLease, отображаемые компонентами TDBLookupComboBox и TDBEdit.
Относительно состояний dsEdit и dslnsert следует заметить, что когда приложение открывает набор данных, оно автоматически переводит его в режим dsBrowse. В любое другое состояние набор данных переходит из состояния Browse. Например, вызов методов INSERT или APPEND для набора данных изменяет состояние dsBrowse на dslnsert.
Два метода, связанные со всеми наборами данных, могут возвращать набор данных в состояние dsBrowse. Cancel заканчивает текущее действие и всегда возвращает набор данных в режим dsBrowse. Post пытается записывать изменения в таблицу базы данных и, при положительном исходе, также возвращает набор данных в режим dsBrowse. Если Post терпит неудачу, то текущее состояние остается прежним.
Диаграмма, приведенная на рисунке, иллюстрирует состояния набора данных и методы, которые инициируют их изменения. Описания состояний наборов данных приведены в таблице.
Значение |
Состояние |
Описание |
DsInactive |
Inactive |
Набор данных закрыт. Данные не доступны |
DsBrowse |
Browse |
Набор открыт. Можно просматривать записи. |
DsEdit |
Edit |
Текущую запись можно редактировать |
dsInsert |
Insert |
Позволяет добавлять новые записи. |
Компонент |
Свойство |
Значение |
TQuery |
Name |
quEdLease |
DatabaseName |
Exmpl | |
DataSource |
dsViewLease | |
SQL |
SELECT Non, LDate FROM Lease WHERE Nlease=:NLease | |
RequestLive |
True | |
Active |
True | |
TDataSourse |
DataSet |
quEdLease |
Name |
dsEdLease |
Примечание: Как видно из значений свойств компонентов, дата заключения договора — это значение параметра quEdLease. Другими словами, значение поля LDate, отображаемое на форме fmEdit, определяется данными текущей записи набора данных quViewLease.
Здесь есть "маленькая" тонкость. Дело в том, что в наборе quEdLease есть только данные о порядковом номере владельца, который хранится в таблице Lease, а не его фамилии. Но конечный пользователь вашей информационной системы не обязан знать соответствие между номерами и фамилиями владельцев. Поэтому мы должны подменить номер на соответствующую фамилию. И добавим еще одно удобство — редактирование заменой данными таблицы.
Ход работы:
Компонент |
Свойство |
Значение |
TQuery |
Name |
quOwner |
DatabaseName |
Exmpl | |
SQL |
SELECT Non, Ow FROM Owner | |
RequestLive |
True | |
Active |
True | |
TDataSourse |
DataSet |
quOwner |
Name |
dsOwner |
Компонент |
Свойство |
Значение |
TDBLookupComboBox |
DataField |
NOn |
DatabaseSource |
dmEdit.dsEdLease | |
KeyField |
NOn | |
ListField |
Ow | |
ListSource |
dmEdit.dsOwner | |
TDBEdit |
Name |
DBEdit1 |
DataField |
LDate | |
DatabaseSource |
dmEdit.dsEdLease | |
TButton |
Caption |
OK |
ModalResult |
mrOk | |
TButton |
Caption |
Отмена |
ModalResult |
mrCancel |
Информация о работе Проектирование структуры базы данных. Нормализация таблиц