Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2007.09.02;
Скачать: [xml.tar.bz2];

Вниз

Случайный disconect c СУБД   Найти похожие ветки 

 
RomanH ©   (2007-05-05 11:44) [0]

День добрый, господа. Использую копмоненты доступа к СУБД FireBird, FIBPlus. При запуске приложения появляется форма регистрации пользователя, если пользователь ввел правильный пароль,по событию onButtonClick вызывается хранимая процедура, которая записывает данные в лог, и продолжаем работать. Помогите отловить событие когда приложение падет, (случайно выключили питание, или еще какое-нибудь обстоятельство), чтобы я мог вызвать хранимую процедуру которая записала бы данные о том что пользователь прекратил работу с приложением. Если тема была помещена, не в тот раздел форума, я не против того чтобы ее переместили в раздел для начинающих, господа админы :).


 
atruhin ©   (2007-05-05 12:46) [1]

> (случайно выключили питание, или еще какое-нибудь обстоятельство)
> , чтобы я мог вызвать хранимую процедуру

И как ты будешь вызывать процедуру, если у компьютера выключили питание?


 
Johnmen ©   (2007-05-05 13:03) [2]


> RomanH ©   (05.05.07 11:44) 

Никак.


 
turbouser ©   (2007-05-05 13:24) [3]


> RomanH ©   (05.05.07 11:44)

"хранимая процедура" - имеется ввиду Stored Procedure FB ?
Тогда может помочь FB 2.1 - там есть глобальные триггеры на CONNECT и DISCONNECT.
Если лог ведется на клиенте, то у TpFIBDataBase есть
свойства BeforeDisconnect, AfterDisconnect.
Как работать с дисконнектами - есть примеры на http://www.devrace.com/


 
RomanH ©   (2007-05-05 13:42) [4]

BeforeDisconnect не работает,AfterDisconnect применять нет смысла.
Что же делать.


 
Sergey Masloff   (2007-05-05 14:01) [5]

turbouser ©   (05.05.07 13:24) [3]
>случайно выключили питание
ага очень поможет


 
turbouser ©   (2007-05-05 14:16) [6]


> Sergey Masloff   (05.05.07 14:01) [5]

Не стоит зацикливаться на питании :) Приложение по разным причинам
может получить дисконнект. Проблемы с сетью например.

> RomanH ©   (05.05.07 13:42) [4]

Попробуй все-таки FB 2.1


 
atruhin ©   (2007-05-05 15:06) [7]

> Попробуй все-таки FB 2.1

Не нужно его пробовать. Он только alpha версия, глюков полно.


 
RomanH ©   (2007-05-05 16:09) [8]

2 atruhin © . Если его не пробовать может существуют другия события, которые мне нужны. Уже 2 дня мучаюсь, перепробовал все возможные события.
2turbouser ©  Спасибо за совет, ну использовать Alpha версию Boss не разрешит

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


 
turbouser ©   (2007-05-05 16:52) [9]


> RomanH ©   (05.05.07 16:09) [8]

Альтернатива - добавить еще одно звено между клиентом и FB, которое
будет отвечать за ведение лога коннектов.


 
Johnmen ©   (2007-05-05 17:51) [10]


> turbouser ©   (05.05.07 16:52) [9]
> Альтернатива - добавить
> еще одно звено между клиентом и FB, котороебудет отвечать
> за ведение лога коннектов.

Каким образом оно будет отвечать?
И как это коррелирует с сабжем?


 
turbouser ©   (2007-05-05 18:29) [11]


> Johnmen ©   (05.05.07 17:51) [10]
> Каким образом оно будет отвечать?

Как сделать - так и будет отвечать. Соорудить например сервис, который
будет выполнять редирект трафика с определенного порта на порт FB,
отслеживать активность соединения и писАть что надо в лог/выполнять ХП/что-то еще делать.
Естественно, клиентский софт должен подключаться к этому сервису.
(Можно и по другому, но, имхо так надежнее :)
Можно взять что-то готовое (zebedee к примеру) и добавить нужную
функциональность.

> И как это коррелирует с сабжем?

Автору надо выполнять хп при соединении/отсоединении.


 
Johnmen ©   (2007-05-05 18:48) [12]


> turbouser ©   (05.05.07 18:29) [11]
>> И как это коррелирует с сабжем?
>Автору надо выполнять хп при соединении/отсоединении.

И как это коррелирует с выполнением хп?

ЗЫ
А написать ещё кучу программ, которые будут и 2*2 считать и удои молока в Воронежской области, труда не представляет, и, главное, поможет....:)))


 
PEAKTOP ©   (2007-05-05 21:33) [13]

да никак ты не отловишь дисконнект.
Единственный выход - ловить коннект. То бишь, по таймеру, например, че-то пишем в базу. Если по таймеру это не происходит, то выполняем указанные тобой действия.
Хотя, Johnmen меня за этот совет побъет :)))) И, самое противное, я знаю почему.


 
DrPass ©   (2007-05-05 22:00) [14]


> да никак ты не отловишь дисконнект

Ну, не то чтобы совсем никак. Через анус все можно сделать. На ibase.ru есть утилитка ibconsvc с исходниками. Ее суть - сидеть на сервере и мониторить порт 3050, регистрируя подключения и отключения клиентов. Вот по тому же принципу можно повесить сервис, который будет ловит "отваливание" клиента от порта и делать нужные изменения в базе данных


 
sniknik ©   (2007-05-05 22:40) [15]

если поменять постановку вопроса с того как делается на зачем делается, то невозможное становится возможным...

предполагаю что делается чтото вроде мониторинга активных юзеров, типа как в 1С, есть там пункт меню нажав на который можно узнать кто подключен к базе в данный момент.
если так то это легко, не надо ловить отсоединение/выключение компа, надо подтверждать присутствие...
т.е. к примеру программа записывает в файл активных юзеров запись о себе если ее нет, и обновляет в ней время присутствия, каждую минуту например, если она уже есть. и все, если программа нормально завершается запись можно удалять, нет так и нет. а для мониторинга читать юзеров из таблички со временем обновления не более 2 мин назад. -> цель достигнута. (заодно и "бонус", можно узнать кто "отвалился" без нормального завершения)
1С кстати примерно так и делает, можно проверить, оборвать коннект с какойто машиной, а на другой мониторить пользователей, отвалится "оборванный" не сразу, только после какогото таймаута.

и никаких сервисов, или других усложнений. (если конечно я прав в чем задача, в вопросе ее нет, там неверный путь решения чегото тайного...)


 
Johnmen ©   (2007-05-06 00:09) [16]


> PEAKTOP ©   (05.05.07 21:33) [13]
> sniknik ©   (05.05.07 22:40) [15]

Не, ну конечно мониторить постоянно это не самый тяжкий криминал :)
Да вот вопрос-то в том, кто, когда и где будет мониторить, как будет "воздействовать" на сервер.
И заради чего всё это??? Особенно в свете "случайного выключения питания" :)))


 
sniknik ©   (2007-05-06 01:15) [17]

> Не, ну конечно мониторить постоянно это не самый тяжкий криминал :)
зачем постоянно? только когда нажали на кнопку "показать активных юзеров", а вот присутствие подтверждать... вот это придется постоянно с какимто интервалом. (ну да, посылка запроса на обновление одной записи не больший "грех" чем предлагаемые варианты сканирований сети)

> Да вот вопрос-то в том, кто, когда и где будет мониторить, как будет "воздействовать" на сервер.
и то и другое (подтверждение/чтение активных юзеров) делают клиенты по идее, сервер на то и сервер чтобы обрабатывать запросы клиентов. нечего на него контроль за ними возлагать.

> И заради чего всё это??? Особенно в свете "случайного выключения питания" :)))
может ты не заметил, но я изменил условие вопроса прежде чем предлагать свое решение. а в свете "случайного выключения питания" выполнять чтото на выключенной машине.... ??? ну я как бы и не предлагал.

1С есть? пункт меню "сервис"->"монитор пользователей"->"активные пользователи"
нажми. вот это я предлагал. но только в том случае если [0] попытка сделать подобное, если его "событие на выключение питания" есть попытка "в лоб" - включили пишем, выключается удаляем, решить подобное.
а "за ради чего" это... ну не знаю, в 1С сделали, наверно посчитали нужным. почему другим не нужно?


 
Johnmen ©   (2007-05-06 01:40) [18]


> и то и другое (подтверждение/чтение активных юзеров) делают
> клиенты по идее, сервер на то и сервер чтобы обрабатывать
> запросы клиентов. нечего на него контроль за ними возлагать.

Клиент же упал! А ХП сервер выполняет.
Или ты предлагаешь перейти на обсуждение совершенно иного вопроса, вместо как обсуждать зачем? Так это неинтересно...


 
Johnmen ©   (2007-05-06 01:42) [19]

Впрочем, и как тоже неинтересно...
Ибо глупости это, барин (с)


 
sniknik ©   (2007-05-06 01:57) [20]

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

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

если угадал замечательно, нет... ну не оченьто и хотелось. но может ктото прочитает и поймет насколько важна постановка вопроса (от категоричного нельзя до легко, зависящим от небольшой коректировки), и станет описывать и что делается и зачем, а уж как делать будет спрашивать. а не наоборот. (хотя верится в это с трудом :)


 
Германн ©   (2007-05-06 02:04) [21]

Да. :(
Читая сей топик понял, что похоже второй пункт из просьб "начальника" приведёт меня к геморрою :(
http://delphimaster.net/view/3-1178140671/


 
Megabyte ©   (2007-05-07 11:38) [22]

Дабы не плодить тему. Есть программа, которая делает действия по таймеру: показывает данные на диаграмме, обновляясь раз в 10мин.
Бывает так, что проблемы с сетью. Соответствено программа при очередном обновлении выдает ошибку и зависает. Требуется, чтобы программа, если не получилось обновиться, просто попробовала сделать это на следующей итерации Таймера.
"Обрыв" соединения вроде как отлавливаю в компоненте TpFIBDatabase в событии OnLostConnect.
Только непонятны дальнейшие действия. Если в обработчике события пытаюсь провести какие-то действия(допустим, временное отключение компонентов соединения от БД), а потом имитирую отключение от сети(кабель вытаскиваю), то программа просто закрывается. Если запускать из под отладчика, то выдает ошибку "EStackOverflow".
Честно говоря, мне не понятно, почему это происходит.
Код в обработчике события простейший:
procedure Tfrm_main.fdb_viewLostConnect(Database: TFIBDatabase;
 E: EFIBError; var Actions: TOnLostConnectActions);
begin
 frm_main.fdb_view.Close; //закрытие коннекта к компоненте
end;

Кто-нибудь что подскажет. Почему так происходит и как решить задачу.


 
atruhin ©   (2007-05-07 15:28) [23]

> то программа просто закрывается.

Значит где то "глушишь" исключение, т.е. пустой Except end;

> Код в обработчике события простейший:

Зачем что то закрывать, оно уже закрыто. Вообще эти ситуации хорошо описаны в книжке "Мир интербэйс"
В сети есть в электронном видее.


 
Megabyte ©   (2007-05-07 17:38) [24]


>atruhin ©  (07.05.07 15:28) [23]

> то программа просто закрывается.

1)Значит где то "глушишь" исключение, т.е. пустой Except end;

> Код в обработчике события простейший:

2)Зачем что то закрывать, оно уже закрыто. Вообще эти ситуации хорошо описаны в книжке "Мир интербэйс"
В сети есть в электронном видее.

1) Нет, это не так.
2) Забей, любая команда. Такое ощущение, что событие(OnLostConnect) возникает постоянно и получается какое-то переполнение стека. В обычном режиме программа просто закрывается, в отладчике показывает соответствующую ошибку.

з.ы. Я понимаю, что малоинформативно, но больше добавить нечего :(



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2007.09.02;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.56 MB
Время: 0.049 c
2-1186654390
gentos
2007-08-09 14:13
2007.09.02
передача с одной форму в другую TMemoryStream


2-1186734728
SLesya
2007-08-10 12:32
2007.09.02
наследование форм (bpl)


1-1182725258
ssa
2007-06-25 02:47
2007.09.02
Как заменить выделенный текст в memo?


2-1186721351
Tomy Versety
2007-08-10 08:49
2007.09.02
Руководство по пользованию


5-1160461319
Priest
2006-10-10 10:21
2007.09.02
Функция UnRegister для пакета





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский