Определить пользовательский метод POST для MyDAC - PullRequest
2 голосов
/ 10 декабря 2011

У меня есть три таблицы objects, (первичный ключ object_ID) flags (первичный ключ flag_ID) и object_flags (перекрестная таблица между objects и flags с некоторой дополнительной информацией).

У меня есть запрос, возвращающий все флаги, и один или ноль, если у данного объекта есть определенный флаг:

SELECT
  f.*,
  of.*,
  of.objectID IS NOT NULL AS object_has_flag,
FROM
  flags f
  LEFT JOIN object_flags of
    ON (f.flag_ID = of.flag_ID) AND (of.object_ID = :objectID);

В приложении (которое написано в Delphi) все строкизагружаются в компонент.Пользователь может назначать флаги, устанавливая флажки в таблице, изменяя данные.

Предположим, что отредактирована одна строка.В зависимости от значения object_has_flag необходимо выполнить следующие действия:

  • Если object_has_flag был true и все еще равен true, UPDATE следует выполнить для соответствующей строки в objects_flags.
  • Если object_has_flag был ложным, но теперь имеет значение true, и INSERT должен быть выполненбыть сделано в одном запросе https://stackoverflow.com/questions/7927114/conditional-replace-or-delete-in-one-query.

    Я использую TMyQuery MyDAC в качестве набора данных.Я написал отдельный код, который выполняет необходимые запросы для сохранения изменений в строке, но как мне связать это с набором данных?Какой обработчик событий мне следует использовать, и как мне сообщить TMyQuery, что он должен обновляться вместо публикации?

    РЕДАКТИРОВАТЬ: очевидно, не совсем понятно, в чем проблема.Стандартные UpdateSQL, DeleteSQL и InsertSQL не могут быть использованы, потому что иногда после редактирования строки (без ее удаления или вставки строки) необходимо сделать INSERT или DELETE.

Ответы [ 2 ]

0 голосов
/ 18 февраля 2012

Кажется, что самый простой способ - использовать событие BeforePost и определить, что нужно сделать, используя свойства OldValue и NewValue нескольких полей.

0 голосов
/ 15 декабря 2011

Краткий ответ: перефразировать ваш ответ здесь :

  • Просмотрите документацию «Обновление данных с помощью компонентов набора данных MyDAC» (начиная с MyDAC 5.80).

Каждый TCustomDADataSet (например, TMyQuery) имеет возможность устанавливать обновления SQL-операторов, используя SQLInsert , SQLUpdate и SQLDelete .

TMyUpdateSQL также является многообещающим компонентом для пользовательских операций обновления.

...