Конференция "Базы" » Не могу перехватить исключение [D7]
 
  • ZAlex (12.09.11 11:27) [20]
    Еще раз: есть удаленная база данных (удаленная в прямом смысле - до 500 км), связь по выделенке, неустойчива. Мне нужно программно, скажем раз в 30 сек. проверять, есть ли у меня доступ к этой базе или нет, вот и все.
  • Медвежонок Пятачок © (12.09.11 11:34) [21]
    молодец. все прояснил. а то было сомнение дальше ли пятисот километров твоя база.
  • Медвежонок Пятачок © (12.09.11 11:49) [22]
    Вопрос:
    нахрена при таком канале желать иметь постоянное соединение и проверять его раз в 30 секунд?
  • Ega23 © (12.09.11 12:04) [23]

    > Мне нужно программно, скажем раз в 30 сек. проверять, есть
    > ли у меня доступ к этой базе или нет, вот и все.


    1. Таймер, в таймере создать коннект, дёрнуть запрос "select 1". Если исключение - разбираться пристальнее.
    2. Создать отдельный thread, в нём проделывать всё то же самое. в случае исключения послать мессадж основному потоку.
    Вот и всё.
  • ZAlex (12.09.11 14:16) [24]
    >Ega23
    1. Таймер, в таймере создать коннект, дёрнуть запрос "select 1".


    Так я именно так и пытаюсь. Но исключение не срабатывает, я же об этом и пишу!

    А что касается на хрена или нет, то это реальная российская действительность - плохие каналы связи и задача, поставленная руководством, которую надо выполнить, а как, их не волнует.
  • Медвежонок Пятачок © (12.09.11 14:23) [25]
    и задача, поставленная руководством,

    Они тебе так и сказали?
    Возьми адоконекшен, таймер и делай актив раз в 30 секунд?
  • Медвежонок Пятачок © (12.09.11 14:28) [26]
    ...а как, их не волнует.

    Но это же не значит, что можно использовать любой дурацкий способ решения.
    Верно?
  • И. Павел © (12.09.11 14:38) [27]
    > [24] ZAlex   (12.09.11 14:16)

    На Delphi 7 такого не встречал. На Delphi XE специально попробовал отключиться от сети - возникла обычная ошибка EOleException, которая нормально перехватывается.

    Если ADO действительно генерирует исключение, которое сам же подавляет и выводит сам же окно с ошибкой, то это же недоработка и нужно сообщить в embarcodero. Если вы перепробовали все, что вам советовали на этом форуме (и уверены, что ошибка не перехватывается, она не в другом потоке, это не окно дебагера и т.д.) - пишите в техподдержку.

    Какое окно с ошибкой вы получаете?

    В самом крайнем случае можно перехватывать момент генерирования исключения. Для этого нужно написать свой SysUtils.RaiseExceptObject.
  • Anatoly Podgoretsky © (12.09.11 14:40) [28]
    > ZAlex  (12.09.2011 14:16:24)  [24]

    Раз не волнует, то выкати ценник на 100 мб канал.
  • Ega23 © (12.09.11 15:05) [29]

    >  Но исключение не срабатывает, я же об этом и пишу!


    У меня срабатывает, уже 5 с лишним лет. Что я делаю не так?
  • sniknik © (12.09.11 15:15) [30]
    > Раз не волнует, то выкати ценник на 100 мб канал.
    самый кстати правильный вариант...

    > У меня срабатывает, уже 5 с лишним лет. Что я делаю не так?
    так ты наверное на закрытом коннекте делаешь открытие... а он на уже открытом.
    как у тебя любой дурак сможет... ;)
  • Плохиш © (12.09.11 15:27) [31]
    А почему дебилке ещë никто не сказал, что перед окончательной компиляцией программы нужно все соединения закрывать? Так и будете несуществующее потоки обсуждать..
  • Ega23 © (12.09.11 16:17) [32]

    > так ты наверное на закрытом коннекте делаешь открытие...
    >  а он на уже открытом.

    На закрытом делаю открытие, дёргаю select 1, если всё норм - disconnect, если ошибка - обрабатываю.
    А вот зачем select 1 дёргаю - не помню. Но что-то там такое было.
  • Anatoly Podgoretsky © (12.09.11 16:31) [33]
    > Ega23  (12.09.2011 16:17:32)  [32]

    Наверно потому что это самый короткий запрос. Но работает не со всеми СУБД
  • Ega23 © (12.09.11 16:55) [34]

    > Но работает не со всеми СУБД


    У нас исключительно MSSQL был, так что всё ОК.


    > Наверно потому что это самый короткий запрос


    Я вот и пытаюсь сообразить - нафига запрос нужен? по-идее достаточно Connected.
  • Anatoly Podgoretsky © (12.09.11 21:10) [35]
    > Ega23  (12.09.2011 16:55:34)  [34]

    MS SQL отличная СУБД, с широкими возможностями.
  • ZAlex (13.09.11 05:30) [36]
    Спасибо, коллеги, проблему кажется решил. Может по идее Connected и достаточно, но исключение перехватывается, толко если делаешь какой-нибудь простой select. Я поставил в try строку ADOQuery.Open и она вышла на обычный EOleException. Еще раз спасибо.
  • Anatoly Podgoretsky © (13.09.11 08:55) [37]
    > ZAlex  (13.09.2011 05:30:36)  [36]

    Так это же две разные процедуры, с разным соотношением.
    Connected обеспечивает только подключение к серверу, а Open к таблице базы.
    Сервер может работать, а база нет.
  • Inovet © (13.09.11 09:35) [38]
    > [37] Anatoly Podgoretsky ©   (13.09.11 08:55)
    > а Open к таблице базы

    А, как у Ега, SELECT 1 к какой таблице? В некоторых базах специальные таблицы для таких целей есть.
  • знайка (13.09.11 10:42) [39]
    А зачем "наружу" выстывлять базу? wcf прикрутите и дело с концом.
 
Конференция "Базы" » Не могу перехватить исключение [D7]
Есть новые Нет новых   [134465   +0][b:0][p:0.001]