Есть ли в Delphi какой-нибудь способ кэшировать строки master-detail и одновременно размещать как master, так и detail дочерние строки

Я хочу публиковать в памяти некоторые дочерние строки, а затем публиковать их условно или не публиковать их в базовой базе данных SQL, в зависимости от того, отправлена ​​родительская строка или нет. опубликовано. Мне не нужен полный ORM, но может быть только это:

  1. Пользователь нажимает Добавить врача. Откроется диалоговое окно добавления врача.
  2. Прежде чем нажать «ОК» в разделе «Добавить врача», в диалоговом окне «Добавить врача» пользователь добавляет одного или нескольких пациентов, которые сохраняются только в памяти.
  3. Пользователь нажимает «ОК» в окне «Добавить врача». Теперь все пациенты сохранены, плюс новый доктор.
  4. Если пользователь нажал кнопку «Отмена» в окне врача, вся информация о враче и пациенте будет удалена.

Попробуйте, если хотите, мысленно представить, как вы могли бы сделать это, используя элементы управления Delphi с поддержкой данных, TADOQuery или другие объекты ADO. Если есть способ сделать это, не относящийся к ADO, меня это тоже интересует, я просто выбрасываю ADO, потому что я использую MS-SQL Server и ADO в своих текущих приложениях.

Итак, у предыдущих работодателей, где я работал недолго, был класс под названием TMasterDetail, который был специально написан для добавления вышеуказанного в наборы записей ADO. Иногда это работало, а иногда давало сбои некоторыми действительно интересными и трудными для исправления способами.

Есть ли что-нибудь встроенное в VCL или какой-либо сторонний компонент, который имеет надежный способ реализации этой техники? Если нет, то то, о чем я говорю выше, требует ORM? Я думал, что многие люди считают ORM «плохими», но приведенное выше — довольно естественный шаблон пользовательского интерфейса, который может встречаться в миллионе приложений. Если бы я использовал стиль работы не-ADO, не-Delphi-db-dataset, вышеизложенное не было бы проблемой почти на любом слое персистентности, который я мог бы написать, и тем не менее, когда базы данных с первичными ключами, которые используют значения идентификаторов для связывания основные и детальные строки попадают в картину, все усложняется.

Обновление:Транзакции вряд ли идеальны в этом случае. (Коммит/откат — слишком грубый механизм для моих целей.)

8
задан Warren P 9 June 2012 в 02:14
поделиться