- •Лабораторная №1 Проектирование структуры базы данных. Нормализация таблиц.
- •О бозначение таблиц и полей
- •Лабораторная №2 Создание серверной части приложения: алиас, файл базы данных, таблицы.
- •Лабораторная №3, №4 Визуальное проектирование структуры базы данных: таблицы, индексы, условия ссылочной целостности, взаимосвязи.
- •Примечание
- •Лабораторная №5, №6 Клиентская часть: размещение не визуальных компонентов, соединение с бд. Клиентская часть: размещение визуальных компонентов, отображение таблиц.
- •Лабораторная №7, №8 Запросы на добавление данных. Запросы на редактирование и удаление данных.
- •Лабораторная №9 Создание генераторов и триггеров. Каскадные воздействия.
- •Лабораторная №10 Создание хранимых процедур.
- •Лабораторная №11 Сортировка, поиск, фильтрация данных: в базе данных и выборках.
- •Лабораторная №12, №13 Работа с транзакциями. Кэширование изменений при работе с транзакциями.
- •Лабораторная №14 Обеспечение достоверности данных и перехват исключительных ситуаций.
- •Лабораторная №15 Работа с отчетами.
- •Лабораторная №16 Установление привилегии доступа.
- •Лабораторная №17 Копирование и восстановление данных.
- •Лабораторная №18 Копирование клиентской части
- •Список рекомендуемых баз данных
Лабораторная №7, №8 Запросы на добавление данных. Запросы на редактирование и удаление данных.
Цель работы: познакомить с принципами формирования и выполнения операторов добавления, редактирования и удаления данных.
Добавление данных
Используя скрипт insert.sql, добавьте данные в таблицы базы из Exmpl.gdb.
Код скрипта insert.sql
//Добавить, данные о хозяевах недвижимости в таблицу Owner
INSERT INTO Owner VALUES (l, 'Иванов', 'Мира 36');
INSERT INTO Owner VALUES (2, 'Петров', 'Правды 2/36');
INSERT INTO Owner VALUES (3, 'Ивашко', 'Кирова 18');
commit;
//Добавить, данные о стоимости аренды недвижимости в таблицу Rent
INSERT INTO Rent VALUES ('2-к. квартира', 90);
INSERT INTO Rent VALUES ('1-к. квартира', 60);
INSERT INTO Rent VALUES ('дом', 1800);
commit;
//Добавить, данные о местоположении объекта недвижимости в таблицу Realty
INSERT INTO Realty VALUES ('Кирова 118/2', '1-к. квартира');
INSERT INTO Realty VALUES ('Металлургов 56', 'дом');
INSERT INTO Realty VALUES ('Р-Корсакова 32/15', '2-к. квартира');
commit;
//Добавить, данные о местоположении объекта недвижимости в таблицу Lease
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;
Редактирование данных
Редактирование данных о владельцах (Owner) и дат заключения договоров (LDate).
Прежде чем редактировать запись, ее следует выбрать. Для этого:
Ход работы:
Используя приведенный ниже скрипт, создайте немодифицируемый просмотр sv_view__lease:
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
Начните новый Delphi-проект.
Поместите на форму компоненты TDBNavigator, TButton и TDBGrid
Форма отображения данных договоров
П
рисвойте
СВОЙСТВУ
Name
формы
значение fmViewLease.Создайте модуль данных с именем dmEdit и назначьте свойства компонентов такими, как показано в таблице.
Свойство компонентов модуля данных
-
Компонент
Свойство
Значение
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
Создайте папку Edit и сохраните в ней модуль данных и форму fmViewLease под именами dmEditU.pas и View.pas, соответственно.
Добавьте имя модуля данных в секцию implementation модуля View.
Теперь, когда записи отображены, реализуем их редактирование. Поставьте в соответствие событию btEditclick кнопки Редактировать процедуру:
Код процедуры btEditciick
procedure TfmViewLease.btEditcliick(Sender: TObject);
var Bookmark: TBookmark;
begin
Bookmark := dmEdit.quViewLease.GetBookmark; { установить закладку }
// Отобразить модально форму 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.GotoBookmark(Bookmark);
dmEdit.quViewLease.FreeBookmark(Bookmark);
end;
end
else
dmEdit.quEdLease.Cancel;
e
nd;
Итак, по нажатии кнопки Редактировать модально отображается форма 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 и TDataSource.
Назначьте значения их свойств.
-
Компонент
Свойство
Значение
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 и TDataSource.
Назначьте значения их свойств.
-
Компонент
Свойство
Значение
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
Выбор значения поля Ow из набора данных quOwner
Контрольные задания:
Пояснить особенности редактирования фамилии владельца.
Почему в организации процесса редактирования договора использован компонент TQuery, а не Ttable.
Создать SQL-запрос на удаление записи о договоре.
