ЛР 01-1 1620 (препод) (1018812), страница 6
Текст из файла (страница 6)
а после – OnDestriy
procedure TForm1.FormDestroy(Sender: TObject);
begin
Form1.Tablel.Active:=false;
end;
Теперь в момент создания формы ваше приложение будет соединяться с базой данных, а в момент разрушения формы соединение будет прерываться. В компоненте Tablel следует установить свойство Active в false, чтобы не занимать базу данных в процессе проектирования. Правда, если вы работаете не в сети или если вы единственный пользователь этой базы данных, то это не имеет особого значения.
Откомпилируем и вновь сохраним проект в папке Работа с DBNavigator.
Две связанные таблицы.
Измените название формы на Сделки менеджеров.
Установите на форме второй набор Table , DataSource, DBGrid
Установите TableName – Sd.Dbи у обоих Ефиду – Active – True.
Затем вновь снимите Activ на False
Допишите .обработчики
procedure TForm1.FormCreate(Sender: TObject);
begin
Form1.Table1.Active:=true; Form1.Table2.Active:=true;
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
Form1.Table1.Active:=false; Form1.Table2.Active:=false;
end;
Установите связь между таблицами, выбрав в Table2 для MasterSource- DataSource1, а в свойстве MasterFields у Available Indexes индексы CodMen
| |
|
После нажатия на клавишу Add и OK – связь будет установлена.
Оттранслируйте и поработав сохраните в папке Две связанные таблицы.
Вопрос 3 Просмотр таблиц сделок и менеджеров
Создадим программу просмотра таблиц сделок с выдачей списка менеджеров их совершивших.
Изменим свойства MasterSource и MasterFields у таблиц, DataSource у DBNavigator
|
Свяжем таблицы менеджеров и сделок
Откомпилируем и запустим на выполнение
Поля подстановки. Заполнение таблицы Сделки.
Таблица Сделки – особая. Так как человек не может запомнить и вводить коды, то следует организовать такой же ввод данных, как в Paradox и Access.
Разорвем Master – Detail связь между таблицами
|
|
Бросим на форму DBLookUpComboBox, установим следующие свойства
DataField | CodMen |
DataSource | DataSource2 |
KeyField | CodMen |
ListField | Fam |
ListFieldIndex | 10 |
ListSource | DataSource1 |
Откомпилируем и выполним.
Теперь, перемещаясь по таблице сделки мы видим фамилию менеджера в таблице Менеджеров и в поле LookUp.
|
|
При редакции записи по сделке при выборе фамилии нового менеджера происходить изменение кода менеджера в таблице Сделки.
|
|
Таблица менеджеров в данном случае лишняя, она иллюстрирует лишь связь между DBLookUpComboBox и таблицами.
Напишем приложение, позволяющее вводить и редактировать поля таблицы сделки. Изменим название формы на Сделки, введем дополнительные DBLoolUpComboBox и установим их свойства
Откомпилируйте программу, запустите на выполнение, введите записи по сделкам
Не забудьте восстановить обработчики
procedure TForm1.FormCreate(Sender: TObject);
begin
Form1.Table1.Active:=true;
Form1.Table2.Active:=true;
Form1.Table3.Active:=true;
Form1.Table4.Active:=true;
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
Form1.Table1.Active:=false;
Form1.Table2.Active:=false;
Form1.Table3.Active:=false;
Form1.Table4.Active:=false;
end;
Вопрос 4 Модуль данных
Создадим новый проект и с помощью команды меню File-Close закроем без сохранения автоматически созданную форму Forml в новом проекте.
Добавим в проект модуль данных с помощью операции File-New-Data Modules.
В проекте появится модуль с именем DataModule1.
Перенос в модуль новых компонентов осуществляется щелчком на соответствующей пиктограмме палитры библиотеки компонентов и последующим щелчком в левой панели Проектировщика Модулей Данных или на его странице Components. В результате в дереве и на странице Components появляются соответственно вершина дерева и пиктограмма компонента.
Перетащим с палитры компонент Table в поле Components модуля DataModule1 и изменим у компоненты Table1 ее свойство DataBaseName MelkOpt - название глобального псевдонима, который можно выбрать из выпадающего списка.
Установим TableName в Men.db.
После изменения свойства DataBaseName зададим свойству Active компоненты Table 1 значение True. При выполнении ряда операций свойству Active автоматически задается значение False, поэтому следует контролировать значение данного свойства, чтобы информация из БД отображалась в форме.
Поместим в модуль DataModule1 компоненты для связи с остальными таблицами БД. В. палитре компонент откроем страницу DataAccess (доступ к данным), выделив мышью ее закладку. С этой страницы с помощью мыши перенесем в модуль DataModule1 еще три компоненты Table. Они получат имена Таble2, ТаbleЗ, Table4.
С помощью инспектора объектов для них выберем свойство DataBaseName и установим для него значение MelkOpt, определяющее псевдоним БД. Затем свойству TableName у компоненты Таble2 зададим значение Pok.db, у компоненты ТаbleЗ - Tov.db, у компоненты Таble4 - SD.db.
При выборе элемента в дереве или на странице Components можно получить доступ к любому компоненту или его полю. Для этого нужно выделить в дереве вершину компонента (таблицы или поля). После этого в Инспекторе объектов можно редактировать свойства и события этого компонента.
Чтобы можно было выводить на экран данные из этих таблиц, зададим свойству Active компонент Таbleзначение True.
С той же страницы DataAccess мышью перенесем в модуль DataModule1 компоненты DataSource (источник данных). Они получат имена DataSource1 и DataSource2.
Зададим свойству DataSet компоненты DataSource1 значение Таble1, а компоненты DataSource2 – Таble2 и т д. После этого отображаемые компоненты получат доступ к данным из таблиц БД
Сохраним модуль данных в своей папке с именем Dmod.pas
Перетащим с левой панели названия таблиц на вкладку Data Diagram, выделим каждую таблицу, выполним щелчок правой кнопкой мыши и выберем Fields Editor, далее в редакторе поле после щелчка правой кнопкой мыши выберем Add all Fields.
На странице Data Diagram можно наглядно представить связи между наборами данных и полями. Для этого достаточно перетащить мышью соответствующую вершину из панели дерева в правую панель. Связи между появившимися на панели блоками указываются автоматически. Щелкнув на блоке правой кнопкой мыши можно посмотреть свойства полей, изменить цвет заголовка таблицы, распечатать структуру таблицы.
При щелчке правой кнопкой мыши на пустом месте и выборе Print из выпадающего меню можно распечатать всю диаграмму.
После выбора инструмента Master-Detail нажимаем мышку у поля CodMen таблицы SD.db и протаскиваем до поля поля CodMen таблицы Men.db. После отпускания кнопки мыши в новом окне выбираем поля связи CodMen и нажимаем на кнопку Add, а затем и на ОК.
Устанавливаем так связи между всеми таблицами.
На Data Diagram будут отражены все связи
Создаем новую форму, указываем в Uses название нашего модуля данных Dmod.
Бросаем на форму четыре элемента DBGrid и один DBNavigator. Устанавливаем DataSource DBNavigator и DBGrid на DataModule1.DataSource1(2,3,4).
Откомпилируем проект, запустим на выполнение.
Переключимся на Data Diagram, выделим таблицу SD.DB, щелчком правой кнопки на выделенной таблице вызовем Fields Editor.
В редакторе полей DataModule1.Table4 добавим поля FamM, FamP. Отредактируем их DisplayLabel на Фамилия менеджера, Фамилия покупателя. Установим в False свойства Visible полей CodMen, CodPok.
В Data Diagram с помощью кнопки LookUp установим связь между полем CodTov таблицы Сделки и CodTov таблицы Товары. Отредактируем DisplayLabel на Название Товара. Установим в False свойство Visible поля CodTov.
После установки LookUp связей растащим синие линии, отображающие связи Master - Detail и зеленые линии LookUp-ных связей.
Перетащим с левой панели на панель Data Diagram : Session, Alias, DataSource1, DataSource2, DataSource3, DataSource4.
Расположим более наглядно элементы диаграммы и связи.
Поговорим более подробно о типах связей, отраженных на диаграмме (см. ниже).
На диаграмме можно разместить и отдельные поля. Изображения связей между дочерними и родительскими блоками отображаются на диаграмме автоматически линиями со светлой стрелкой. Удалить их с диаграммы невозможно. Это первый тип связи. Таковы, например, связи между таблицами и их дочерними полями (Pok.Db и CodPok, Fam, Name, City), между Session и Alias, между Alias и таблицами.. Данный тип связи можно установить с помощью Propety.