Совет: как "правильно" проверять коннект к БД от к

ЧАстые Вопросы и Ответы

Модераторы: kdv, CyberMax

Ответить
andycat
Сообщения: 65
Зарегистрирован: 22 фев 2005, 12:06

Совет: как "правильно" проверять коннект к БД от к

Сообщение andycat » 02 ноя 2006, 16:47

Приветствую!

как более правильно в клиентском приложении (Delphi 7) проверять коннект к БД для того что бы например при отвале связи приложение в exception не падало? я периодически использую два варианта:

1. try... except в IBQuery.open
2. IbDatabase.connected

поделитесь плиз опытом кто как делает?

CyberMax
Заслуженный разработчик
Сообщения: 638
Зарегистрирован: 31 янв 2006, 09:05

Сообщение CyberMax » 03 ноя 2006, 11:04

В IBX нет полноценной реализации обработки потери соединения. В FIB+ она сделана через компоненту базы данных. То есть при потере соединения возникает соответствующее событие у TpFIBDatabase, а программист уже задает реакцию: закрыть приложение, закрыть коннект, игнорировать либо ждать восстановления).

andycat
Сообщения: 65
Зарегистрирован: 22 фев 2005, 12:06

Сообщение andycat » 03 ноя 2006, 12:27

тогда подскажите плиз как более грамотно сделать эту обработку разрыва соединения в IBX?

ud
Сообщения: 9
Зарегистрирован: 01 сен 2006, 11:15

Сообщение ud » 04 ноя 2006, 11:11

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

stix-s
Заслуженный разработчик
Сообщения: 557
Зарегистрирован: 13 дек 2005, 11:52

Сообщение stix-s » 04 ноя 2006, 12:27

ud писал(а): лучше не держать открытое соединение постоянно.
запустил приложение - записал логин и пароль в переменные и подключаешься когда необходимо ;)
Ага, при выполнении каждого запроса подчепляться?
неееее, отвергаю :)
я уж лучше перед выполнением запроса проверять IbDatabase.connected буду :) или обработчик на Application.onIdle приложения напишу :)
и на кой вообще это записывать, ежели это в параметрах IbDatabase
лежит? :)

CyberMax
Заслуженный разработчик
Сообщения: 638
Зарегистрирован: 31 янв 2006, 09:05

Сообщение CyberMax » 04 ноя 2006, 15:40

Дело в том, что постоянно делать try...except и проверять на Connected - пустая трата сил и кода. Лучше уж в Application.OnException повесить обработку исключения потери соединения и закрывать приложение. Большего на IBX сделать не получится.
P.S. Можно операторам рассказать про Ctrl-Alt-Delete и "Снять задачу"...

Кузнецов Евгений
Сообщения: 144
Зарегистрирован: 16 фев 2006, 22:36

Сообщение Кузнецов Евгений » 15 ноя 2006, 18:57

Добрый день!

Недавно в конференции Google давали ссылку на модификацию IBX 6.08
Олега Пащенко (http://www.ov-soft.com ), которая позволяет корректно обрабатывать
потерю соединения. Испытал в домашних условиях - да, действительно, приложение в этом случае закрыть можно

Делалось следующее:
1) на FB 1.5.3 Classic вручную убивался процесс - в
этом случае есть небольшая утечка памяти, но и она исправима.

2) Дома установлен особенный Firewall, который аккуратно и молчаливо режет коннекты c localhost ~ через 20 минут - в этом случае утечек памяти не было.

Вдобавок в компонентах добавлена еще одна вкусность (еще не пробовал) - отдельная пишущая транзакция для datasets.

Думаю, Вы можете попробовать посмотреть компоненты и применить исправления к Вашему IBX

stix-s
Заслуженный разработчик
Сообщения: 557
Зарегистрирован: 13 дек 2005, 11:52

Сообщение stix-s » 16 ноя 2006, 06:01

Кузнецов Евгений писал(а):Добрый день!

Недавно в конференции Google давали ссылку на модификацию IBX 6.08
Олега Пащенко (http://www.ov-soft.com ), которая позволяет корректно обрабатывать
потерю соединения. Испытал в домашних условиях - да, действительно, приложение в этом случае закрыть можно

Делалось следующее:
1) на FB 1.5.3 Classic вручную убивался процесс - в
этом случае есть небольшая утечка памяти, но и она исправима.

2) Дома установлен особенный Firewall, который аккуратно и молчаливо режет коннекты c localhost ~ через 20 минут - в этом случае утечек памяти не было.

Вдобавок в компонентах добавлена еще одна вкусность (еще не пробовал) - отдельная пишущая транзакция для datasets.

Думаю, Вы можете попробовать посмотреть компоненты и применить исправления к Вашему IBX
Все это давным-давно есть в FIB+, впрочем, кому что нравится.

Ответить