Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Базы данных
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 20.09.2013, 02:00
Аватар для Uniq!
Uniq! Uniq! вне форума
Местный
 
Регистрация: 29.09.2010
Сообщения: 539
Версия Delphi: Delphi XE3
Репутация: 374
По умолчанию Master Detail ltBatchOptimistic AutoInc

Здесь начало решения проблемы.

Я предлагаю решить задачу общими силами, т.к. на многих форумах сталкивался с подобными.

Дано. Две связанных таблицы, связаны по 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. решение попахивает костылями. (имхо) Или мне лечиться надо?)

Последний раз редактировалось Uniq!, 20.09.2013 в 02:15.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

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

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 11:48.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter