Delphi 3 и создание приложений баз данных

Использование контейнера TDataModule


Компонент типа TDataModule представляет собой контейнер, в который вмещаются компоненты TTable, TQuery, DataSource и т.д. Создать экземпляр dataModule можно, выбрав в среде Delphi пункт меню File|NewDataModule. Компонент TDataModule похож на форму (TForm) в том отношении, что служит контейнером для иных компонентов. Однако, в отличие от TForm, в dataModule можно помещать только невизуальные компоненты для работы базами данных. Связь компонентов TDataSource, TTable и TQuery, расположенных в DataModule, производится так же, как если бы они были расположены в одной форме.

TDataModule нужно сохранить под каким-либо именем и добавить имя модуля unit, в котором описан TDataModule, в текст модулей unit всех иных рм приложения, которые будут использовать НД и TDataSource, положенные в этом TDataModule. Это производится в главном меню среды delphi, в элементе меню File|Use Unit.

В дальнейшем визуальные компоненты, работающие с данным НД, должны в своем свойстве DataSource содержать имя соответствующего компонента

TDataSource из TDataModule. При этом имя является составным: сначала идет имя компонента TDataModule и затем через точку - имя компонента TDataSource, например, DataModulel.DataSource1.

Перепишем предыдущий пример для использования механизма TDataModule. Для этого добавим в приложение компонент DataModule1 и разместим в нем компоненты Table1 (связанный с ТБД "Сотрудники кафедры") и DataSourcel (связанный с DataModulel.Table1).

Тогда в родительской форме установим свойство DBGrid1.DataSource = DataModulel .DataSourcel; в дочерней форме установим свойства DataSource всех компонентов, работающих с отдельными полями ТБД "Сотрудники кафедры" (в данном случае это компоненты TDBEdit) равными DataModulel .DataSourcel. При этом не будем забывать о заполнении свойства DataField этиx компонентов, иначе компоненты TDBEdit не будут связаны с полями. Пример компонента TDataModule с размещенными в нем компонентами TTable и TDataSource показан на рис. 8.37.

Виды родительской и дочерней форм во время разработки приложения показаны соответственно на рис. 8.38 а) и б).

Как видно из рисунков, в формах PrntForm и ChldForm напрочь отсутствуют компоненты TTable и TDataSource, связанные с ТБД "Сотрудники кафедры".

Приведем обработчики событий для обеих форм:

Родительская форма

// нажата кнопка "Вставить"

procedure TPrntForm.InsertButtonClick(Sender: TObject);

begin



DataModulel.Table1.Insert;

ChldForm.ShowModal ;

end;

// нажата кнопка "Изменить"

procedure TPrntForm.EditButtonClick(Sender: TObject);

begin

DataModulel.Table1.Edit;

ChldForm.ShowModal ;

end;

// нажата кнопка "Удалить"

procedure TPrntForm.DeleteButtonClick(Sender: TObject);

begin

IF MessageDIg('Подтвердите удаление записи',

mtInformation, [mbYes, mbNo], 0) = mrYes THEN DataModulel.Table1.Delete;

end;

Дочерняя форма

// обработчик нажатия клавиши "Запомнить"

procedure TChldForm.PostButtonClick(Sender: TObject);

begin

TRY

DataModulel.Table1.Post;

// при успешном выполнении Post выходим из модальной формы:

ChldForm.ModalResult := mrOk;

EXCEPT

on EDBEngineError do begin

ShowMessage('Дублирование ключевого поля!');

DBEdit1.SetFocus; // возвращаемся на 1 поле DBEdit

end; {on}

ELSE

begin

ShowMessage('Ошибка иного типа при Post');

DBEdit1.SetFocus;

end;

END; {try}

end;

// нажата кнопка "Отменить" (ModalResulfc = mrCancel)

procedure TChldForm.CancelButtonClick(Sender: TObject);

begin

DataModulel.Table1.Cancels;

end;



Содержание раздела