powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Проверка обращения к БД
15 сообщений из 15, страница 1 из 1
Проверка обращения к БД
    #37053922
царевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Имеется приложение с mdi интерфейсом на PB 10.5.БД оракл. В главном онке выполняется событие timer раз в минуту, в нем происходит выборка кое-каких данных из БД. Часть справочников программы выводят данные в dw какоето время(до 7 сек). И если одноврменно происходит вывод данных справочника и событие таймер то возникает ошибка Only the cancel command is allowed when the rows are pending. Вопросы:
1. могу ли я как то проверить в событии timer, что сейчас БД занята и не запускать выборку данных в этом собитии? Может чтото есть кроме установки глобалных флагов в событиях dw retrievestart,retrieveend.
2. В событии timer,после того как я определил что БД занята, мне нужно выполнить это собитие как только БД освободиться, а не ждать следующего выполнения timer по графику.Как лучше это сделать?
спасибо
...
Рейтинг: 0 / 0
Проверка обращения к БД
    #37053939
tru55
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А что означает "БД занята"?
...
Рейтинг: 0 / 0
Проверка обращения к БД
    #37053946
царевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
заначит что сейчас она выполняет запрос для этого коннекта
...
Рейтинг: 0 / 0
Проверка обращения к БД
    #37053969
tru55
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если клиент послал запрос на выполнение, то он не сможет послать новый запрос, пока предыдущий не выполнится
...
Рейтинг: 0 / 0
Проверка обращения к БД
    #37054011
царевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А так и понял. А есть варианты проверки на выполнение запроса в текущ момент?
...
Рейтинг: 0 / 0
Проверка обращения к БД
    #37054114
_Drive_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Можно "запустить" новый thread (см. SharedObjectRegister, SharedObjectGet) в который передать ID основного коннекта, создать новый коннект и по таймеру проверять что происходит в "основном" коннекте ... и делать выводы.
...
Рейтинг: 0 / 0
Проверка обращения к БД
    #37054152
царевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Тогда я могу просто создавать в timer новый поток, в нем новый коннект и выполняться все что мне нужно, не заботясь что запросы столкнуться. Т.к. в этом случае запросы в разных потоках смогут работать паралельно. Просто с многопоточностью у меня положительного опыта нет(
...
Рейтинг: 0 / 0
Проверка обращения к БД
    #37054263
_Drive_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
...
Рейтинг: 0 / 0
Проверка обращения к БД
    #37054621
PaulJB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если я правильно понял (могу ошибаться), то сообщение об ошибке "Only the cancel command is allowed when the rows are pending." выдает не база, а сам ПБ. Вы пытаетесь вызвать retrieve() у DW или DS, который выполняет его в данный момент. Если это так, то решение простое - остановите таймер зовущий этот retrieve() до момента его окончания.
...
Рейтинг: 0 / 0
Проверка обращения к БД
    #37054637
Dim2000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
12.01.2011 10:24, царевич пишет:

> Имеется приложение с mdi интерфейсом на PB 10.5.БД оракл. В главном онке
> выполняется событие timer раз в минуту

Ну так сделай ему свой транзакционный объект со своим коннектом.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Проверка обращения к БД
    #37054770
царевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dim2000, в timer у меня embedded sql
пробовал делать делать новый транцакционный объект,коннектился им, выполнял все embedded sql в нем. Все равно не работает.

PaulJB, вы имеете ввиду глобальные флаги?
...
Рейтинг: 0 / 0
Проверка обращения к БД
    #37055574
AIS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
царевич ,
а сделать просто "качели":
- в событии "retrievestart" проверка флага таймера и если он запущен, то ожидания его окончания. Если нет или дождавшись окончания - обнуление таймера. В финале - выполнение "retrieve".
- а в событии "retrieveend" - перезапуск таймера.
Ну, или что-то в этом роде. ;)
...
Рейтинг: 0 / 0
Проверка обращения к БД
    #37055978
Фотография AIZ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это происходит потому, что ретрив не закончен и запускается повторно.
В событии Timer в самом начале напиши:
Timer(0, This)
В конце события:
Timer(Секунды, This)
...
Рейтинг: 0 / 0
Проверка обращения к БД
    #37055984
Фотография AIZ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да и разнести некоторые обращения в разные транзакции не помешает
...
Рейтинг: 0 / 0
Проверка обращения к БД
    #37056866
PaulJB
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 царевич
Никаких глобальных флагов
AIZ написал именно то, что я имел в виду ранее, но только подробнее.
Сделайте так, как он написал и будет Вам щастя. :)
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / Проверка обращения к БД
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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