powered by simpleCommunicator - 2.0.50     © 2025 Programmizd 02
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Проверка или в данный момент происходит Retrieve
13 сообщений из 13, страница 1 из 1
Проверка или в данный момент происходит Retrieve
    #32451962
Komputilisto
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Проблема следующая. Событие Idle аппликации совершает disconnect от базы данных если 20 минут аппликацию не тревожили. Однако может быть, что в момент отключения работает очень тяжёлый retrieve, длящийся более 20 минут. Как можно проверить перед дисконнектом, "занята" ли в данный момент SQLCA извлечением данных, чтоб не обрубить его на полуслове? Огромное спасибо.
...
Рейтинг: 0 / 0
Проверка или в данный момент происходит Retrieve
    #32451998
Hogord
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Простота залог успеха можно просто смотреть ответ от retrieve )) если он есть
или его еще нет
...
Рейтинг: 0 / 0
Проверка или в данный момент происходит Retrieve
    #32452005
Фотография Филипп
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Проблему нужно расчленить :-)
авторочень тяжёлый retrieve, длящийся более 20 минут нужно запихать в отдельный thread (SharedObjectRegister, etc.). Сделать notification object, через который этот thread будет общаться с основным threadом приложения и сообщать о том, что Retrieve завершён. Событие Idle аппликации в свою очередь должно опрашивать или этот notification object, или какую-нить глобальную переменную на предмет можно ли дисконнектится...
...
Рейтинг: 0 / 0
Проверка или в данный момент происходит Retrieve
    #32452062
andy753
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поставить флаг перед выполнением ретрива и сбрасывать его после. Некий аналог семафора. Флаг может быть переменной глобальной либо на коннекте (если их несколько разных). Правда, это удобно, когда у вас есть общий предок у всех DW-DS.
...
Рейтинг: 0 / 0
Проверка или в данный момент происходит Retrieve
    #32452222
Ermak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Филипп абсолютно прав.

"тяжёлый retrieve, длящийся более 20 минут", следует выносить в отдельный поток, дабы не мешать пользователю выполнять текущую работу, в том числе и с использование БД. Кстати при этом для подключения к БД вы не сможите использовать SQLCA. Так что в этот момент можите спокойно выполнить:
Код: plaintext
DISCONNECT USING SQLCA;


А вот при закрытии приложения вам действительно потребуется выполнить соответствующие проверки, на предмет выполнения "тяжелого retrieve", в отдельном потоке.
...
Рейтинг: 0 / 0
Проверка или в данный момент происходит Retrieve
    #32456673
Komputilisto
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дело в том, что я должен изменить объект Аппликейшн в приложении, где уже есть куча окон, т.е. обход и изменение существующих объектов - не решение (да и неизвестно, где ритрив длинный, а где нет [некоторые замедлились со временем из-за роста к-ва данных], да и новые окан будут создаваться - пойди упомни, что надо сделать). Решение от меня требуют по принципу "сделал и забыл". Но всё равно спасибо за ответы, товарищи девелоперы!
...
Рейтинг: 0 / 0
Проверка или в данный момент происходит Retrieve
    #32456715
Фотография Ikar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Komputilisto:
Возможно я не прав, но мне кажется, что вам поможет запрос количества открытых транзакций. Если есть открытые транзакции, значит что то работает. Ели нет, то можно рвать связь. Правда, я не уверен, что DW при ретриве делает сначала begin tran а потом commit , но это можно проверить.

Еще раз сорри, если я не прав и ввожу Вас в заблуждение.
Удачи!
---
С уважением, IKAR
ikarhomecenter@narod.ru
IkarHomeCenter
...
Рейтинг: 0 / 0
Проверка или в данный момент происходит Retrieve
    #32457617
Фотография Филипп
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Навскидку, то что предлагает IKAR не поможет.

Если у вас есть общий предок для datawindows, есть общий предок для datastores, то тогда у вас есть шанс на "сделал и забыл".
Делаете глобальную boolean gb_retrieveinprogress .
В предке(ах) в retrievestart пишете
Код: plaintext
gb_retrieveinprogress = TRUE
, в предке(ах) в retrievend пишете
Код: plaintext
gb_retrieveinprogress = FALSE
.
В событии Idle аппликации проверяете gb_retrieveinprogress...
...
Рейтинг: 0 / 0
Проверка или в данный момент происходит Retrieve
    #32459764
Komputilisto
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо, ребята, но проблема в том, что во многих потомках события RetrieveStart и RetrieveEnd оверрайднуты, из-за чего и возник вопрос можно ли проверить выполняетсая ли Retrieve в данное мгновенье. Поверьте, решение с флагом столь тривиально, что я бы не стал задавать на форуме такой простой вопрос.
...
Рейтинг: 0 / 0
Проверка или в данный момент происходит Retrieve
    #32460611
guest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну если в край, выполни по SQLCA SQL запрос и посмотри на код ошибки.
Если коннект активен, то код своеобразен, можно понять, что идет
основной запрос.
...
Рейтинг: 0 / 0
Проверка или в данный момент происходит Retrieve
    #32461415
Фотография Филипп
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторЕсли коннект активен, то код своеобразен, да уж, в зависимости от БД (например Oracle 8+/native drivers) своеобразность превращается в GPF :-)
...
Рейтинг: 0 / 0
Проверка или в данный момент происходит Retrieve
    #32464343
Komputilisto
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я исследовал проблему и выяснил, что её просто нет. Отсчёт секунд до запуска события Idle начинается после последней активности, причём активность - это не только нажатие клавиши или сдвиг мыши, но и retrieve. Морочат голову мне, а я вам...
...
Рейтинг: 0 / 0
Проверка или в данный момент происходит Retrieve
    #32464367
Фотография Ikar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Komputilisto: Поздравляю с "самоликвидацией" проблемы! Кстати говоря, спасибо что сказали об этом - будем знать на будущее, а то мало ли где столкнуться придется...

Удачи!
---
С уважением, IKAR
ikarhomecenter@narod.ru
IkarHomeCenter
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Проверка или в данный момент происходит Retrieve
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]