Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Практические работы по УБД 2013.doc
Скачиваний:
8
Добавлен:
01.04.2025
Размер:
3.27 Mб
Скачать

Лабораторная №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;

  • Редактирование данных

  1. Редактирование данных о владельцах (Owner) и дат заключения договоров (LDate).

Прежде чем редактировать запись, ее следует выбрать. Для этого:

Ход работы:

  1. Используя приведенный ниже скрипт, создайте немодифицируемый просмотр 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

  1. Начните новый Delphi-проект.

  1. Поместите на форму компоненты TDBNavigator, TButton и TDBGrid

Форма отображения данных договоров

  1. П рисвойте СВОЙСТВУ Name формы значение fmViewLease.

  2. Создайте модуль данных с именем 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

  1. Создайте папку Edit и сохраните в ней модуль данных и форму fmViewLease под именами dmEditU.pas и View.pas, соответственно.

  2. Добавьте имя модуля данных в секцию implementation модуля View.

  3. Теперь, когда записи отображены, реализуем их редактирование. Поставьте в соответствие событию 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

Позволяет добавлять новые записи.

  1. Добавьте к модулю данных компоненты TQuery и TDataSource.

  2. Назначьте значения их свойств.

Компонент

Свойство

Значение

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.

  1. Редактирование в договоре фамилии владельца недвижимости.

Здесь есть "маленькая" тонкость. Дело в том, что в наборе quEdLease есть только данные о порядковом номере владельца, который хранится в таблице Lease, а не его фамилии. Но конечный пользователь вашей информационной системы не обязан знать соответствие между номерами и фамилиями владельцев. Поэтому мы должны подменить номер на соответствующую фамилию. И добавим еще одно удобство — редактирование заменой данными таблицы.

Ход работы:

  1. Добавьте к модулю данных компоненты TQuery и TDataSource.

  2. Назначьте значения их свойств.

Компонент

Свойство

Значение

TQuery

Name

quOwner

DatabaseName

Exmpl

SQL

SELECT Non, Ow

FROM Owner

RequestLive

True

Active

True

TDataSourse

DataSet

quOwner

Name

dsOwner

  1. Определите свойства компонентов формы.

Компонент

Свойство

Значение

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

Контрольные задания:

  1. Пояснить особенности редактирования фамилии владельца.

  2. Почему в организации процесса редактирования договора использован компонент TQuery, а не Ttable.

  3. Создать SQL-запрос на удаление записи о договоре.