13. Подчиненные формы
Подчиненные формы не являются самостоятельными компонентами и всегда создаются вместе с родительской формой. Они являются частью механизма формы. Они также могут иметь свой модуль. Модуль подчиненной формы не может существовать без модуля родительской формы. И если при добавлении модуля подчиненной формы, модуля родительской формы нет, то он создается автоматически.
Подчиненные формы того же типа, что и родительские, т. е. TdxForm. Обратиться к подчиненной форме из родительской можно либо по имени компонента формы, либо по ее имени через свойство Forms:
procedure AppendBnClick(Sender: TObject); begin if (Self.State <> dsInsert) and (Self.State <> dsEdit) and (Self.Edit = asOk) then with Self.Forms['товары'] do begin Append; Fields['Количество'] := 1; if EditWindow.ShowModal = mrOk then Post else Cancel; end; end;
Обратите внимание на первую строчку в обработчике If …
. Родительская форма должна находиться в состоянии изменения записи, если в подчиненных формах происходит манипулирование записями. В противном случае вы не сможете добавить запись (Append вернет asCantAppend). Изменения в подчиненных формах не сразу попадают в базу, а только после того как сохранится родительская запись.
У подчиненных форм есть некоторые ограничения на вызов методов. Нельзя вызывать следующие методы: Open, OpenRecord, OpenRecords, Close, Print. Вызов этих методов будет приводить к ошибке.