Запустить процедуру и неждать выполнения... Как?

Работа VB и СУБД (Access, MSSQL, MySQL, Oracle и пр.)
Правила форума
При создании новой темы не забывайте указывать используемую СУБД.
aaf
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 190
Зарегистрирован: 08.02.2002 (Пт) 13:48
Откуда: Russia

Запустить процедуру и неждать выполнения... Как?

Сообщение aaf » 28.07.2004 (Ср) 14:14

Проблема такая: Имеется клиентская программа и серверная процедура, котороая обрабатывает данные по пол-часа. Как бы изголиться (без создания процессов, нитей и т.д. - т.е. что б дешево и сердито) запустить процедуру и недожидясь от нее ответа (положительного или отрицательно) продолжить работу дальше? А потом получить от нее ответ! Есть у кого нить подобный опыт? :?:

За ранее спасибо всем ответившим.
Вечный LAmer

TEH3OP
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 143
Зарегистрирован: 12.12.2003 (Пт) 20:19
Откуда: Москва

@%-(

Сообщение TEH3OP » 28.07.2004 (Ср) 14:25

Как это так?
Запустить выполнение запроса и не дожидаясь его окончания, продолжить работу без процессов и нитей.
Это всёравно, что проплыть стометровку в пустом бассеине... или зажечь спичку в вакууме... или бегать в невесомости... или моргать не открывая глаз...

Выполнять некоторый програмный код паралельно с другим, это и есть, собсно запустить два процесса/потока! Куда ж без них?

Вопросики у вас... ;-)

Sebas
Неуловимый Джо
Неуловимый Джо
Аватара пользователя
 
Сообщения: 3626
Зарегистрирован: 12.02.2002 (Вт) 17:25
Откуда: столько наглости такие вопросы задавать

Сообщение Sebas » 28.07.2004 (Ср) 15:40

на сервере, в процедуре вызываемой клиентом, включи таймер на минимум( чтоб успеть выскочить) и в процедуру таймера забивай свой долгоиграющий год. (есстесно если сервер в DLL тогда юзай COM+)

Если хочешь опрашивать сервер на готовность задания -неполучится(повиснешь как ранее). Нужно отдать серверу свой объект-оповеститель, метод которого вызовется по окончанию процедуры.
- Я никогда не понимал, почему они приходят ко мне чтобы умирать?

sebas<-@->mail.ru

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 28.07.2004 (Ср) 16:09

обычно это делается так:

1. инициирующий процесс/программа добавляет запись в таблице очереди в твоей общей базе на сервере
2. процесс, который должен долго работать подхватывает запись из очереди и начинает работать (этот процесс может быть даже на другом компе в сети)
3. когда он завершает свою работу , то он апдейтит запись в очереди - ставит признак выполнения/невыполнения
4. первый процесс сканирует эту очередь периодически и если появляется завершенная задача, то выводит сообщение или еще что тебе нужно делает

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 28.07.2004 (Ср) 16:55

Ну накрутили...

Дружно читаем об опциях объектов Connection, Command и Recordset.
Находим среди них adAsyncExecute.

В общем, так запускается асинхронно:

cmd.Execute "MySP", , adAsyncExecute

а так проверяем завершилось ли выполнение:

IF Not cmd.State And adStateExecuting Then
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...

Konst_One
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
Аватара пользователя
 
Сообщения: 3041
Зарегистрирован: 09.04.2004 (Пт) 13:47
Откуда: Химки

Сообщение Konst_One » 28.07.2004 (Ср) 17:25

трудно понять из входящего описания, что значит СЕРВЕРНАЯ ПРОЦЕДУРА. Если считать, что это ХРАНИМАЯ процедура на сервере SQL, то я полностью согласен с Andrey Fedorov :)
а если - это некая процедура в приложении на сервере, то тогда как я писал ранее

aaf
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 190
Зарегистрирован: 08.02.2002 (Пт) 13:48
Откуда: Russia

Сообщение aaf » 29.07.2004 (Чт) 10:48

Andrey Fedorov писал(а):Ну накрутили...

Дружно читаем об опциях объектов Connection, Command и Recordset.
Находим среди них adAsyncExecute.

В общем, так запускается асинхронно:

cmd.Execute "MySP", , adAsyncExecute

а так проверяем завершилось ли выполнение:

IF Not cmd.State And adStateExecuting Then


Здравая мысль! Это то что нужно!
Извините что сразу не уточнил что это хранимая прцедура на T-SQL.
Вечный LAmer

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 29.07.2004 (Чт) 10:55

Andrey Fedorov, добавлю только что у указанных объектах есть событие ExecuteComplete, проще использовать его (если вопрос относился к программе, запускаемой на клиенте).
Lasciate ogni speranza, voi ch'entrate.

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Сообщение Andrey Fedorov » 29.07.2004 (Чт) 10:59

Andrey Fedorov, добавлю только что у указанных объектах есть событие ExecuteComplete, проще использовать его (если вопрос относился к программе, запускаемой на клиенте).


Можно, конечно, и так - это уже по месту...
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...


Вернуться в Базы данных

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3

    TopList