Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Log, debug или что-то вроде этого? [D7]


Lavrenty ©   (2007-05-17 21:38:00) 

Здравствуйте мастера!
Программа работает с базой InterBase. Есть запросы, в соответствие которым назначены транзакции. Минут через 20-30-40 после запуска программы выскакивает сообщение "Transaction is active", и продолжает появляться через каждый период обращения к базе(10 сек). Так вот, я не пойму(из этого краткого сообщения) на какой транзакции это начинается и почему. Подскажите пожалуйста, как можно сделать так, чтобы все события, происходящие в программе записывались в текстовый файл, а то никак не могу понять в каком месте программа глючит ?


Sergey13   (2007-05-18 13:22:00) [1]

Одна транзакция всегда надежнее. 8-)


Desdechado   (2007-05-18 13:20:00) [2]

Не знаю, как в современных IB, а в версиях до 6 включительно клиентская библиотека НЕ thread-safe, поэтому не должно быть одновременно выполняющихся запросов в рамках одного подключения к БД. Например, несколько потоков одновременно (каждый в своей транзакции) долбится в БД - гарантировано вылетит.


Lavrenty   (2007-05-17 23:53:00) [3]

Что ж, спасибо! Буду ковырять.


Johnmen   (2007-05-17 23:40:00) [4]

В общем, надо ковырять код на предмет старта транзакции, когда она ещё не подтверждена/откачена(откатана? :)) о чем и говорит "Transaction is active".


Lavrenty   (2007-05-17 23:27:00) [5]

Извиняюсь, их было не 3, а 5. Дело в том, что программа была написана не мной, но мне приходится её запускать в жизнь. Так как с InterBase не работал раньше, то не обратил внимания, вернее не знал, что это важно

> Причём одна - читающая, вторая - пишущая. И м.б. третья
> - для отчетов.

посмотрел сейчас код повнимательнее, но что-то не видно строгого соблюдения этого правила(когда было 5 транзакций): читающие запросы со своей  транзакцией, пишущие со своей. Но, если то сообщение выскакивало именно из-за этого, то почему сейчас тоже происходит, ведь у каждого запроса своя транзакция. Отчёт не формируется, результат пишется в XML-файл.


Johnmen   (2007-05-17 23:08:00) [6]

Причём одна - читающая, вторая - пишущая. И м.б. третья - для отчетов.


Lavrenty   (2007-05-17 22:50:00) [7]

Было именно 3. Было тоже самое.


Johnmen   (2007-05-17 22:48:00) [8]

Тут надо код смотреть...
ЗЫ
Количество транзакций на приложение более 3 нецелесообразно. А иногда и вредно...


Lavrenty   (2007-05-17 22:31:00) [9]


> Много параллельных транзакций?

По ходу программы одновременно работающих транзакций 2-3. Вообще их 15 штук. Каждому запросу соответствует одна транзакция. Если закрывается запрос(набор данных) тут же закрываю и транзакцию ("Commit"). Но, судя по сообщению, выходит, что программа пытается совершить какое-то действие с данными, для которых транзакция ещё не завершилась. Самое интересное, что цикл обращений к базе (и соответсвенно выполняемых всех запросов) очень маленький - 6 сек. И вот всё это работает, работает и вдруг на тебе - "Transaction is active".


Johnmen   (2007-05-17 22:08:00) [10]

Много параллельных транзакций?
Несколько потоков?


Наверх

Титульная страница Поиск, карта сайта Написать письмо