Рядом с каждым настроенным компонентом поставить 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