|
Проверка обращения к БД
|
|||
---|---|---|---|
#18+
Имеется приложение с 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 по графику.Как лучше это сделать? спасибо ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2011, 10:24 |
|
Проверка обращения к БД
|
|||
---|---|---|---|
#18+
А что означает "БД занята"? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2011, 10:32 |
|
Проверка обращения к БД
|
|||
---|---|---|---|
#18+
заначит что сейчас она выполняет запрос для этого коннекта ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2011, 10:34 |
|
Проверка обращения к БД
|
|||
---|---|---|---|
#18+
Если клиент послал запрос на выполнение, то он не сможет послать новый запрос, пока предыдущий не выполнится ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2011, 10:47 |
|
Проверка обращения к БД
|
|||
---|---|---|---|
#18+
А так и понял. А есть варианты проверки на выполнение запроса в текущ момент? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2011, 11:03 |
|
Проверка обращения к БД
|
|||
---|---|---|---|
#18+
Можно "запустить" новый thread (см. SharedObjectRegister, SharedObjectGet) в который передать ID основного коннекта, создать новый коннект и по таймеру проверять что происходит в "основном" коннекте ... и делать выводы. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2011, 11:41 |
|
Проверка обращения к БД
|
|||
---|---|---|---|
#18+
Тогда я могу просто создавать в timer новый поток, в нем новый коннект и выполняться все что мне нужно, не заботясь что запросы столкнуться. Т.к. в этом случае запросы в разных потоках смогут работать паралельно. Просто с многопоточностью у меня положительного опыта нет( ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2011, 11:58 |
|
Проверка обращения к БД
|
|||
---|---|---|---|
#18+
Если я правильно понял (могу ошибаться), то сообщение об ошибке "Only the cancel command is allowed when the rows are pending." выдает не база, а сам ПБ. Вы пытаетесь вызвать retrieve() у DW или DS, который выполняет его в данный момент. Если это так, то решение простое - остановите таймер зовущий этот retrieve() до момента его окончания. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2011, 15:15 |
|
Проверка обращения к БД
|
|||
---|---|---|---|
#18+
12.01.2011 10:24, царевич пишет: > Имеется приложение с mdi интерфейсом на PB 10.5.БД оракл. В главном онке > выполняется событие timer раз в минуту Ну так сделай ему свой транзакционный объект со своим коннектом. Posted via ActualForum NNTP Server 1.4 ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2011, 15:20 |
|
Проверка обращения к БД
|
|||
---|---|---|---|
#18+
Dim2000, в timer у меня embedded sql пробовал делать делать новый транцакционный объект,коннектился им, выполнял все embedded sql в нем. Все равно не работает. PaulJB, вы имеете ввиду глобальные флаги? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2011, 16:07 |
|
Проверка обращения к БД
|
|||
---|---|---|---|
#18+
царевич , а сделать просто "качели": - в событии "retrievestart" проверка флага таймера и если он запущен, то ожидания его окончания. Если нет или дождавшись окончания - обнуление таймера. В финале - выполнение "retrieve". - а в событии "retrieveend" - перезапуск таймера. Ну, или что-то в этом роде. ;) ... |
|||
:
Нравится:
Не нравится:
|
|||
12.01.2011, 22:04 |
|
Проверка обращения к БД
|
|||
---|---|---|---|
#18+
Это происходит потому, что ретрив не закончен и запускается повторно. В событии Timer в самом начале напиши: Timer(0, This) В конце события: Timer(Секунды, This) ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2011, 10:02 |
|
Проверка обращения к БД
|
|||
---|---|---|---|
#18+
Да и разнести некоторые обращения в разные транзакции не помешает ... |
|||
:
Нравится:
Не нравится:
|
|||
13.01.2011, 10:05 |
|
|
start [/forum/topic.php?fid=15&gotonew=1&tid=1335802]: |
0ms |
get settings: |
11ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
130ms |
get topic data: |
9ms |
get first new msg: |
6ms |
get forum data: |
2ms |
get page messages: |
52ms |
get tp. blocked users: |
2ms |
others: | 329ms |
total: | 559ms |
0 / 0 |