|
Как запустить процедуру из другой БД?
|
|||
---|---|---|---|
#18+
Здравствуйте форумчане Поставил себе задачу найти способ фонового выполнения тяжёлых запросов, чтобы пользователь мог дальше работать с БД. Создал для этого другую БД и написал в ней нужные процедуры. Осталось только их запустить. А как запустить процедуру из другой БД я не знаю :/ помогите, пожалуйста ... |
|||
:
Нравится:
Не нравится:
|
|||
31.10.2017, 01:52 |
|
Как запустить процедуру из другой БД?
|
|||
---|---|---|---|
#18+
Я тут попробовал уже... Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9.
Оказалось, что VBA всё равно не отдаёт управление пользователю, пока процедура из другой БД не выполнится Попробую создать командный файл для запуска ... |
|||
:
Нравится:
Не нравится:
|
|||
31.10.2017, 02:01 |
|
Как запустить процедуру из другой БД?
|
|||
---|---|---|---|
#18+
Я сам спросил и сам отвечаю :) короче, я создал запуск через командный файл (методом Shell) Всё равно Access не отдаёт мне управление, пока запросы не выполнятся до конца Единственный нормальный способ я нашёл - это заполнение ячеек по одной. То есть, вместо одного запроса, который обновляет все записи в таблице, я выполняю много раз запрос для обновления только по одной записи. А в цикле вставляю DoEvents. При этом я могу комфортно работать, но всё же это не самое элегантное решение... Надеюсь найти лучше ... |
|||
:
Нравится:
Не нравится:
|
|||
31.10.2017, 03:41 |
|
Как запустить процедуру из другой БД?
|
|||
---|---|---|---|
#18+
Наверное, лучше подключить эту другую БД в референсах... НастаевVBA всё равно не отдаёт управление пользователю, пока процедура из другой БД не выполнитсяА зачем пользователю управление, если программа выполняет затребованное им действие? ... |
|||
:
Нравится:
Не нравится:
|
|||
31.10.2017, 07:50 |
|
Как запустить процедуру из другой БД?
|
|||
---|---|---|---|
#18+
НастаевЯ сам спросил и сам отвечаю :) Всё равно Access не отдаёт мне управление, пока запросы не выполнятся до конца Учи матчасть и будет тебе щастье. Код: vbnet 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
31.10.2017, 08:18 |
|
Как запустить процедуру из другой БД?
|
|||
---|---|---|---|
#18+
Akina, это действие заполняет одну табличку около 10 секунд. Сама таблица не используется. Просто надо, чтобы в ней были актуальные данные. Мне кажется неудобным, что пользователю приходится ждать выполнения этого запроса. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.10.2017, 09:46 |
|
Как запустить процедуру из другой БД?
|
|||
---|---|---|---|
#18+
aleks222, спасибо, ща попробую :) ... |
|||
:
Нравится:
Не нравится:
|
|||
31.10.2017, 09:48 |
|
Как запустить процедуру из другой БД?
|
|||
---|---|---|---|
#18+
НастаевМне кажется неудобным, что пользователю приходится ждать выполнения этого запроса. это смотря как преподнести... - если программа тупо висит, это одно (действительно бесит) - а если после предупреждения "Актуализация данных!" отрабатывает еще и прогресс бар, то это как бы зеркально - наоборот... ... |
|||
:
Нравится:
Не нравится:
|
|||
31.10.2017, 09:54 |
|
Как запустить процедуру из другой БД?
|
|||
---|---|---|---|
#18+
НастаевAkina, это действие заполняет одну табличку около 10 секунд. Сама таблица не используется. Просто надо, чтобы в ней были актуальные данные. Мне кажется неудобным, что пользователю приходится ждать выполнения этого запроса. а может тогда вообще пользователю не нажимать, запускать ночью или в другом окне шедулером ... |
|||
:
Нравится:
Не нравится:
|
|||
31.10.2017, 10:21 |
|
Как запустить процедуру из другой БД?
|
|||
---|---|---|---|
#18+
)) ... |
|||
:
Нравится:
Не нравится:
|
|||
31.10.2017, 13:35 |
|
Как запустить процедуру из другой БД?
|
|||
---|---|---|---|
#18+
aleks222Учи матчасть и будет тебе щастье. Вот что я делаю: Код: vbnet 1. 2. 3.
Выдаёт ошибку ... |
|||
:
Нравится:
Не нравится:
|
|||
31.10.2017, 14:54 |
|
Как запустить процедуру из другой БД?
|
|||
---|---|---|---|
#18+
Настаев... А как запустить процедуру из другой БД я не знаю :/ ... вот тут я делал примерчик (правда не с запросами, а с прогрессбаром, но принцип, думаю, тот же :) ) 18433008 ... |
|||
:
Нравится:
Не нравится:
|
|||
31.10.2017, 16:43 |
|
Как запустить процедуру из другой БД?
|
|||
---|---|---|---|
#18+
guest_rusimport, отличный пример, спасибо ... |
|||
:
Нравится:
Не нравится:
|
|||
01.11.2017, 00:21 |
|
Как запустить процедуру из другой БД?
|
|||
---|---|---|---|
#18+
Настаевaleks222Учи матчасть и будет тебе щастье. Вот что я делаю: Код: vbnet 1. 2. 3.
Выдаёт ошибку Трясти бесполезно - думать надо. https://msdn.microsoft.com/en-us/library/office/ff197799.aspx Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
... |
|||
:
Нравится:
Не нравится:
|
|||
01.11.2017, 08:42 |
|
Как запустить процедуру из другой БД?
|
|||
---|---|---|---|
#18+
aleks222, я попробовал этот код Он работает с запросами типа Select А у меня запрос на обновление ... |
|||
:
Нравится:
Не нравится:
|
|||
02.11.2017, 03:20 |
|
Как запустить процедуру из другой БД?
|
|||
---|---|---|---|
#18+
НастаевНадеюсь найти лучше Сменить БД. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.11.2017, 04:16 |
|
Как запустить процедуру из другой БД?
|
|||
---|---|---|---|
#18+
982183, согласен ... |
|||
:
Нравится:
Не нравится:
|
|||
02.11.2017, 04:20 |
|
Как запустить процедуру из другой БД?
|
|||
---|---|---|---|
#18+
Настаев, видимо идёт переработка множества таблиц промежуточными запросами, например для отчёта ? Если да, то можно использовать временные таблицы для хранения результатов промежуточных запросов. В общем это очень ускоряет вычисления. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.11.2017, 04:28 |
|
Как запустить процедуру из другой БД?
|
|||
---|---|---|---|
#18+
\\\\, я создаю промежуточную таблицу "Варианты цен". Это и забирает много времени Я скажу, что там выполняется. Есть таблицы Товары, Заявки и Наличие Для каждого из 1200 товаров нужно вычислить три возможных варианта цен: последняя, партийная и средняя. Я не буду вдаваться в подробности, но скажу, что для вычисления используются данные из всех этих таблиц. При этом используются фильтры, группировка и сортировка. Результат заносится в уже существующую таблицу "Варианты цен". Вот текст самого запроса: Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8.
"нужная_цена" - это функция, которая получает данные из рекордсета, который запрашивается для каждой записи отдельно. Потому и долго. 1200 раз подключается рекордсет. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.11.2017, 04:52 |
|
Как запустить процедуру из другой БД?
|
|||
---|---|---|---|
#18+
Вот запрос для вычисления только одной записи: Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
[Заявки вложенная в основной валюте] - это тоже запрос, который производит свои вычисления согласно выбранной валюте в шапке документа "партийная_накладная" - это ещё одна функция, которая находит нужную накладную Короче, тут всё запутано, поэтому я решил заполнять таблицу "Варианты цен" в фоне. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.11.2017, 05:02 |
|
Как запустить процедуру из другой БД?
|
|||
---|---|---|---|
#18+
Настаев, конкретно сказать не получится, но в своё время я брал и смотрел какой запрос в цепочке (предварительно разбив на множество запросов) использует какое время (могло перелопачиваться всё содержимое базы), далее я оптимизировал эти запросы. На тех этапах (запросах) что не получалось оптимизировать я создавал промежуточные таблицы (для этого предварительно создавалась временная БД) куда и сливались результаты. Этих таблиц была не одна. Всё заворачивалось в транзакцию. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.11.2017, 05:06 |
|
Как запустить процедуру из другой БД?
|
|||
---|---|---|---|
#18+
\\\\, я понял В принципе, я узнал, что хотел Да и с запросами у меня нет никаких проблем. Всё работает как часики. Только иногда бесят эти 10 секунд выполнения. Впрочем, для этого и придумали процессоры. Пусть думают ))))) ... |
|||
:
Нравится:
Не нравится:
|
|||
02.11.2017, 05:11 |
|
Как запустить процедуру из другой БД?
|
|||
---|---|---|---|
#18+
Настаев, временные таблицы хороши для фиксации вычислений. Если в каком-то подзапросе идёт вычисление, то частенько это вычисление для одной и той же записи проходит многократно, что очень сильно замедляет выполнение запроса. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.11.2017, 05:14 |
|
Как запустить процедуру из другой БД?
|
|||
---|---|---|---|
#18+
\\\\, Я бы этого избежал, если бы знал, какая запись нуждается в обновлении. Частично я это уже решил, создав поле "выделена", в котором я ставлю галочки на нужные записи. Поменялась, скажем, цена на товар - ставится галочка. А потом обновляются только нужные записи. Спасибо за помощь. Там я ещё должен просмотреть один из ваших примеров запуска из другой БД, только руки ещё не дошли ... |
|||
:
Нравится:
Не нравится:
|
|||
02.11.2017, 05:20 |
|
|
start [/forum/topic.php?fid=45&msg=39544998&tid=1611945]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
45ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
55ms |
get tp. blocked users: |
1ms |
others: | 259ms |
total: | 401ms |
0 / 0 |