Очень хочется разобраться до конца.
На главной форме:
Код:
procedure TfMain.barbutNewTicketClick(Sender: TObject);
begin
Tickets.Insert;
end;
Вызывать Диалог, в котором будут редактироваться данные нужно в AfterInsert?
Код:
procedure TfMain.TicketsAfterInsert(DataSet: TDataSet);
begin
fNewTicket.ShowModal;
end;
Открывается форма. На ней cxGrid в котором отображаются данные из подчинённой таблицы и куча DB компонент, которые связанны с fMain.Tickets (
этого тоже не должно быть?). Три кнопки "Добавить Сохранить Отмена", которые относятся к Данным из Detail-таблицы (для неё дополнительный диалог я реализовывать не стал... не за чем)
ADOTable который содержит в себе информацию из Detail таблицы я перенёс на форму диалога. (по-моему это неправильно) Но если оставить её на FormMain то получится, что мне нужно будет вызывать Insert Post Cancel для этой таблицы из диалогового окна. (Как правильно?)
Далее как вы и посоветовали: Cancel & Ok;
OK:
Код:
procedure TfNewTicket.butSaveClick(Sender: TObject);
begin
fMain.Tickets.Post;
end;
Опять управление из Диалоговой формы. Далее идёт BeforePost, в которой куча всевозможных проверок данных и несколько машинных пересчётов.
Далее AfterPost
Код:
procedure TfMain.TicketsAfterPost(DataSet: TDataSet);
begin
Tickets.UpdateBatch;
Items.First;
while not Items.Eof do
begin
Items.Edit;
Items.FieldByName('IDTicket').AsInteger := Tickets.FieldByName('ID')
.AsInteger;
Items.Next;
end;
Items.UpdateBatch;
end;
Я слабо, очень слабо представляю как избавиться от глобальной переменной fMain в коде из Формы-Диалога.
Про индекс F, я помню Просто важнее сейчас исправить основные ошибки.