|
|
|
Хранимая Процедура - процесс выполения.
|
|||
|---|---|---|---|
|
#18+
Вопрос к сообществу. 1. Есть хранимая процедура, которая обрабатывает большое количество таблиц из которых собирает данные во временную таблицу и её возвращает. 2. Длинна цикла известна, но он в зависимости от требуемого объёма может идти достаточно долго. Долго значит минут 30-40. 3. Собственно вопрос: можло ли из хранимой процедуры делать некий callback или что ещё, что бы оповещать пользователя о ходе процесса, сколько ещё осталось выполнить шагов цикла. А то впадает в цикл и представления не имеешь когда это всё закончится. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2002, 06:26:27 |
|
||
|
Хранимая Процедура - процесс выполения.
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2002, 09:29:07 |
|
||
|
Хранимая Процедура - процесс выполения.
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2002, 09:29:19 |
|
||
|
Хранимая Процедура - процесс выполения.
|
|||
|---|---|---|---|
|
#18+
Sorry!!! :0) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2002, 09:30:10 |
|
||
|
Хранимая Процедура - процесс выполения.
|
|||
|---|---|---|---|
|
#18+
В АДО есть флажек - асинхронное выполнение. С другой стороны такие длинные запросы можеть в джоб поставить ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2002, 09:43:15 |
|
||
|
Хранимая Процедура - процесс выполения.
|
|||
|---|---|---|---|
|
#18+
Интересный вопрос, не правда ли? Стандартных (то есть, описанных в документации) способов нет. Могу предложить на выбор три способа: 1. Вызывайте raiserror в процессу обработки процы, с номером ошибки, по которому моно определить завершенность процесса. В приложении перехватывайте и обрабатывайте эти ошибки. 2. Напишите хр-процедуру и вызывайте ее из своей процедуры. 3. Напишите ActiveX и вызывайте его. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2002, 09:55:54 |
|
||
|
Хранимая Процедура - процесс выполения.
|
|||
|---|---|---|---|
|
#18+
Используйте adAsyncFetch и FetchProgress Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2002, 10:06:50 |
|
||
|
Хранимая Процедура - процесс выполения.
|
|||
|---|---|---|---|
|
#18+
2 vap FetchProgress показывает сколько записей выбрано в текущий набор. В вопросе к обществу сказано, что происходит длительное ФОРМИРОВАНИЕ временной таблицы, а не ВЫБОРКА из нее. Так, что в наборе очень долго не будет ни одной записи, а потом появятся сразу все. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2002, 10:14:10 |
|
||
|
Хранимая Процедура - процесс выполения.
|
|||
|---|---|---|---|
|
#18+
Интересный вопрос, хотелось бы увидеть ответ :)) От себя могу добавить, что заметил, в версиях 6.5 и 7 при исполнении пакета или процедуры в QA промежуточные значения выводились, насколько я помню, а сейчас, в 2000, чтобы увидеть результаты даже print, приходится ждать окончания запроса... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2002, 11:22:53 |
|
||
|
Хранимая Процедура - процесс выполения.
|
|||
|---|---|---|---|
|
#18+
Вариант с Fetch обречён :) С raiseerror интересно, но что то у меня не получается ловить мессаги по ходу выполнения :( Для коннекшина я задал: ConnectOption = adConnectUnspecified для команда ExecuteOption = adAsyncExecute; всё писано в Delphi 6 Почему то не срабатывает InfoMessage Event, вызывается только ExecuteComplete Event. Как правильно выставлять флаги для асинхронной выборки? Вызывается хранимая процедура... ЗЫ Придумал пока "пошлый" вариант: 1. Создаётся таблица с SPID, Position, Max. 2. Хранимая процедура делает INSERT или UPDATE в зависимости от наличия такого SPID в таблице, и походу выполнения пользователи в отдельном соединении перечитывает таблицу и выводит ПрогрессБар :) 3. Запрос выполняется не асинхронно, а в нитке, как завершается нитка прекращается опрос таблицы. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2002, 11:23:07 |
|
||
|
Хранимая Процедура - процесс выполения.
|
|||
|---|---|---|---|
|
#18+
2fima: В моём случае вывод в QA пашет, но блоками. Видать копит в буфер, а потом из него выдаёт, когда он накопится. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2002, 11:30:59 |
|
||
|
Хранимая Процедура - процесс выполения.
|
|||
|---|---|---|---|
|
#18+
2. Длинна цикла известна, но он в зависимости от требуемого объёма может идти достаточно долго. Если работа идет в цикле, то что мешает завести табличку, в которую писать процент выполнения, а из клиента ее переодически опрашивать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2002, 11:58:09 |
|
||
|
Хранимая Процедура - процесс выполения.
|
|||
|---|---|---|---|
|
#18+
Только вот цикл идёт в while ВНУТРИ хранимой процедуры! И знать я незнаю чему равны значения переменных внутри неё :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2002, 12:07:06 |
|
||
|
Хранимая Процедура - процесс выполения.
|
|||
|---|---|---|---|
|
#18+
И знать я незнаю чему равны значения переменных внутри неё :) А модифицировать процедуру так чтобы в ней же и проверять значения переменных и в ней же писать эти значения в таблицу для клиента нельзя? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2002, 12:09:38 |
|
||
|
Хранимая Процедура - процесс выполения.
|
|||
|---|---|---|---|
|
#18+
2Genady: Так пока процедура не выполнится никаких значений я не вижу, так как всё собирается во временную таблицу и целеком возвращается. Вопрос в том как в процессе выполнения процедуры данные о состоянии выдавать клиенту. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2002, 12:20:30 |
|
||
|
Хранимая Процедура - процесс выполения.
|
|||
|---|---|---|---|
|
#18+
2 Anatem Блин ну что тут непонятного? Насколько я понял у Вас в процедуре примерно такой код Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. Создайте на сервере таблицу с полем Percent, и в процедцре вставьте дополнительно Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. С клиента переодически опрашивайте эту таблицу и по значению PercentValue рисуйте градусник. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2002, 12:27:19 |
|
||
|
Хранимая Процедура - процесс выполения.
|
|||
|---|---|---|---|
|
#18+
Еще можно так Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2002, 12:40:19 |
|
||
|
Хранимая Процедура - процесс выполения.
|
|||
|---|---|---|---|
|
#18+
Я в своем примере написал вставку значения процента, вероятно обновление будет лучше. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2002, 12:52:14 |
|
||
|
Хранимая Процедура - процесс выполения.
|
|||
|---|---|---|---|
|
#18+
2Genady: У меня сейчас практически такой вариант и пашет :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2002, 12:55:15 |
|
||
|
Хранимая Процедура - процесс выполения.
|
|||
|---|---|---|---|
|
#18+
У меня сейчас практически такой вариант и пашет :) Ну дык, а в чем тогда проблема? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2002, 13:22:47 |
|
||
|
Хранимая Процедура - процесс выполения.
|
|||
|---|---|---|---|
|
#18+
2 genie_vats не знаток делфинов ... но по моему там с вашим примером не получится... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2002, 13:45:50 |
|
||
|
Хранимая Процедура - процесс выполения.
|
|||
|---|---|---|---|
|
#18+
2Genady: Некрасиво :( Хочу что б было всё красиво и элегантно :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.11.2002, 14:04:32 |
|
||
|
|

start [/forum/topic.php?fid=46&msg=32067833&tid=1818812]: |
0ms |
get settings: |
8ms |
get forum list: |
18ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
58ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
59ms |
get tp. blocked users: |
1ms |
| others: | 198ms |
| total: | 361ms |

| 0 / 0 |
