|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
01.03.2012, 15:30 | #1 |
Сумрачная тень
Форумчанин
Регистрация: 05.03.2009
Сообщений: 689
|
write-транзакция в MyDAC
Как в MyDAC организовать транзакцию на несколько команд Insert?
В БД только разбираюсь, пробую так: Код:
"ковыряю изнутри" (с)
|
01.03.2012, 21:17 | #2 |
Старожил
Регистрация: 17.11.2010
Сообщений: 18,922
|
А что значит код не работает? Вываливает ошибку или все Ok, а в базе пусто? Если ошибка, то на какой команде? Кстати сам метод StartTransaction может исключение вызвать и тогда в except вызов Rollback тоже исключение поднимет со всеми вытекающими последствиями. Я к тому, что StartTransaction нужно в отдельный try ... except оформлять.
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
|
01.03.2012, 21:23 | #3 |
Сумрачная тень
Форумчанин
Регистрация: 05.03.2009
Сообщений: 689
|
Код вываливает ошибку, причем молчаливого типа. Поток создается, инициализируется, пытается выполнить функцию с этим кодом. Функцию возвращает false. Поток проверяет результат и в случае краха уничтожается с закрытием соединения и уничтожением всех своих объектов.
Поясните пожалуйста, почему StartTransaction требует отдельного контроля? И корректен ли вообще приведенный мною код?
"ковыряю изнутри" (с)
|
01.03.2012, 21:36 | #4 |
Старожил
Регистрация: 17.11.2010
Сообщений: 18,922
|
Основное назначение StartTransaction послать в СУБД соответствующую SQL-команду старта транзакции, которая по разным причинам может не выполниться. Хотя бы из-за того, что соединение разорвано. Вот и возможная причина исключения. В остальном на глаз не вижу проблем. Точно установите на какой команде проблема. Возможно причина в содержимом LsTempList. Можно показать какие там команды?
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Последний раз редактировалось Аватар; 01.03.2012 в 22:03. |
02.03.2012, 20:31 | #5 |
Сумрачная тень
Форумчанин
Регистрация: 05.03.2009
Сообщений: 689
|
В этот список помещаются запросы на выполнение. Все запросы корректы. Специально их логгировал в файл и выполнял на той же БД в навикате. Суть в том, что при комментировании этих 3х строк с StartTransaction, Commit и Rollback код работает сутками 24/7. Но дело в том что выполняется несколько инсертов в цикле в этой функции, которая считается атомарной по логике приложения. Если не выполнятся не все запросы по разным причинам, то данные в них будут потеряны. Потому и встала задача толкать список инсертов транзакцией.
Код функции записи в БД: Код:
"ковыряю изнутри" (с)
|
02.03.2012, 20:34 | #6 |
Сумрачная тень
Форумчанин
Регистрация: 05.03.2009
Сообщений: 689
|
Запросы формируются по константным маскам методом наращивания:
Код:
Что можете посоветовать? Может есть какие-то особенности по работе именно с MyDAC?
"ковыряю изнутри" (с)
Последний раз редактировалось 3D Hunter; 02.03.2012 в 20:39. |
03.03.2012, 22:26 | #7 |
Сумрачная тень
Форумчанин
Регистрация: 05.03.2009
Сообщений: 689
|
Если кто-нибудь работает с MyDAC, скажите пожалуйста, как правильно реализововать транзакцию? Возможно, через MyCommand вместо MyQuery?
"ковыряю изнутри" (с)
|
05.03.2012, 14:45 | #8 |
Сумрачная тень
Форумчанин
Регистрация: 05.03.2009
Сообщений: 689
|
Проблема решена, тема закрыта.
"ковыряю изнутри" (с)
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
MyDAC | zumm | Компоненты Delphi | 0 | 18.12.2011 15:37 |
Установка компонента MyDac | GreenShuller | БД в Delphi | 7 | 17.05.2011 13:23 |
Документация к MyDac | Detka.i.alex | Помощь студентам | 0 | 13.04.2011 20:59 |
MyDAC и FastReport | lyle_200490 | БД в Delphi | 2 | 20.11.2010 20:58 |
MyDAC | Antoha | Компоненты Delphi | 1 | 08.06.2010 14:36 |