Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.03.2008, 22:15   #1
Ary
 
Регистрация: 12.07.2007
Сообщений: 7
По умолчанию управление транзакциями

в программе есть запрос который находится в ADOQuery. Этот запрос выполняет перенос строк из одной таблици тоесть состоит из двух команд: сначала вставки данных из одной таблици в другую, а потом удаление этой записи из первой таблици.
Подскажите:
1 как узнать что запрос был выпонен полностью, тоесть и вставка данных и их удаление.
2 как откатить назад, если например выполнилась только вставка данных, или этот механизм уже предусмотрен в данной компаненте?
Ary вне форума Ответить с цитированием
Старый 28.03.2008, 23:46   #2
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Цитата:
как узнать что запрос был выпонен полностью, тоесть и вставка данных и их удаление
Вы в хэлп не пробовали заглянуть?
Цитата:
ExecSQL returns an integer value reflecting the number of rows affected by the executed SQL statement.
Вывод - это должны быть две отдельные операции.
mihali4 вне форума Ответить с цитированием
Старый 29.03.2008, 07:10   #3
Ary
 
Регистрация: 12.07.2007
Сообщений: 7
По умолчанию

За подсказку конечно спасибо, но тем нимение необязательно хамить. К тому же вы предлагаете перед выполнением данного запроса, выполнить дополнительную проверку для того, чтобы найти количество записей удовлетворяющих запросу? Потом если данный запрос разбить на два то он не будет одной транзвкцией это точно, это будет 2 транзакции. И если один запрос пройдет а второй нет, или частично то востановить откатить все назад в ручную будет достаточно тяжело
PS на вопросы ответа не последовало.

Последний раз редактировалось Ary; 29.03.2008 в 07:43.
Ary вне форума Ответить с цитированием
Старый 29.03.2008, 12:07   #4
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Цитата:
необязательно хамить
Не соблаговолите ли пояснить? Какое из слов (словосочетаний) вас привело в ярость?
Цитата:
выполнить дополнительную проверку для того, чтобы найти количество записей
Какая дополнительная проверка? ExecSQL сам возвращает количество обработанных записей. В вашем случае - это 1 вставленная и 1 удаленная.
(Надеюсь, вы не OpenQuery используете)
mihali4 вне форума Ответить с цитированием
Старый 29.03.2008, 14:37   #5
Банзай
Пользователь
 
Аватар для Банзай
 
Регистрация: 21.08.2007
Сообщений: 89
По умолчанию

подскажите на счет транзакций.
Можно ли в одну транзакцию поместить создание нескольких таблиц, или я что-то не правильно делаю?

Код:
try
ADOConnection.BeginTrans;
//несколькими запросами создаются несколько таблиц с их атрибутами триггерами и т. д.
ADOConnection.CommitTrans;
except
//message
ADOConnection.RollbackTrans;
end;
то есть когда какой-то запрос у меня не срабатывает, то все созданные ранее таблицы все равно остаются в базе
подписываюсь
Банзай вне форума Ответить с цитированием
Старый 29.03.2008, 21:33   #6
Ary
 
Регистрация: 12.07.2007
Сообщений: 7
По умолчанию

mihali4, ваш вопрос про просмотр хелпа я расчитываю как хамство в то время как вы даже не разобрались в сути вопроса.

Банзай, Спасибо
Ary вне форума Ответить с цитированием
Старый 29.03.2008, 22:29   #7
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Цитата:
я расчитываю как хамство
Тогда уж - "расцениваю"...
Трудновато жить, наверное, с раздачей таких оценок, а ?
mihali4 вне форума Ответить с цитированием
Старый 29.03.2008, 23:14   #8
Банзай
Пользователь
 
Аватар для Банзай
 
Регистрация: 21.08.2007
Сообщений: 89
По умолчанию

2 Ary та незачто
2 Олл так как быть-то?
подписываюсь
Банзай вне форума Ответить с цитированием
Старый 29.03.2008, 23:38   #9
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Цитата:
все созданные ранее таблицы все равно остаются в базе
Да вроде криминала в вашем коде нет.
А созданные таблицы физически наличествуют в базе?
Может быть, вы их просто у себя в кэше видите?
mihali4 вне форума Ответить с цитированием
Старый 30.03.2008, 14:38   #10
Банзай
Пользователь
 
Аватар для Банзай
 
Регистрация: 21.08.2007
Сообщений: 89
По умолчанию

Цитата:
Сообщение от mihali4 Посмотреть сообщение
А созданные таблицы физически наличествуют в базе?
Может быть, вы их просто у себя в кэше видите?
та нет, только что специально ошибку в запросе сделал, они реально создаются и висят в базе и после перезапуска mysql-я. А в программе при второй попытки создать новые таблицы вылазит сообщение что такая-то таблица уже есть.
структура базы у меня примерно такая:
1 таблица список имён физических баз и их внешнее имя (типа диаграмма такая-то)
2 таблицы диаграмм
То есть создаются сначала физические таблицы потом добавляется в таблицу-список запись с общим для них префиксом в начале имени и внешним именем по которому к ним обращается сама программа. Так вот если случается сбой, то часть физических баз создается, а строка в таблицу список не заносится. То есть логика базы теряется и база становится к работе непригодной.
подписываюсь
Банзай вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Управление громкостью Jupiter Общие вопросы Delphi 2 29.06.2008 15:43
Управление голосом prizrak1390 Общие вопросы Delphi 2 24.06.2008 21:04
управление CD ROMom Cricket2007 Помощь студентам 4 16.06.2008 16:01
Управление приложениями voron29 Общие вопросы Delphi 1 14.03.2008 12:38
Управление Монитором _XspeC_ Общие вопросы Delphi 3 26.03.2007 19:28