Каков предпочтительный способ написания приложений баз данных Delphi с использованием транзакций, а также компонентов, учитывающих данные?
Мне нужно написать клиентское приложение, которое обращается к таблицам InnoDB, и делать некоторые детали типа master-detail внутрисделки.Проведя некоторое исследование транзакций (с общей точки зрения), я скромно делаю вывод, что компоненты, не учитывающие данные, и код SQL, написанный вручную, будут «идеальным соответствием» транзакций;Но компоненты, учитывающие данные, не будут.Похоже, они не созданы друг для друга.
У меня есть реальная необходимость использовать транзакции, но, с другой стороны, я не мог просто выбросить компоненты, учитывающие данные, потому что они значительно упрощают вещи.
Может ли кто-нибудь просветить меня?Я гуглил это, но я не нашел никакого полезного ответа.Возможно, потому что мой английский недостаточно хорош, чтобы мои ключевые слова были ограничены.
Кстати, я использую Delphi 7 и в настоящее время оцениваю UniDAC в качестве библиотеки доступа к данным.
Спасибо.
РЕДАКТИРОВАТЬ
Пример для описания аспекта моего вопроса:
Представьте форму с 2 DBGrids наЭто.Первая сетка - это MasterGrid, а над ней находятся следующие кнопки: Add, Edit & Delete.Вторая сетка - это DetailGrid.Если пользователь нажимает кнопку «Добавить», он выглядит следующим образом:
- Connection.StartTransaction
- Master.Append, затем Master.Post, затем Master.Edit (поэтому набор основных данных имеет первичный автоинкрементключ, и теперь он доступен для редактирования)
- Показать форму редактирования модально, в которой пользователь заполняет основные записи, а также добавить некоторые подробные записи, используя другую форму.
- Если пользователь нажимает кнопку ОК, приложение будет делать Master.Post и Connection.Commit.Если пользователь нажмет «Отмена», приложение выполнит Connection.Rollback.
Я знаю, что транзакции должны быть максимально короткими, но вы можете видеть выше, что транзакция настолько коротка, насколько скоростьпользователя, заполнившего форму.
Если бы я использовал компоненты, не поддерживающие данные, я бы сделал пользовательские вставки SQL на основе пользовательского ввода, а затем выполнил бы SQL между StartTransaction и Commit.Таким образом, я могу достичь очень короткой транзакции.
РЕДАКТИРОВАТЬ 2
Я благодарю всех вас за ваше любезное участие.Я выбираю ответ от vcldeveloper, потому что это наиболее близкое решение для моей текущей потребности.