|
|
|
Отслеживание появления MessageBoxa
|
|||
|---|---|---|---|
|
#18+
Такая вот проблемка: Идет процесс - много селектов и апдейтов. Иногда что-то происходит и выдается сообщение об ошибке (см. картинку). Если нажать ОК, то процесс продолжается в полном порядке. Надо каким-то образом нажать на ОК и/или хотябы отловить момент, когда выскакивает это сообщение. Есть линейка с процентами выполнения. Можно через определенные промежутки времени проверять, меняются ли проценты или нет. Но проверка в простом таймере не помогает, т.к. таймер ждет нажатие на ОК и не работает. Что можно сделать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2006, 12:24 |
|
||
|
Отслеживание появления MessageBoxa
|
|||
|---|---|---|---|
|
#18+
Можно через API-шную FindWindowA Только запускай в параллельном потоке через Yield ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2006, 12:30 |
|
||
|
Отслеживание появления MessageBoxa
|
|||
|---|---|---|---|
|
#18+
Окно с сообщением сами писали или оно открывается функцией MessageBox? А что касается таймера, есть замечательный объект Timing. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2006, 12:30 |
|
||
|
Отслеживание появления MessageBoxa
|
|||
|---|---|---|---|
|
#18+
Похоже как раз по таймеру что-то и пытаются сделать Ясно же пишет - разрешен только cancel ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2006, 12:34 |
|
||
|
Отслеживание появления MessageBoxa
|
|||
|---|---|---|---|
|
#18+
1. FindWindowA не поможет, т.к. в списке процессов это сообщение не записано. Т.е. оно часть всего приложения. 2. Сообщение не наше. Из-за чего вообще может происходить эта ошибка? 10 раз может работать нормально, а потом вдруг выскакивает эта зараза. 3. Объект Timing не помог. Опять-таки, пока не нажать на ОК, все заморожено. Появилась такая идея: 1. Записивать проценты выполнения в текстовый файл. 2. Создать отдельную програмку, которая будет через определенные промежутки времени проверять этото текстовый файл. А перед выполнением всего процесса запустить эту маленькую програмку. Но может быть можно сделать что-нибудь более простое? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2006, 12:44 |
|
||
|
Отслеживание появления MessageBoxa
|
|||
|---|---|---|---|
|
#18+
AIZОкно с сообщением сами писали или оно открывается функцией MessageBox? А что касается таймера, есть замечательный объект Timing. это ошибка datawindow. это не MessageBox, и не "самописное" окно. В dberror везде обработка прописана? Можно попробовать поставить breakpoint в dberror и если туда попадем - посмотреть на Call Stack. СУБД какая? MSSQL? Sybase? Версия билдера какая? девятка или десятка? Еще вариант - в событии sqlpreview фиксировать в Error object припомощи PopulateError местоположение и из аргументов события текст SQL и скидывать в файл. как только выскочит сообщение - посмотреть какой select и откуда. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2006, 12:50 |
|
||
|
Отслеживание появления MessageBoxa
|
|||
|---|---|---|---|
|
#18+
Идет обращение к БД пока не закончился Retrieve. Такое бывает если используется retrieverow, а сам Retrieve при этом не отменяют соответствующей функцией (DBCancel?) Зорин А. "I love deadlines. I like the whooshing sound they make as they fly by." -- Douglas Adams ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2006, 12:53 |
|
||
|
Отслеживание появления MessageBoxa
|
|||
|---|---|---|---|
|
#18+
думаю что это мессаж-бокс из вашей программы. сообщение оч знакомое (скорее всего база Sybase ASE или MS SQL) проблемы с курсором (он или не деастивируется или не закрывается) может быть внутри процедуры. -- надо-бы найти где ошибка, а не искать как закрывать мессаж-бокс ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2006, 12:57 |
|
||
|
Отслеживание появления MessageBoxa
|
|||
|---|---|---|---|
|
#18+
Скорее всего так и есть, как сказал Андрей Проверить events update-ов, retrieve-ов либо у родительских объектов Ошибка - есть ошибка, надо ее отловить А так - видел где-то маленькую программульку которая только этим и занимается - гасит message Можно конечно заглушить dberror, но это порочная практика ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2006, 13:01 |
|
||
|
Отслеживание появления MessageBoxa
|
|||
|---|---|---|---|
|
#18+
Dmitry.думаю что это мессаж-бокс из вашей программы. сообщение оч знакомое (скорее всего база Sybase ASE или MS SQL) Это НЕ MessageBox. Это сообщение от datawindow engine. В коде он возникает сразу после вызова dw.Retrieve(...) Dmitry.проблемы с курсором (он или не деастивируется или не закрывается) может быть внутри процедуры. маловероятно. это ошибка уровня драйвера БД. Клиент получает resultset и должен (прежде чем выполнять какой либо SQL) либо "выгрести" все строки до конца, либо ЯВНО отменить retrieve. Но где-то происходит нежелательное "распараллеливание", т.е. одновременно с Retrieve выполняется что-то еще. Отследить сложно именно из-за того что ошибка вылетает не там где собственно проблема с незакрытым курсором, а на всех последующих попытках обращения к БД Dmitry.надо-бы найти где ошибка, а не искать как закрывать мессаж-бокс ну да. чем мы собственно и пытаемся тут заниматься. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2006, 13:09 |
|
||
|
Отслеживание появления MessageBoxa
|
|||
|---|---|---|---|
|
#18+
1. РВ 6.5 2. Курсоры не используются вообще. 3. Селекты и Апдейты очень большие. Запускаются на несколько часов. В это время идет работа с базой данных (MS SQL). Ошибка возникает не всегда. Отследить в дебаггере такое дело сложно. При нажатии на ОК и все продолжается нормально. Т.е. это даже не ошибка, а просто какое-то сообщение. Хотелось бы просто нажать на ОК и все. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2006, 13:18 |
|
||
|
Отслеживание появления MessageBoxa
|
|||
|---|---|---|---|
|
#18+
А как процентики выполнения считаются? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2006, 13:34 |
|
||
|
Отслеживание появления MessageBoxa
|
|||
|---|---|---|---|
|
#18+
Если не хочешь отлавливать, напиши в Event DBError RETURN 1. Но, на всякий случай, записывай куда-нибудь передаваемые в событие параметры. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2006, 13:38 |
|
||
|
Отслеживание появления MessageBoxa
|
|||
|---|---|---|---|
|
#18+
Ага Только они ведь продолжают работать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2006, 13:45 |
|
||
|
Отслеживание появления MessageBoxa
|
|||
|---|---|---|---|
|
#18+
А DBerror он глобальный ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2006, 13:47 |
|
||
|
Отслеживание появления MessageBoxa
|
|||
|---|---|---|---|
|
#18+
Кстати, непонятно, почему Timing не помог? Response на него не влияет никак ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2006, 13:47 |
|
||
|
Отслеживание появления MessageBoxa
|
|||
|---|---|---|---|
|
#18+
spas2001А как процентики выполнения считаются? В цикле. Изначально знаем, сколько строк надо обновить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2006, 13:48 |
|
||
|
Отслеживание появления MessageBoxa
|
|||
|---|---|---|---|
|
#18+
AIZЕсли не хочешь отлавливать, напиши в Event DBError RETURN 1. Но, на всякий случай, записывай куда-нибудь передаваемые в событие параметры. Практически все происходит без DW. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2006, 13:50 |
|
||
|
Отслеживание появления MessageBoxa
|
|||
|---|---|---|---|
|
#18+
AIZКстати, непонятно, почему Timing не помог? Response на него не влияет никак А можно примерчик? Вот, что было у меня: Код: plaintext 1. При запуске этого скрипта получаю MessageBox('', 'stop'). И только после его закрытия - MessageBox('', 'Timing') ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2006, 13:55 |
|
||
|
Отслеживание появления MessageBoxa
|
|||
|---|---|---|---|
|
#18+
Месаджик не там написал Правильно, ты его пусканул и сразу месага а надо было в событиях и потом время -то не в секундах ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2006, 14:19 |
|
||
|
Отслеживание появления MessageBoxa
|
|||
|---|---|---|---|
|
#18+
Извиняюсь Interval The number of seconds that you want between Timer events. interval can be a whole number or fraction greater than 0 and less than or equal to 4,294,967 seconds. If interval is 0, Timer turns off the timer so that it no longer triggers Timer events. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2006, 14:24 |
|
||
|
Отслеживание появления MessageBoxa
|
|||
|---|---|---|---|
|
#18+
Вот пример того, как не надо писать (перекрестные ссылки), но для демонстрации Timing подойдет. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. 142. 143. 144. 145. 146. 147. 148. 149. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2006, 14:28 |
|
||
|
Отслеживание появления MessageBoxa
|
|||
|---|---|---|---|
|
#18+
spas2001Месаджик не там написал Правильно, ты его пусканул и сразу месага а надо было в событиях и потом время -то не в секундах Ничего не понял :) Идея такая: есть объект inv_timing, который будет запускаться каждые 15 минут inv_timing(900) и проверять текущее значение процентов и предыдущее. Проблема в том, что если выскочит где-то сообщение, то inv_timing не сработает. Вопрос в том, как сделать, чтобы не зависимо ни от чего, inv_timing работал бы каждые 15 минут. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2006, 14:32 |
|
||
|
Отслеживание появления MessageBoxa
|
|||
|---|---|---|---|
|
#18+
Наверное самое простое на время исполнения заглушить ошибки DW ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2006, 15:22 |
|
||
|
Отслеживание появления MessageBoxa
|
|||
|---|---|---|---|
|
#18+
To Riska По моему считать, что то на клиенте часами это бред!!! Нарисовали бы DTS - пакет нормальный ну и дёргали его по шедулеру (тем более что MSSQL), да и все бы проблемы ушли!!! Заодно бы новые технологии немножко подняли!!!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.11.2006, 15:47 |
|
||
|
|

start [/forum/topic.php?fid=15&msg=34130621&tid=1337510]: |
0ms |
get settings: |
8ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
146ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
59ms |
get tp. blocked users: |
1ms |
| others: | 198ms |
| total: | 448ms |

| 0 / 0 |
