Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Cancel

2.1K
12 ноября 2003 года
Slavutich
23 / / 31.10.2003
Люди, как можно реализовать такую весчь:
процедура ищет данные в БД и вставляет их в другую БД, процесс долгий, как можно его прервать нажав на кнопочку?
То есть, пока выполняется эта процедура программа вообще ни на что не реагирует пока не найдет все что надо, как заставить ее остановиться по нажатию кнопочки на форме?
266
12 ноября 2003 года
mhaturov
901 / / 23.10.2003
Цитата:
Originally posted by Slavutich
Люди, как можно реализовать такую весчь:
процедура ищет данные в БД и вставляет их в другую БД, процесс долгий, как можно его прервать нажав на кнопочку?
То есть, пока выполняется эта процедура программа вообще ни на что не реагирует пока не найдет все что надо, как заставить ее остановиться по нажатию кнопочки на форме?



Какая БД (Jet, SQL или другая)?
Как выполеяется выборка? Тоесть, это хранимый запрос, хранимая процедура либо непосредственный запрос к серверу?
В какой среде работаешь? (VBA, либо VB)
Еесли не критичны всякие сообщения, либо вероятность неполного копирования данных и прочей беды, если коннектишься к БД не через DSN, а напрямую (через экземпляр Conection), можно попытаться установить приоритет событию "клика" по твоей кнопочке, а потом просто тупо обрывать коннект, либо "убивать" рекордсет. Правда, грубовать это...

2.1K
12 ноября 2003 года
Slavutich
23 / / 31.10.2003
Цитата:
Originally posted by mhaturov


Какая БД (Jet, SQL или другая)?
Как выполеяется выборка? Тоесть, это хранимый запрос, хранимая процедура либо непосредственный запрос к серверу?
В какой среде работаешь? (VBA, либо VB)
Еесли не критичны всякие сообщения, либо вероятность неполного копирования данных и прочей беды, если коннектишься к БД не через DSN, а напрямую (через экземпляр Conection), можно попытаться установить приоритет событию "клика" по твоей кнопочке, а потом просто тупо обрывать коннект, либо "убивать" рекордсет. Правда, грубовать это...



БД - Access 2000
Среда - VB6
Неполное копирование и все остальное не критично, главное прервать работу
Коннект - напрямую (через экземпляр Conection)
И как установить приоритет событию "клика" ?

258
12 ноября 2003 года
SergeySV
1.5K / / 19.03.2003
Нет такого приоритета, надо самому тоды периодически проверять не делает ли чего пользователь: winAPI -GetInputState - вернет True если пользователь че-то нажимал на клаве или мышку побеспокоил. DoEvents - заставит программу остановиться и обработать все пришедшие сообщения в очереди. Т.е.

if GetInputState then
DoEvents
end if

Теперь такой момент: если ты работаешь с базой через ADO то можно задавать все свои запросы асинхронно, то бишь послал ее куда-нибудь, а программа твоя дальше пошла, не дожидаясь (тут уже тебе самому придется ожидание вставлять, чтобы программа дальше не убежала)
2.1K
12 ноября 2003 года
Slavutich
23 / / 31.10.2003
Спасибо за советы, попробую через API.
258
12 ноября 2003 года
SergeySV
1.5K / / 19.03.2003
Цитата:
Originally posted by Slavutich
Спасибо за советы, попробую через API.



Неа, DoEvents - это встроенная функция в VB.

Так как останавливает выполнение программы для обработки пришедших сообщений, то ее не рекомендуют вставлять в быстрый цикл в голом виде, она его сильно тогда замедлит, поэтому в циклах лучше использовать конструкцию с WinAPI GetInputState - чтобы лишний раз не вызывать DoEvents, а то она тормозит процесс, даже если пользователь под страхом смертной казни ничего не трогал

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог