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

         

Создание отдельной формы


Этот пример аналогичен приведенному в разделе "Создание отдельной формы для изменения записи ПД. Форма добавления 1корректировки записи с использованием механизма совмещения курсоров ".

Отличия в реализации следующие. Во-первых, НД переводится в состояние Insert или Edit в родительской форме. Во-вторых, в дочерней форме доступ к НД осуществляется переадресацией DataSource во время выполнения.

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

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

procedure TPrntForm.InsertButtonClick(Sender: TObject);

begin

PrntForm.Table1.Insert;

ChldForm.ShowModal;

end;

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

procedure TPrntForm.EditButtonClick(Sender: TObject);

begin

PrntForm.Table1.Edit;

ChldForm.ShowModal;

end;

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



procedure TPrntForm.DeleteButtonClick(Sender: TObject);

begin

IF MessageDIg('Подтвердите удаление записи', mtlnformation, [mbYes, mbNo], 0) = mrYes THEN PrntForm.Table1.Delete;

end;

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

// обработчик активизации дочерней формы

procedure TChldForm.FormActivate(Sender: TObject);

begin

// при активизации дочерней формы ее DataSource указывает на НД из родительской формы

ChldForm.DataSourcel.DataSet := PrntForm.Table1;

end;

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

procedure TChldForm.PostButtonClick(Sender: TObject);

begin

TRY

PrntForm.Table1.Post;

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

ChldForm.ModalResult := mrOk;

EXCEPT

on EDBEngineError do begin

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

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

end; {on}

ELSE

begin

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

DBEditI.SetFocus;

end;

END; {try}

end;

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

procedure TChldForm.CancelButtonClick(Sender: TObject);

begin

PrntForm.Table1.Cancel;

end; ,

// обработчик события деактивизации дочерней формы DataSource дочерней формы указывает в "пустоту";

// принудительный перевод НД в состояние Browse, если на момент выхода из дочерней формы НД находится

// в ином состоянии

procedure TChldForm.FormDeactivate(Sender: TObject);

begin

ChldForm.DataSourcel.DataSet := nil;

IF PrntForm.Table1.State <> dsBrowse THEN

PrntForm.Table1.Cancel;

end;

// обработчик события создания формы

procedure TChldForm.FormCreate(Sender: TObject);

begin

// DataSource дочерней формы изначально указывает в "пустоту"

ChldForm.DataSourcel.DataSet := nil;

end;



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