У меня есть приложение в PowerBuilder, и многие пользователи не используют его часами. Иногда операцию забывают зафиксировать; поэтому некоторые таблицы остаются заблокированными на неопределенный срок, что мешает всем работать. Я попытался поставить все коммиты на место, но отладить это в таком большом приложении очень сложно. Я хотел бы отключить соединение с базой данных, когда приложение простаивает. Это несложно, но моя проблема в том, что при прикосновении к мыши или клавиатуре приложению необходимо повторно открыть соединение. Как я могу это сделать? Недопустимо закрывать приложение каждый раз, когда оно простаивает.
PowerBuilder: отключить базу данных при простое
Ответы (2)
Прежде всего, я бы рекомендовал вам не выбирать легкий путь и приступить к закрытию всех этих транзакций. Если у вас есть что-то незафиксированное, кроме проблемы с блокировкой, вы понятия не имеете, будет ли следующий оператор, который случайно будет выполнен, будет COMMIT или ROLLBACK, и какой из них сейчас необходим. По моему опыту, такое расследование всегда выявляет другие проблемы, связанные с транзакцией. Эта проблема, вероятно, больше, чем замки.
Что касается повторного подключения, если вы идете по этому пути (очевидно, это не мой первый выбор), я бы порекомендовал альтернативный вариант: ПОДКЛЮЧИТЬСЯ, когда вам нужно подключение в следующий раз. По сути (если вы собираетесь инкапсулировать код внутри функции в объекте транзакции):
IF DBHandle() = 0 THEN CONNECT using THIS;
Если у вас есть такая среда, как PFC, то, скорее всего, у вас будет всего несколько мест для кода. Если у вас нет фреймворка, который инкапсулирует такие части работы, как извлечение и обновление, то вы наверняка пожалеете об этом. Тем не менее, это может быть лучше, чем снижать производительность, проверяя соединение с базой данных при каждом нажатии клавиши и движении мыши.
Удачи,
Терри.
Захватите движение мыши и ключевые события. Когда один из этих пожаров, выполните CONNECT; утверждение.
Видеть:
http://infocenter.sybase.com/help/index.jsp?topic=/com.sybase.dc37781_1150/html/psref/BFCCFFGH.htm