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