Здесь начало решения проблемы.
Я предлагаю решить задачу общими силами, т.к. на многих форумах сталкивался с подобными.
Дано. Две связанных таблицы, связаны по ID(Autoincrement int) <- MasterID(int) (Документ и привязанные к документу товары)
Задача: добавлять документ, с привязанными к нему товарами с возможностью отмены.
Справка:
ltBatchOptimistic - режим для редактирования таблиц, который позволяет использовать UpdateBatch/CancelButch (Сохранить/Отменить изменения)
Проблема вот из-за этой
связи:
Код:
tDetail.MasterSource := dsMaster;
tDetail.MasterFields := ID;
tDetail.IndexFieldNames := MasterID;
Создаём "Шаблон документа";
Код:
tMaster.Insert;
tMaster.FieldByName('Поле №1').AsInteger := 100;
tMaster.FieldByName('Поле №2').AsString := 'В работе';
// ещё куча стандартных значений (возможно автозаполнение средствами самого сервера
tMaster.Post;
Позволяем Пользователю изменить стандартные значения шаблона.
Дальше необходимо привязать к Документу товар ещё не созданный, ибо его только привезли. Позволяем пользователю добавить новый товар:
Код:
tDetail.Insert;
// tDetail.FieldByName('MasterID').AsString := ???????
tDetail.FieldByName('Item').AsString := Edit2.Text;
// либо через привязанные DBEdit%.Text;
tDetail.Post;
Собственно проблема: что присваивать полю MasterID ??
Ведь сервер ещё даже не подозревает о новом документе, и в АвтоИнкрементируемом поле сейчас висит 0 (проверено в DebugMode).
Если не присваивать ничего, то в DBGrid2 (в котором отражаются tDetail данные) ничего не отображается, т.к. присутствует
Связь (описывалась вначале)
Решением
под вопросом является такая конструкция:
Код:
Select Ident_Current('tMaster')
Запрос возвращает текущий Номер записи, т.е. +1 к нему и подставляем в tDetail. решение попахивает костылями. (имхо)
Или мне лечиться надо?)