Материал: 2110

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

Рядом с каждым настроенным компонентом поставить Label (надпись), у которой в свойстве Caption написать, например, "Введите название кни- ги" и т.д.

У компонента DBGrid настроить свойство ReadOnly в режим True.

Так как на форме будут использоваться компоненты DBLookupComboBox, которые ссылаются на таблицы Authors и Publishing_house, нужно на основной форме в подпункте меню "Книги" в методе Click добавить в начало две команды:

DM.ADOPublish.Open;

DM.ADOAuthors.Open;

В противном случае при открытии формы может произойти ошибка, если по какой-то причине источники данных для компонент

DBLookupComboBox будут неактивны.

21.Аналогично для остальных форм добавить элементы типа DBEdit (для полей данные которых будут просто набираться или редактироваться пользователем) и DBLookupComboBox (для полей связи, к которым под- ходит связь типа «много», они позволят выбирать данные из соответст- вующего справочника и пользователю не придется помнить значения ко- дов).

22.Проверить работу приложения.

23.Теперь необходимо создать фильтры по текущим значениям полей таблицы. Значения для фильтра будут браться из колонок DBGrid. Напри-

мер, строка formbooks.DBGrid1.Columns.Items[0].Field.Text; будет брать текущее значение из первой колонки DBGrid. Поэтому при выполнении этого задания обращайте внимание на соответствие индексов колонки по- рядку полей и исправьте при необходимости индексы в соответствии с ва- шим порядком полей в таблице.

На форму FormBooks с вкладки Standart добавить 5 компонентов типа

Button.

У 1-го компонента Button изменить свойства и метод:

Name на B_Publish;

Caption на Фильтр по текущему издательству; В методе Click кнопки написать код:

dm.ADOBooks.Filter:= 'Code_Publish = '+ formbooks.DBGrid1.Columns.Items[4].Field.Text;

dm.ADOBooks.Filtered:= true;

У 2-го компонента Button изменить свойства и метод:

Name на B_Title_Book;

90

Caption на Фильтр по текущему названию книги. В методе Click кнопки написать код:

dm.ADOBooks.Filter:= 'Title_book = '+ QuotedStr( formbooks.DBGrid1.Columns.Items[1].Field.Text);

dm.ADOBooks.Filtered:= true;

У 3-го компонента Button изменить свойства и метод:

Name на B_Author;

Caption на Фильтр по текущему автору. В методе Click кнопки написать код:

dm.ADOBooks.Filter:= 'Code_Author = '+ formbooks.DBGrid1.Columns.Items[0].Field.Text;

dm.ADOBooks.Filtered:= true;

У 4-го компонента Button изменить свойства и метод:

Name на B_Pages;

Caption на Фильтр по количеству страниц в книге. В методе Click кнопки написать код:

dm.ADOBooks.Filter:= 'Pages = '+ formbooks.DBGrid1.Columns.Items[3].Field.Text;

dm.ADOBooks.Filtered:= true;

У 5-го компонента Button изменить свойства и метод:

Name на B_Cancel;

Caption на Снять фильтр.

В методе Click кнопки написать код: dm.ADOBooks.Filter:= '';

dm.ADOBooks.Filtered:= false;

24.Аналогично для остальных форм добавить элементы типа Button, которые будут запускать фильтры по соответствующим значениям полей текущей записи в объекте Grid. Пример интерфейса формы представлен на рис. 7.1.

25.Проверить работу приложения.

26.Создать форму, назвать (изменить свойство Name) FormProcedure.

Вглавной форме в коде добавить описание этой формы, для этого после ключевого слова USES в конце списка через запятую дописать название программного модуля, которое соответствует созданной форме. В создан- ной форме в коде добавить описание модуля DM, для этого после ключе- вого слова USES в конце списка поставить запятую и дописать название программного модуля, например UNIT2, который соответствует созданной форме DM.

27.Добавить на главной форме в меню пункт с названием Работа с процедурами. В методе Click пункта меню написать код для запуска фор- мы FormProcedure (см. пример кода в пункте 17 текущей лабораторной работы).

91

Рис. 7.1. Пример расположения компонентов на форме FormBooks

28. Подключить хранимую процедуру Count_Books_Itogo, выполнен- ную в лабораторной работе №5, которая возвращает одно значение. На форму DM добавить компонент ADOStoredProc, переименовать компонент в ADOSP_Count. У ADOSP_Count изменить следующие свойства:

Connection на ADOConnection1; ProcedureName на Count_Books_Itogo.

29. У компонента ADOSP_Count выбрать свойтсво Parameters и соз- дать 3 параметра:

для Count_pages IN Int: Name на Count_pages; Datatype на ftInteger;

Direction на pdInput;

Value–Type на Integer;

для Title IN Char: Name на Title;

Datatype на ftString;

Direction на pdInput; Value–Type на OleStr;

для Itogo OUT Int: Name на Itogo;

Datatype на ftInteger;

Direction на pdOutput; Value–Type на Integer.

30. На форму FormProcedure добавить 3 компонента типа Edit (имена соответственно Edit1, Edit2, Edit3) и 1 компонент типа Button. Рядом с ка- ждым компонентом Edit поставить Label и исправить их свойства Caption

92

соответственно на «Введите количество страниц», «Введите название кни- ги», «Количество найденных книг».

31. На кнопке поменять название на «Выполнить запрос». В методе Click кнопки написать следующий код:

DM.ADOSP_Count.Prepared; try

DM.ADOSP_Count.Parameters.ParamByName('Count_pages').Value:=StrToInt(Edit1.Text); DM.ADOSP_Count.Parameters.ParamByName('Title').Value:= Edit2.Text; DM.ADOSP_Count.ExecProc;

Edit3.Text:= inttostr(DM.ADOSP_Count.Parameters.ParamByName('Itogo').Value); finally

DM.ADOSP_Count.Prepared:=not(DM.ADOSP_Count.Prepared); end;// try

32.Проверить работу приложения.

33.Для вывода данных из нескольких таблиц можно использовать представления (View), которые создаются и хранятся на сервере.

Создать представление на сервере, которое будет хранить информацию

оназвании книги, авторе, издательстве. Для этого в утилите SQL *Plus Worksheet напишите следующий код и выполните (F5):

CREATE OR REPLACE VIEW admin_books.view_books AS

SELECT a.name_author AS "NAME_AUTHOR1",

b.title_book AS "TITLE_BOOK1",c.publish AS "PUBLISH1"

FROM (ADMIN_BOOKS.AUTHORS a INNER JOIN ADMIN_BOOKS.BOOKS b on a.code_author=b.code_author)

INNER JOIN ADMIN_BOOKS.PUBLISHING_HOUSE c ON b.code_publish =

c.code_publish

34. Подключить созданное представление через ADOQuery. На форму DM добавить компонент ADOQuery, переименовать компонент в

ADOView_Books. У ADOView_Books изменить следующие свойства: Connection на ADOConnection1;

SQL на

select * from admin_books.view_books

35. Для компонента ADOView_Books добавить на форму DM компо- нент DataSource и присвоить его свойствам следующие значения:

Name на Data_Books_All;

DataSet на ADOView_Books.

36. На форму FormProcedure добавить DBGrid, 1 компонент типа Button и 1 компонент типа Edit. Рядом с полем Edit поставить метку с тек- стом "Введите фамилию искомого автора". В свойстве Datasource компо- нента DBGrid выбрать Data_Books_All. На кнопке поменять название на «Выполнить запрос». В методе Click кнопки написать следующий код:

DM.ADOView_Books.Open; IF trim(Edit4.Text)<>'' then begin

93

DM. ADOView_Books.Filter:='name_author1='+ QuotedStr(Edit4.Text); DM.ADOView_Books.Filtered:=True;

end else

DM.ADOView_Books.Filtered:=False;

DBGrid1.Refresh;

37. Проверить работу приложения.

Задания к лабораторной работе №7

В Delphi 7 создать новый проект, далее для индивидуальной БД, соз- данной в лабораторной работе №1, создать интерфейс, включающий все функции и процедуры, которые описаны по ходу текущей лабораторной работы.

Лабораторная работа №8

СОЗДАНИЕ АДМИНИСТРАТИВНОЙ СТРАНИЦЫ

Цель работы научиться организовывать со стороны клиентского прило- жения удаленное управление правами доступа к данным экземпляра БД.

Содержание работы:

1.Выполнение всех заданий по ходу лабораторной работы.

2.Выполнение индивидуальных заданий.

Пояснения к выполнению работы

Для создания в приложении административной страницы используем пример базы данных в табличном пространстве DB_Books, которая была создана в лабораторной работе №1, а также используем клиентское прило- жение, которое было создано в лабораторной работе №7. При выполнении примеров и заданий обращайте внимание на соответствие названий объек- тов экземпляра БД, таблиц и других объектов проекта.

В SQL *Plus Worksheet:

Создадим процедуру добавления нового пользователя в табличное пространство DB_Books в разделе Schema – Procedure – ADMIN_BOOKS

через утилиту SQL *Plus Worksheet:

CREATE OR REPLACE PROCEDURE admin_books.add_user(name_user IN varchar2,

passw IN VARCHAR2, table_space IN VARCHAR2) IS sql_text varchar2(200);

BEGIN

94