|
|
|
Встать! Суд (над асинхронными запросами) идет! :)
|
|||
|---|---|---|---|
|
#18+
А началось это здесь: Как избавиться от подтверждений на удаление и т.п., или что лучше DoCmd.Run (C) Sfagnum & Co.\r \r С одной стороны я часто встречал мнение неискушенных разработчиков (к каковым и отношусь сам), что выполнение запросов в асинхронном режиме волшебным образом увеличивает скорость выполнения программы в целом. Это ерунда. За мотивацией с моей стороны обращайтесь в указанное выше место, т.е. туда, откуда это всё началось :)\r \r С другой стороны, встречаю мнения продвинутых (в уважительном, хорошем смысле слова) разработчиков, исповедующих только синхронные режимы (утрирую).\r \r Сам долгое время считал асинхронные запросы аля "от лукавого", но узнав, что с самого начала разработки в Access я пользуюсь именно такого рода режимом выполнения запросов при открытии форм, стал относиться к этому чуду с меньшим страхом :) и с большим интересом. Опустим рассмотрение всех прелестей выполнения запросов в асинхронном режиме при открытии форм (ибо это стандартное, встроенное средство), а обратимся непосредственно к теме: \r \r "Сознательное (!) использование асинхронных запросов"\r \r 1) С отображением данных вроде как всё ясно - асинхронный режим оправдан.\r \r 2) А что на счет выполнения исполняемых (не селектов) запросов?\r Смоделируем ситуацию... Сразу оговорюсь, что некоторые пункты избыточны, но в данном случае чем их (пунктов) больше, тем более понятна идея.\r \r На основе введенной Оператором приходной накладной должны быть выполнены следующие бизнес-транзакции:\r а) Приходная накладная должна быть сохранена как документ;\r б) Позиции в накладной должны быть сохранены как "расшифровка" суммы по документу;\r в) Сама сумма должна быть учтена в соответствующих бухгалтерских проводках;\r г) Должно быть пересчитано сальдо по взаиморассчетам с данным поставщиком;\r д) товар должен быть распределен в соответствующие секции Склада;\r е) товар должен быть распределен по логическим партиям, например по сроку годности (скажем товар относительно скоропортящийся и требует очень жесткого управления запасами - если годность поступившего товара исткает раньше, чем годность остатков этого же самого товара, то во-первых отделу закупок по шапке, а во-вторых надо сначала продавать именно новую партию, а уже затем остатки);\r ж) автоматически сформировать Отпускные накладные по товару, закупленному "под заказ", т.е. по транзитному товару;\r з) сформировать Отборные листы для склада (с указанием секций склада и логических партий товара) на основе Отпускных накладных;\r и) уведомить какой-нибудь отдел о данном событии...\r к) ну пожалуй и хватит!\r \r Предположим, что фирма большая и, соответственно, объемы данных огромны, а вот реализовано всё на... Аксе :) Пусть будет так!\r В связи с выше сказанным, предположим, что выполнение всех этих действий займет 2 минуты +/- еще 10 минут :)\r Еще одно немаловажное, а вернее САМОЕ ВАЖНОЕ допущение - Оператор занят только оприходованием накладных и, таким образом, не использует результаты своего труда - все те данные, которые были им введены не учавствуют в его дальнейших действиях.\r \r Ну и если это всё реализовать СИНХРОННО, то оператор после введения накладной может попить кофе, покурить и пойти погулять, а на все притензии своего начальства ткнуть в вас (программера) пальцем и сказать, что это система виновата, что работа не сделана! Что он, дескать, вынужден тупо чего-то ждать и ну не как не может начать оприходование следующей накладной, пока красная (зеленая/фиолетовая) "лампочка" на системном блоке "мигает". Кстати, это абсолютно реальная ситуация. Более того, я был "внутри" данной ситуации! Правда, не в качестве программера, но это не меняет суть - у работников появляется классная отмазка, а у тех, кто действительно работает, появляется раздраженность на тормоза.\r \r Реализуем эту же задачу АСИНХРОННО. Млин... Сказка какая-то! Не успел Оператор нажать соответствующую кнопочку, как документик закрылся (после небольшой задержки, связанной с некими внутренними подготовительными манипуляциями) и уже может начинать вбивать следующий документ! \r Как же реализована эта "сказка"? Во как...\r Создаем Класс (только в модулях класса можно использовать WithEvents) "ОприходованиеНакладных". Создаем некое ядро (в терминологии ЛП) или попросту "шагалку" (принцип описан в FAQ Сжатие БД, пункт 6.4) в которой в последовательном порядке выполняем необходимые действия, ключевыми из которых являются исполняемые запросы, запускаемые в асинхронном режиме. "Шагалка" переходит на следующий этап выполнения Оприходования накладной по соответствующему событию завершения выполнения асинхронного запроса. Т.е. мы создали... МНОГОЗАДАЧНОСТЬ! :) Код, обслуживающий Юзера крутится отдельно, а наш отдельный "поток" вызывается событиями завершающихся асинхронных запросов, в результате запускается очередной запрос и опять ожидается (без малейшего расхода машинного времени) его завершение! Ну точно отдельный поток получили!\r \r Косяк, конечно, есть и здесь - время оприходования накладной будет зависить от скорости работы Оператора, т.е. сам запрос будет выполняться по большей части только в моменты, когда Юзер "не шлет системе сообщений", т.е. не топчет клавиатуру и не катает мышку. В перерывах, так сказать... Т.е. в конечном счете выполняться это будет 10 минут +- еще 20! Для Оператора эта схема хороша, а вот для фирмы в целом - х.з., зависит от скорости проистекающих на фирме процессов.\r Но всё равно, в этой идее что-то есть! То ли от "лукавого", то ли от... Хорошего, вообщем :)\r \r Что думаете, уважаемые, по поводу СОЗНАТЕЛЬНОГО использования асинхронных запросов в целом и о выше сказанном в частности? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.09.2003, 17:29 |
|
||
|
Встать! Суд (над асинхронными запросами) идет! :)
|
|||
|---|---|---|---|
|
#18+
Нуф-Нуф, да ты поэт, млин! Что не топик, так целый трактат на тему. :) Вообще, вся эта многозадачность, по-моему, нужна для того, чтобы программист мог, пока пользователь думает (ищет кнопку на клавиатуре, клавиатуру, мышь, компьютер или свои мысли), программист в лице написанной им программы, мог сделать свои неотложные дела. В случае с открытием форм - форма прочитала одну запись, открылась, показав ее, и, пока юзер ищет мышку, ведет ее, скажем, к (*) для ввода новой записи, форма получила все остальные, и готова работать. Слегка утрированно, но смысл понятен. Простейший пример "многозадачности" - вешаем на форму достаточно часто вызываемый таймер, по которому выполняется ма-аленький кусочек большой задачи. Если программа "занята" - таймер не вызовется. Если пользователь быстро (достаточно быстро, чтобы не давать программе "очухаться") пихает фишки - таймер не вызовется. Если же у него зачесалась нога промеж лопаток, то, пока он решает эти бытовые проблемы, таймер успеет отработаться n раз, и посчитает m% от нашей задачи. И некий отчет, требующей длительной подготовки и расчетов, откроется "мухой", а не даст скучающему оператору возможность попить чаю. Так, чем придумывать какие-то "таймеры", почему бы, например, при входе в программу не запустить расчет остатков товаров на начало дня и, пока пользователь дойдет до места, в котором они ему потребуются, расчет будет уже выполнен. Т.е. асинхронные запросы не вредны (как, впрочем, и не необходимы), они просто есть. А могли бы и не быть. Как могло бы и не быть, например, функции MsgBox - ну написал бы ты ей замену, если б не смог обойтись без нее. Вот :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.09.2003, 17:46 |
|
||
|
Встать! Суд (над асинхронными запросами) идет! :)
|
|||
|---|---|---|---|
|
#18+
Между прочим, некоторые недостатки асинхронного запроса улетучиваются, если он исполняется на сервере (не путать с исполняется на пианино). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.09.2003, 18:45 |
|
||
|
Встать! Суд (над асинхронными запросами) идет! :)
|
|||
|---|---|---|---|
|
#18+
Свидетель Geo, ваши показания приняты, но не поняты :) Так в своем (обвинительном или оправдательном?:) повествовании вы сказали: >таймер успеет отработаться n раз, и посчитает m% от нашей задачи. И некий отчет, требующей длительной подготовки и расчетов, откроется "мухой" Соглашусь, но это касается только (!) случаев программной обработки некой задачи, а если же для выполнения данной задачи необходимо выполнить запрос, который отрабатывает секунд за 10? И таких запросов штук 10? Ну тока не надо говорить о неправильно выбранной среде разработки или структуре данных! Это ж просто размышления :) В этом случае выполнить запрос "кусочками", пока пользователь чешет промеж лопаток :), может только сама система! Да, по таймеру запустится запрос, но если он будет запущен в синхронном режиме, то пока не отработает фик пользователь увидит эхо от своих действий. Единственный выход организации "параллельной" работы кода и запроса – асинхронное выполнение последнего. Именно поэтому ваши показания: "Т.е. асинхронные запросы не вредны (как, впрочем, и не необходимы), они просто есть. А могли бы и не быть." не принимаются к рассмотрению и будут вычеркнуты из протокола Асинхронные исполняемые (не селекты) запросы однозначно нужны. Нужны они в одном-единственном случае – когда коду, который его запускает, не нужны результаты выполнения данного запроса. На счет асинхронных "селектов" и так всё ясно :) Тем не менее, вариант "таймерной многозадачности" принимается как механизм создания сверх-виртуальной многозадачности при решении задач средствами кода (не запросов). Спасибо! > Так, чем придумывать какие-то "таймеры", почему бы… Чё та я торможу :( В описанной мной гипотетической задаче разве можно что-либо сделать в момент открытия? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.09.2003, 18:52 |
|
||
|
Встать! Суд (над асинхронными запросами) идет! :)
|
|||
|---|---|---|---|
|
#18+
Нда... Саныч, сервер... Клиент-сервер... Мне об этом мечтать тока остается :( или второй комп покупать :) //не хочет ставить локальный сервак, хотя надобы... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.09.2003, 18:56 |
|
||
|
Встать! Суд (над асинхронными запросами) идет! :)
|
|||
|---|---|---|---|
|
#18+
ключевая фраза Асинхронные исполняемые (не селекты) запросы однозначно нужны. Нужны они в одном-единственном случае – когда коду, который его запускает, не нужны результаты выполнения данного запроса остается только однозначно знать когда выполнение происходит асинхронно или синхронно по умолчанию - это не всегда очевидно - Сам долгое время считал асинхронные запросы аля "от лукавого", но узнав, что с самого начала разработки в Access я пользуюсь именно такого рода режимом выполнения запросов при открытии форм и определиться какой вариант будет оптимальнее - это уже из опыта. всё эт о очень ценно, но Саныч прав - наступает время ADP . мое мнение - даже настольное приложение надо делать на ADP + MSDE. MSDE можно в дальнейшем менять смело на SQL типа сервер. и снхронность / асинхронность необходимо рассматривать уже несколько по другому. как настояющую асинхронность - 2 или более процессора. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.09.2003, 19:10 |
|
||
|
Встать! Суд (над асинхронными запросами) идет! :)
|
|||
|---|---|---|---|
|
#18+
не принимаются к рассмотрению и будут вычеркнуты из протокола \r Не очень-то и хотелось \r \r Нужны они в одном-единственном случае – когда коду, который его запускает, не нужны результаты выполнения данного запроса. \r \r Или когда этому коду есть еще чем заняться, а запросы выполняются на другом компьютере\r \r Я придерживаюсь критерия что большинство рутинной работы должен делать компютер, в том числе и при написании програм. Для меня програмирование сначала часть бизнеса а потом искуство.\r С точки зрения бизнеса надо написать в кратчайший срок действуюшее приложение, с точки зрения искуства - что на это все и еще было приятно посмотреть. Поэтому я редко переписываю то что работает, но писать всегда надо лучше чем вчера. \r (с) /topic/39 , 24 авг 01, 10:25 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.09.2003, 19:14 |
|
||
|
Встать! Суд (над асинхронными запросами) идет! :)
|
|||
|---|---|---|---|
|
#18+
2НУФ-НУФ АДП хорошо идет с MSDE. я для проверки поставил на втором диске сервер2000 и SQL2000 (с С: загружается ХРпро) это только для проверки работы с серваком , а разработка в ХР / А2002 . для отладки - великолепно . на работе под ХР стоит MSDE на другом компе (под 98 тоже катит) и работа почти как с серваком. пробуй понравится. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.09.2003, 19:17 |
|
||
|
Встать! Суд (над асинхронными запросами) идет! :)
|
|||
|---|---|---|---|
|
#18+
Нужны они в одном-единственном случае – когда коду, который его запускает, не нужны результаты выполнения данного запроса И, если запрос выполняется здесь же, на этом же компьютере, и здесь же лежат данные (не надо дожитаться, пока они доползут по сетке) - наоборот, важно, чтобы коду больше нечего было делать, иначе выползет 11-я секунда :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.09.2003, 19:20 |
|
||
|
Встать! Суд (над асинхронными запросами) идет! :)
|
|||
|---|---|---|---|
|
#18+
Ну, вобщем-то, решение суда в отношении асинхронных запросов в mdb и еже с ним технологий (настольная и файл-серверная БД) однозначно: 1) Асинхронное выполнение селектов есть хорошо. 2) Асинхронное выполнение исполняемых запросов оправданно в случаях, когда коду, который его запускает, не нужны результаты выполнения данного запроса. 3) В многоПРОЦЕССОРНЫХ системах. Решение может быть обжаловано :) В отношении клиент-серверных технологий... Показания свидетелей были однозначны: Владимир Саныч: >Между прочим, некоторые недостатки асинхронного запроса улетучиваются, если он исполняется на сервере Вадя: >и снхронность / асинхронность необходимо рассматривать уже несколько по другому. как настояющую асинхронность - 2 или более процессора (в контексте клиент-серверной технологии) Geo: >Или когда этому коду есть еще чем заняться, а запросы выполняются на другом компьютере Оправдан! (ДЫМЦ) //удар молотка ...или как там эта штука называется? ================================== Вадя, знаю... Надо, давно надо переходить на ADP, но... Вообщем когда-нибудь я обязательно так и сделаю! Надеюсь в течении годика... Geo, не, твое: >И, если запрос выполняется здесь же, на этом же компьютере, и здесь же лежат данные (не надо дожитаться, пока они доползут по сетке) - наоборот, важно, чтобы коду больше нечего было делать, иначе выползет 11-я секунда :) не катит :)~ Я тут тестировал кое-что и специально создал табличку на 2,500,000 записей. Так знаешь чего? Локально она у меня прогружалась (полностью) порядка 50 секунд! Комп, конечно, тормознутый, но такие запросы только в асинхронном режиме, имхо, если конечно удовлетворены требования данного суда :) См. начало этого поста... з.ы. можно конечно порассуждать на тему выполнения асинхронных запросов в клиент-серверных технологиях, но здесь я могу быть тока читателем. Так что сорри... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.09.2003, 20:11 |
|
||
|
Встать! Суд (над асинхронными запросами) идет! :)
|
|||
|---|---|---|---|
|
#18+
Нуф, что-то ты меня запутал малость... Вот, захотелось самому попробовать: Табличка с 2,3 млн. записей из текстового и 2-х числовых полей, из которых 1/6 содержит строку "Иванов". 2 процедурки: №1 Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. №2 Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. Все живет в одной mdb'шке... В итоге я получил такие результаты: Код: plaintext 1. 2. 3. 4. 5. Где же "11-я секунда"? Я тебе ответственно заявляю - в моей машинке 1 процессор Athlon 1333. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.09.2003, 23:13 |
|
||
|
Встать! Суд (над асинхронными запросами) идет! :)
|
|||
|---|---|---|---|
|
#18+
приду завтра буду фосфорецировать если не забуду марос марроооооссс ниии мааарроссь .... (удаляясь и позвякивая пластиковой бутылью) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.09.2003, 23:37 |
|
||
|
Встать! Суд (над асинхронными запросами) идет! :)
|
|||
|---|---|---|---|
|
#18+
Ой бля я прям сегодня пришел (во как бывает) Гео, не в обиду тебе будет сказано, но "dbRunAsync Runs an asynchronous query ( ODBCDirect workspaces only )." ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.09.2003, 23:45 |
|
||
|
Встать! Суд (над асинхронными запросами) идет! :)
|
|||
|---|---|---|---|
|
#18+
2ЛП Да видел я это... Это не единственные функции, которыми я изголялся, но даже из них видно, что CurrentDb.OpenRecordet без этого аргумента работает асинхронно, до тех пор, пока не начнешь обращаться еще к неподготовленным записям рекордсета. А-ля форма, которая показала первую запись, еще не дождавшись последней... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.09.2003, 23:53 |
|
||
|
Встать! Суд (над асинхронными запросами) идет! :)
|
|||
|---|---|---|---|
|
#18+
Это не единственные функции, которыми я изголялся, но даже из них видно, что CurrentDb.OpenRecordet без этого аргумента работает асинхронно Здрасте на куй я ваша дядя Оно усегда работало синхронно. У меня. Потому как ODBCDirect'ом я не пользуюсь. Ты случаем не путаешь асинхронное выполнение с режимом dbOpenDynaset (Keyset в ADO)???? Там тоже сначала подчитываются ключи, а уж только по мере необходимости сами данные. Так что получается, что запрос отработал, а данные все еще не пришли (и, возможно, не придут никогда) Еще примеры не единственных функций можешь привести? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.09.2003, 00:02 |
|
||
|
Встать! Суд (над асинхронными запросами) идет! :)
|
|||
|---|---|---|---|
|
#18+
Ты случаем не путаешь асинхронное выполнение с режимом dbOpenDynaset (Keyset в ADO)???? Там тоже сначала подчитываются ключи, а уж только по мере необходимости сами данные. Так что получается, что запрос отработал, а данные все еще не пришли (и, возможно, не придут никогда) Скорее всего, путаю... А функции я кроме этих двух поубывал уже все. Да, оказвается, они и не нужны... Так. Буду пробовать ишо. Завтра. Эх, дароги... (пока тихонько) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.09.2003, 00:13 |
|
||
|
Встать! Суд (над асинхронными запросами) идет! :)
|
|||
|---|---|---|---|
|
#18+
Geo, миль пардон, а что это за For t = 1 To 100000000? И почему время исполнения этого цикла ты считаешь частью времени исполнения запроса? Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. Это будет время выполнения команды a = 1??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.09.2003, 00:34 |
|
||
|
Встать! Суд (над асинхронными запросами) идет! :)
|
|||
|---|---|---|---|
|
#18+
Этот цикл, по-моему, в одном случае, должен был выполняться параллельно запросу, а в другом - после запроса. Но сейчас я, пожалуй, вообще ничего не понимаю. Смилуйтесь, други, объясните, что я сделал и что получил, а то я спать буду плохо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.09.2003, 00:41 |
|
||
|
Встать! Суд (над асинхронными запросами) идет! :)
|
|||
|---|---|---|---|
|
#18+
Марос марос но Хочешь замерить время открытия рекордсета (в разных условиях) - делай Код: plaintext 1. 2. Причем лучше цикл поменьше, а рекордсет покруче. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.09.2003, 00:50 |
|
||
|
Встать! Суд (над асинхронными запросами) идет! :)
|
|||
|---|---|---|---|
|
#18+
Ок. Попробоваю. Но в этом случае я запущу несколько запросов, обращающихся к одним и тем же записям параллельно/непараллельно друг к другу. А я хочу совместно/последовательно с запросом запустить запустить какое-нибудь постороннее действие, и посмотреть, как это в Акцесе отработается... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.09.2003, 00:56 |
|
||
|
Встать! Суд (над асинхронными запросами) идет! :)
|
|||
|---|---|---|---|
|
#18+
По-моему, в цикле "Последовательно" ты меряешь время запроса + время цикла, а в цикле "Параллельно" просто время цикла. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.09.2003, 01:02 |
|
||
|
Встать! Суд (над асинхронными запросами) идет! :)
|
|||
|---|---|---|---|
|
#18+
В "последовательно" я меряю время запроса + время цикла, а в "параллельно" - время более длинного из них. Судя по словам Нуфа, во случае с "параллельно" они должны были мешать друг другу настолько, что время выполнения стало бы превышать совокупное время последовательного выполнения. А ЛП сказал, что я измерял то, не знаю что. И я склонен ему верить. Или не верить. Ну вот, я опять запутался... :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.09.2003, 01:10 |
|
||
|
Встать! Суд (над асинхронными запросами) идет! :)
|
|||
|---|---|---|---|
|
#18+
Гео, не, это я плохо спать буду :) В смысле мало, но рассказать ближнему то, что сам знаешь – дело хорошее, ибо откликнется тем же (надеюсь)… Итак… Во-первых… >Set rs = CurrentDb.OpenRecordset("Select * from t where t.fio=""Иванов"";", , dbRunAsync) >' На самом деле последний аргумент не нужен и мотивация: >CurrentDb.OpenRecordet без этого аргумента работает асинхронно, до тех пор, пока не начнешь обращаться еще к неподготовленным записям рекордсета. А-ля форма, которая показала первую запись, еще не дождавшись последней... Здрасте на куй я ваша дядя (C) ЛП По умолчанию все запросы и при запуске из любой библиотеки (дао/адо/акссес(ДуЦМД)) выполняются синхронно. "А-ля форма, которая показала первую запись, еще не дождавшись последней" реализована не через асинхронное выполнение. Т.е. открытие рекордсета из кода с умолчательными параметрами не есть открытие рекордсета формой с прописанными параметрами асинхронного режима. Более того, часть запроса запущенного формой выполняется в синхронном режиме, а часть в асинхронном. Эдо дело рулится параметрами, грубо говоря, AsyncExecute, FetchCacheSize и AsyncFetch. "Грубо говоря" потому что в каждой библиотеке названия свои… AsyncExecute отвечает за то, что запрос должен выполняться асинхронно; AsyncFetch говорит что часть запроса должна быть выполнена синхронно, а оставшаяся часть – асинхронно; ну и FetchCacheSize характеризует какое количество записей должно быть возвращено запросом в синхронном режиме, при этом все остальные записи возвращаются уже в асинхронном. Так вот формы при открытии указывают следующие параметры: AsyncExecute = True, FetchCacheSize = 500 и AsyncFetch = True. В результате мы видим, что в момент возникновения OnOpen формы (самое первое событие) рекордсет содержит 501 запись (количество возвращенных записей в синхронном режиме). Все остальные записи будут возвращаться в асинхронном, а значит в момент, когда более приоритетные потоки (в нашем случае поток, выполняющий VBA код) простаивают. Желаешь убедиться? Сделай так: 1) Создай ленточную форму на основе длинющей-длинющей таблички; 2) в заголовке формы создай текстовое (свободное) поле; 3) установи таймер в одну секунду 4) по таймеру пихай в текстовое поле количество записей в рекордсете, подключенном в форме; 5) убедись, что загрузка записей производится… А теперь пункты 1 и 2 те же, а вот остальные следующие: 3) установи таймер в 1 мс; 4) в процедуре таймера запусти бесконечный цикл (Do … Loop без параметров) внутри которого читай количество записей в рекордсете и выводи в текст бокс. Убедись, что загрузка записей НЕ производится… И в том и в другом варианте на всякий случай делай репаинт... На счет твоего теста… Вот не знаю как там DAO обходится с асинхронностью (но точно по умолчанию режим синхронный), но вот как ADO обходится – знаю, поэтому буду судить о твоем тесте по "правилам" ADO. Выполнение "Последовательно" – ну здесь всё просто. Выполнение "Параллельно" – всё не так! Даже если ЛП не прав на счет асинхронности только для ОдиБиСи и предположим, что запрос выполнялся всё ж таки асинхронно, то вот что произошло: Код: plaintext 1. 2. 3. 4. 5. 6. Кстати, если будешь выполнять описанный мной тест с формами, то проделай следующее – открой сразу две копии одного и того же мдбэшки, расположи рядом (чтобы было видно и то и другое), запусти 1-й вариант теста и попереключайся между этими задачами. О результатах расскажешь :) Ну как мог… з.ы. щаз увидел продолжение дискуссии, но уже завтра... усе завтра... в смысле сегодня, но завтра :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.09.2003, 01:59 |
|
||
|
Встать! Суд (над асинхронными запросами) идет! :)
|
|||
|---|---|---|---|
|
#18+
Поправочка... Начиная с "Здрасте на куй я ваша дядя (C) ЛП " По умолчанию все запросы и при запуске из любой библиотеки (дао/адо/акссес(ДуЦМД)) выполняются синхронно. "А-ля форма, которая показала первую запись, еще не дождавшись последней" реализована не - (лишнее, надо выкинуть!) через асинхронное выполнение. Т.е. открытие рекордсета из кода с умолчательными параметрами не есть открытие рекордсета формой с прописанными параметрами асинхронного режима. Конечный вариант правки: Здрасте на куй я ваша дядя (C) ЛП По умолчанию все запросы и при запуске из любой библиотеки (дао/адо/акссес(ДуЦМД)) выполняются синхронно. "А-ля форма, которая показала первую запись, еще не дождавшись последней" реализована через асинхронное выполнение . Т.е. открытие рекордсета из кода с умолчательными параметрами не есть открытие рекордсета формой с прописанными параметрами асинхронного режима. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.09.2003, 02:04 |
|
||
|
Встать! Суд (над асинхронными запросами) идет! :)
|
|||
|---|---|---|---|
|
#18+
Еще... На самом деле форма может возвращать в синхронном режиме либо все записи, либо 501, либо то количетсво записей, которое в данный момент может быть отображено на экране... Но это уже в следующий раз как-нибудь... Еще "еще"... В твоем тесте в цикл надо вставить отображение количества загруженых записей (хотя бы так, как это сделал я - через отображение в текстбоксе) и... убедиться, что в таком цикле нифига записи не будут грузиться, а если и будут, то только за счет жалости виндоус - поток с запросом попадет в статус "голодающих" и винда будет ему иногда подкидывать процессор. Дело изменится, если ты в цикл вставишь DoEvents, сознательно отказваясь в потоке VBA кода от выделенного кванта времени в пользу других. вот тогда ты увидишь реальную загрузку данных в асинхронном режиме, реальное поочередное выполнение потоков в многозадачной системе и вот именно здесь ты и получишь результаты замера по времени с 11-ой секундой! :) Всё! Спать! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.09.2003, 02:15 |
|
||
|
Встать! Суд (над асинхронными запросами) идет! :)
|
|||
|---|---|---|---|
|
#18+
Нуф-Нуф, я тебе, конечно, верю, но почему "параллельная функция" отработала быстрее "последовательной" ты по-русски сказать можешь? Или признать, что у меня в 1-м камне их штук 8? "Параллельная" по-твоему: 1) запуск запроса 2) принимаем запрос, располагаем в потоке Jet с МЕНЬШИМ приоритетом 3) цикл (это поток с большим приоритетом, поэтому Jet-овский отдыхает) 4) rs.MoveLast – заставляет остановить поток VBA и выполнять поток Jet 5) возврат в поток вба хотя бы для дебуг.принт "Последовательная" по-твоему: 1) запуск запроса 2) принимаем запрос, располагаем в потоке Jet с МЕНЬШИМ приоритетом 3) rs.MoveLast – заставляет остановить поток VBA и выполнять поток Jet 4) цикл 5) возврат в поток вба хотя бы для дебуг.принт "Переключений минимум". По сравнению с чем, млин? И там и тут по 4 строки. Либо я по пояс деревянный, либо одно из двух. Причем 5-м пунктом у тебя стоит 5) выполнение запроса Какого запроса?! - мы на 4 шаге уже получили последнюю запись. Или запрос не отработался еще весь? Да и х. с ним, мне запрос не нафих не нужен, и там, и там, я уже имею, например, кол-во возвращенных им записей. Мне непонятно, почему эта(!) программа из 4 строк отрабатывается по-разному. (Результаты стабильны, не реагируют на кол-во запусков с точностью до 3-х значащих цифр разницы). Нет, пойду я спать. (Ты, кстати, чего сам не спишь?) А завтра буду работать и заодно почитаю где-нить про асинхронные запросы. Сейчас только покурю... И Гетца полистаю... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.09.2003, 05:29 |
|
||
|
Встать! Суд (над асинхронными запросами) идет! :)
|
|||
|---|---|---|---|
|
#18+
>но почему "параллельная функция" отработала быстрее "последовательной" ты по-русски сказать можешь? Geo, могу. Во-первых, в твоих тестах небыло никакого "паралельного" выполнения. В своих "ночных" постах я описал тест (для форм) и модификацию твоего теста, которые помогут тебе :) Во-вторых, Многозадачная система однако - погрешность в замерах времени неизбежна в любом случае. >"Переключений минимум". По сравнению с чем, млин? И там и тут по 4 строки. Либо я по пояс деревянный, либо одно из двух. :) Гео, еще пол-года назад я тоже ну нифига не знал о всяких там потоках, приоритетах, локальных стеках, мьютексах, симафорах, критических секциях и еще туевой хучи (кстати, о кучах тоже не знал:). Сейчас всё НАЧИНАЕТ проясняться. Спустя пол-года! Чё бы там нибыло, я не считаю себя по пояс деревянным, во-первых потому, что для меня это не первоочередная задача, а во-вторых из-за того, что я ранее никогда не мыслил и не оперировал понятиями многозадачных ОС. А ты хочешь за пару дней (на сколько я понял раньше ты не занимался в плотную этим вопросом) всё сразу схавать :) По поводу твоих тестов... Еще раз, выполни МОИ вариатны тестов и убедись, что в ТВОИХ вариантах ну нет ПАРАЛЛЕЛЬНОГО выполнения. В моих пояснениях в самой первой строке указаны потоки и все нижние строки разнесены по ним. Правда хреновато получилось. Попробую по другому оформить: Последовательное выполнение: Код: plaintext 1. 2. 3. 4. 5. 1 - запускаем запрос, т.е. вызываем ADO-метод. Кстати, здесь я логически вынес ADO в отдельный поток, хотя на самом деле это (видимо) не так - коль скоро ADO расположена в dll-ке, то она выполняется за счет вызвавшего ее потока, хотя, конечно, может создавать и собственные. И еще раз повторю, что главный вопрос не в том, как работает Виндоус, а как реализован Аксес! 2 - ADO получает запрос и выполняет его в синхронном режиме (тормознув поток VBA) 3 - выполнение цикла 4 - конец "Параллельное" выполнение (Хотя оно у тебя не получилось параллельным!): Код: plaintext 1. 2. 3. 4. 5. 6. 7. 1 - запускаем запрос, т.е. вызываем ADO-метод. 2 - ADO получает запрос и выполняет его в Асинхронном режиме (запустив поток Jet с меньшим приоритетом). Т.е. здесь поток Jet уже может выполнять запрос, но ему просто не дают шанса, ведь есть более приоритетная задача - крутить цикл; 3 - выполнение цикла 4 - rs.MoveLast – заставляет остановить поток VBA и выполнять поток Jet 5 - выполняется запрос 6 - конец Кстати, приоритетность потоков 100 пудово не единственный фактор! Т.е. потока синхранизируются одним из стандартных механизмов, но каким и как я не знаю. Т.е. обсуждаемый здесь вопрос не по Многозадачности и Виндоус, а по реализации Многозадачности Аксесом стандартными механизмами Виндоус. Разница ОЧЕНЬ ВАЖНА! О реализации винды писано моте информации (оно и понятно), а о реализации акса - практически ничего... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.09.2003, 11:39 |
|
||
|
Встать! Суд (над асинхронными запросами) идет! :)
|
|||
|---|---|---|---|
|
#18+
Нет, брат, так просто ты от меня не отвертишься. Я, после получения своих результатов, избегал пользоваться терминами "асинхронный", да и "паралельный" употреблял преимущественно в кавычках. 1. "Параллельная" функция у тебя содержит 6 шагов по сравнению с 4-мя шагами "последовательной". Т.е. она должна выполняться дольше? У меня же получилось наоборот. Быстрее, более чем на 20%. Погрешность в замерах времени? Я ж сказал, что запускал их несколько раз, и сейчас запустил. И - циферка в циферку - тот же результат. Вообще, я берусь утверждать, что мои процедуры в обоих случаях заставляю акцес инициализировать равное кол-во переключений. Более быстрое выполнение "параллельного" варианта обусловлено, скорее, как раз виндами, т.к. они, при всей своей вытесняющей многозадачности, обязаны отдавать процессорное время и задаче с меньшим приоритетом, иначе они бы работали как в известном анекдоте про Билла Гейтса и дискету. Возможно, и в том, и в другом случае Jet получает свое время, но в "параллельном" он находит, чем это время занять, а в "последовательном" просто рапортует, что делать, мол нечего, и спасибо на добром слове. 2. В Гетце (2-й том, 1-го у меня сейчас нету) по оглавлению не встретил ничего похожего, но, думаю асинхронные запросы - это запросы, в первую очередь исполняемые именно на сервере (пусть даже им выступает лок. к-р), не в Акцессе. Тогда по определению они должны давать выигрыш в скорости работы - аксу делать-то нечего, сиди себе да опрашивай StillExecuting. 3. Так и знал, что спать буду плохо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.09.2003, 12:41 |
|
||
|
Встать! Суд (над асинхронными запросами) идет! :)
|
|||
|---|---|---|---|
|
#18+
>Нет, брат, так просто ты от меня не отвертишься. НА-СИ-ЛУ-ЮТЬ!!! Гео, да ты что? Я неслыханно рад, что нашелся еще один человек, который пытается разобраться в том, как же это все работает, а не "отвертивается" словами типа: "Акс - это среда быстрой разработки и информации из Helpа для работы с ним вполне достаточно". Другое дело, что мы не можем никак синхронизировать наши термины и наши исходные понятия :( >1. "Параллельная" функция у тебя содержит 6 шагов по сравнению с 4-мя шагами "последовательной". Т.е. она должна выполняться дольше? У меня же получилось наоборот. Быстрее, более чем на 20%. Эти 6 шагов - всего лишь мое предположение и как реально работает АКСЕСС я не знаю. На счет всего остального - х.з. Единственное, что могу утверждать - пока ты не проведешь описанные мной тесты, не проанализируешь результаты, не сделаешь выводы и не выложишь их сюда - мы так и будем стоять на месте, выясняя кто и что имел в виду под термином "параллельно". Я не пытаюсь тебя нагло эксплуатировать (типа, пусть всё сделает, а мне потом расскажет) - я эти тесты давно проделал. И даже еще одни тесты и еще одни... Но мы даже с нашими первыми не разобрались. А на сегодня у меня всё. Инет "закончился" :) До завтра! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.09.2003, 14:11 |
|
||
|
Встать! Суд (над асинхронными запросами) идет! :)
|
|||
|---|---|---|---|
|
#18+
2Нуф-Нуф Попробовал я сделать то что ты предложил: №1: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. №2 Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. Вот результаты: №1: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. №2 src]Мешаем загружать записи 1 1 1 1 ...[/src] А вот еще одна: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. И ее результат: Код: plaintext 1. 2. 3. 4. 5. Эта, последняя - всего лишь небольшая переделка моего первого теста. Т.е. кол-во записей вроде-бы тоже = 1, но в итоге переход к последней записи, после того как мы, вроде бы, не давали Jet'у передохнуть, дался ему намного легче... Объясняй :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.09.2003, 17:08 |
|
||
|
Встать! Суд (над асинхронными запросами) идет! :)
|
|||
|---|---|---|---|
|
#18+
Однажды, после долгих раздумий,заметил, что Асинхронность - это всего лишь DoEvents внужных местах. Что успешно и применял. Очень хорошо получаеться использовать асинхронность в клиент-серверных приложениях - только не забыдь предусмотреть "отваливанивание" клиента. С mdb - сложней: умер клиент - умерла "асинхронность". Пример: оператор нажав кнопку Сохранить документ (к-ая запускает 10минутную процедуру(ы)) - ... выключил ПК - а чё - документ-то провелся. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.09.2003, 18:22 |
|
||
|
Встать! Суд (над асинхронными запросами) идет! :)
|
|||
|---|---|---|---|
|
#18+
не в тему.... а что делает акс когда пишет "Обработка команды..." ? уж не выполняет ли какие действия связанные с асинхронностью ? у меня большая проблема. это "обработка команды" гадит весь интерфейс программы. мелькание не управляемое (уже после эхо=тру), тармаза... и что может делать акс(адр) 0.3 сек? уже после обработки всех действий оператора? доделывать асинхронные дела? какие? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.09.2003, 22:17 |
|
||
|
Встать! Суд (над асинхронными запросами) идет! :)
|
|||
|---|---|---|---|
|
#18+
доделывать асинхронные дела? Хршо... :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.09.2003, 22:24 |
|
||
|
Встать! Суд (над асинхронными запросами) идет! :)
|
|||
|---|---|---|---|
|
#18+
тебе смешно ...... а я всё что можно сломал на этим ужо бредить начал... решение красивое. алгоритмы всё решены красиво. все дело идет к прекраной конфетке... все нравится ... а эта гадость обмазывает .... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.09.2003, 22:31 |
|
||
|
Встать! Суд (над асинхронными запросами) идет! :)
|
|||
|---|---|---|---|
|
#18+
2вадя Да я сам из-за Нуфа уже извилину свою покривил всю. Синхронно, несинхронно, млин. Чепуха какая-то. Пусть теперь объясняет :) Вообще я думаю (все, что я пишу, касается дао, про адо я знаю только его название), что запрос на выборку, селект то бишь, отрабатыватся по умолчанию "А-синхронно", т.е. положил, сколько просят, и не мешай, пока не позовут. А изменение и добавление (упдате и инсерт соответственно) стараются отработаться сразу, "Синхронно" (по-нашему, сделай дело - гуляй смело), и пофиг им, что кто-то чего-то там хочет еще сказать. Это все если по умолчанию и на локальной машине. Если на другой, на сервере там, или еще где, то все становится понятным. Он работает, а ты смотришь, пока он флажок Executing не выставит. А вот на локалке... Но про упдаты я уже сегодня смотреть не буду - что я, дурак что-ли, завтра опять с расстройства квасить?.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.09.2003, 22:46 |
|
||
|
Встать! Суд (над асинхронными запросами) идет! :)
|
|||
|---|---|---|---|
|
#18+
Geo, наш диалог, имхо, перешел во вторую стадию - стадию тестов. Я терминологией определились, с общими принципами организации ВИНДОЙ многозодачности - тоже, осталось разобраться с Аксом :) Результаты твоих тестов показались странными, поэтому пока объяснить ничего не могу. Т.е. у меня никогда не получалось в OnOpen увидеть одну запись (твой второй тест, где результат - 1). Буду пробовать еще раз. На счет "буду пробовать" и "стадия тестов"... К сожалению не сегодня... С работы сразу в гараж (внеплановый ремонт машины собственными силами), а сейчас уже тоже уезжаю - комп доступен не будет. Надеюсь завтра провести ряд тестов и продолжить тему. ======= Виктор, на счет DoEvents во "нужных местах" согласен на все 100%, вот только в большинстве случаев такие нужные места находятся методом тыка или подсознательных предположений, что, дескать, не помешало бы тут ДуЭвентс влепить (тупые долгоиграющие циклы не в счет). Вот и хочется перейти с подсознательного использования на абсолютно осознанное :) Тем более, что мне за это не платят На счет примера с mdb спасибо! Получилось в тему топка, ну то есть в контексте означенной в самом первом посте топика задачи. Учтем... ======= Вадя, на счет " а что делает акс когда пишет Обработка команды...? " думаю из разряда "фик его знает", тем более, что наверняка делает разные вещи - без тестов не обойтись ;) //пытается втянуть в начинающуюся авантюру с тестированием еще одного участника :) Т.е. тестировать, тестировать и еще раз тестировать! Хотя, я тут вспомнил один прикол на эту тему - сегодня повспоминаю все тонкости, а завтра сформулировать и выложить. Но ты тоже не сиди "без дела" (в решении данного вопроса) - составь список всех (интересных тебе) команд, которые заставляют акс писать такие гадкие вещи :) ======== Sfagnum, не прячься! Се равно мы знаем, что ты сюда заглядуешь и даже идеи для общего дела тыриш Т.е. я к тому, что вместо ФАКа отвечу тебе здесь... Я не против того, чтобы дальше описать всё то, что наобещал там, но, во-первых краткие выжымки-ответы уже доступны в этом топике, а во-вторых моя уверенность пошатнулась :) Видиш ли, пришел Гео, начал задавать провокационные вопросы и почва под ногами начала плавать Т.е. мне необходимо время, чтобы еще всё разок протестировать и убедиться, что всё что я знаю - верно. Всем удачи! //ушел... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2003, 20:30 |
|
||
|
Встать! Суд (над асинхронными запросами) идет! :)
|
|||
|---|---|---|---|
|
#18+
2Нуф-Нуф Если честно, на mdb я ничего подобного не использовал (кроме "тупых циклов" - что получалось достаточно симпатично: грузиться журнал, а спрогой можно работать (в т.ч. и с журналом)) На Adp - другое дело: Открыл Connect как "асинхронный" и все теперь чудестным образом (спасибо фее Билли) открываеться асинхронно. А клиент теперь может благополучно и скончаться, не дожидаясь ответа сервера (или нет? надо проверить (фее могла и на ср%ть), но у меня че-то 10-минутных задач не попадалось) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.09.2003, 21:41 |
|
||
|
Встать! Суд (над асинхронными запросами) идет! :)
|
|||
|---|---|---|---|
|
#18+
Уфф... Все сделал. Решил перед отходом ко сну перечитать, что ты сегодня написал, и обратил внимание на определились с общими принципами организации ВИНДОЙ многозодачности Уже? Ты куда торопишься? ;) А про отсутствующую 11-ю секунду, из-за которой шум-гам? Или спишем ее на акцес или же jet? Блин, сейчас сделаю тест по варианту ЛП... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2003, 03:07 |
|
||
|
Встать! Суд (над асинхронными запросами) идет! :)
|
|||
|---|---|---|---|
|
#18+
2Нуф-Нуф Не совсем по варианту ЛП, но похоже. Та же мдб-шка "все-в-одном", две идентичных таблицы t и t1 Процедура № 1 Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. Процедура № 2 Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. Вспомогательная Код: plaintext 1. 2. Каждую из процедур запускал по 5 раз с и без аргумента dbRunAsync. Вот: Код: 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. Итак. Во время цикла явно "что-то происходит". Аргумент dbRunAsync явно на что-то влияет, хотя и не должен. Причем по-разному. Все. Если ты это не объяснишь, то я больше никогда... Никогда(!) не буду даже думать про эти дурацкие запросы. Только спать мешают :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2003, 04:17 |
|
||
|
Встать! Суд (над асинхронными запросами) идет! :)
|
|||
|---|---|---|---|
|
#18+
Да, я не написал, что во всех четырех случаях печатались такие результаты: после открытия рекордсетов: nnn мс. Rs: 1 rs1 1 после rs.moveLast: nnn мс. Rs: 229376 rs1 1 после rs1.movelast: nnn мс. Rs: 229376 rs1 229376 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2003, 04:31 |
|
||
|
Встать! Суд (над асинхронными запросами) идет! :)
|
|||
|---|---|---|---|
|
#18+
ЛП писал:"dbRunAsync Runs an asynchronous query ( ODBCDirect workspaces only )."а у меня: "Executes the query asynchronously (ODBCDirect Connection and QueryDef objects only)." Правда у меня Access'97 Geo писал:я тебе, конечно, верюНу ребяты прям Королёва с Тарзаном млин... :) Нуф-Нуф писал:Sfagnum, не прячься!Внимательно наблюдаю, но как Му-му. Geo писал:Итак. Во время цикла явно "что-то происходит". Аргумент dbRunAsync явно на что-то влияет, хотя и не должен. Почему не должен??? а на хрена он тогда??? Geo писал:Причем по-разному.2 раза в одну и ту же реку не войти...(смысл высказавания какого то древнего мудреца) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2003, 11:03 |
|
||
|
Встать! Суд (над асинхронными запросами) идет! :)
|
|||
|---|---|---|---|
|
#18+
а у меня: "Executes the query asynchronously (ODBCDirect Connection and QueryDef objects only)." Правда у меня Access'97 А у меня тоже аксес 97-й есть. Но русский. "dbRunAsync Асинхронное выполнение запроса (только для объектов Connection и QueryDef в рабочей области ODBCDirect)" Учи английский, Мох! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2003, 11:30 |
|
||
|
Встать! Суд (над асинхронными запросами) идет! :)
|
|||
|---|---|---|---|
|
#18+
учись цитировать хорошо переносящий обрезание причём с двух сторон... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2003, 13:32 |
|
||
|
Встать! Суд (над асинхронными запросами) идет! :)
|
|||
|---|---|---|---|
|
#18+
не понял... у тя что хелп переводной под Access'97? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2003, 14:14 |
|
||
|
Встать! Суд (над асинхронными запросами) идет! :)
|
|||
|---|---|---|---|
|
#18+
В смысле? Аксес 97 - русский, и хелп к нему не чукотский аднака. В тоже русском ХР - как ни странно фифти (русский) - фифти (чукотский) - фифти (вапсче нет). Что то много фифтей получилось :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2003, 14:17 |
|
||
|
Встать! Суд (над асинхронными запросами) идет! :)
|
|||
|---|---|---|---|
|
#18+
А, я понял. Ты наверное DAO обновлял (сервиспачил). Поставил аглицкий DAO с аглицким же хелпом. Было когда-то такое. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2003, 14:23 |
|
||
|
Встать! Суд (над асинхронными запросами) идет! :)
|
|||
|---|---|---|---|
|
#18+
Да нет всегда был аглицкий, не люблю русифицированный софт... да и не дают :) Вышли, если не жалко, эти файлы, мыло в профиле "C:\Program Files\Microsoft Office\Office\ACMAIN80.HLP" "C:\WINDOWS\SYSTEM\JETSQL35.HLP" если есть хлп к более позднему Jet'у тоже буду рад ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2003, 14:29 |
|
||
|
Встать! Суд (над асинхронными запросами) идет! :)
|
|||
|---|---|---|---|
|
#18+
Ок, вечером пошлю. Хелпа к более позднему - нихт. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2003, 14:45 |
|
||
|
Встать! Суд (над асинхронными запросами) идет! :)
|
|||
|---|---|---|---|
|
#18+
Пасибки ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.09.2003, 15:17 |
|
||
|
Встать! Суд (над асинхронными запросами) идет! :)
|
|||
|---|---|---|---|
|
#18+
Geo, кроме того, что уже говорил добавить нечего... Во-первых, разница в 15 сотых секунды слишком мала, чтобы делать по ней выводы в условиях многозадачной среды... Во-вторых, ни в одном из твоих последних тестов опять нет "параллельности" - запросы может быть и асинхронно запускаются, но не выполняются параллельно коду. Самое интересное я не увидел: Код: plaintext 1. 2. 3. 4. 5. Для того, чтобы увидеть всё же параллельное выполнение (без кавычек) добавь в цикл DoEvents и еще разок запусти... На выходе из цикла количество записей в рекордсете должно быть больше 1... С DAO не эксперементировал, но с ADO именно так и было. И вот теперь, когда мы добились настоящей параллельности замеряй время выполнения. "11-я секунда" тебе гарантированна. Но это так... Отмазки... Как-нибудь найду время и силы, свояю базку с всеми необходимыми и что-либо объясняющими тестами, выложу ее где-нибудь и обязательно вернусь к данной теме... А пока... Пока можно считать, что твои тесты остались без комментариев с моей стороны и ты теперь можешь спать спокойно :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.09.2003, 23:01 |
|
||
|
Встать! Суд (над асинхронными запросами) идет! :)
|
|||
|---|---|---|---|
|
#18+
Хорошо. Ложусь, млин, спать Но. После цикла (см. результаты) общее време переходов все равно оказалось меньше, чем без него. Почему? А? :)) Мдб, это, конечно, не асинхронность, и все равно забавно.... Лана, поползло спать. На самом деле, я согласен, что тесты, которые я делал, никакого отношения к "асинхронности" в понимании акцеса не имеют. Ну и дай бох ему... :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.09.2003, 23:10 |
|
||
|
Встать! Суд (над асинхронными запросами) идет! :)
|
|||
|---|---|---|---|
|
#18+
>Ок, вечером пошлю. Обещеного 3года ждут.... :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.09.2003, 09:42 |
|
||
|
Встать! Суд (над асинхронными запросами) идет! :)
|
|||
|---|---|---|---|
|
#18+
Сфагнум, ну ты бы хоть уточнил, что последний пост к ЛП на счет русскоязычного Хелпа, а то я прям весь нервичать стал :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.09.2003, 11:59 |
|
||
|
Встать! Суд (над асинхронными запросами) идет! :)
|
|||
|---|---|---|---|
|
#18+
2 Мох Блин, ну нету у меня дома 97-го офиса, нету А до работы все никак не доберусь :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.09.2003, 14:14 |
|
||
|
Встать! Суд (над асинхронными запросами) идет! :)
|
|||
|---|---|---|---|
|
#18+
Не знал я, что ты водкой стал Поправляйся... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.09.2003, 14:48 |
|
||
|
Встать! Суд (над асинхронными запросами) идет! :)
|
|||
|---|---|---|---|
|
#18+
несколько прошу вернуться к теме , Господа! если не ошибаюсь, здесь речь шла об асинхронности и синхронности.... Позвольте-с задать вопрос. исть форма, язи её в ..., в ней происходит обновление поля 1 из VBA. форма значится типа ленточная. обновление вызывается при получении фокуса полем. не полем 1. так вот вся хрень получается когда форма обновляется сама , типа асинхронно, через 0.3сек после отработки нажатия на клавишу. когда обновляется форма (типа "асинхронно") происходит и вызов функций в полях, ну типа в данных поля =хххх(пп). соответственно и информация появляется в полях с задержкой. ну это была приамбула... уточняю: ADP , и конечно ХР в источнике данных ХП, команда синхронизации ХП. собственно сам вопрос: возможно ли такое, что форма ждет с сернвака какие-то данные для заполнения кеша, буфера или еще чего? определенного количества записей? или еще какой хрени от сервера и не дождавшись - решает, что нефиг дальше ждать - обнавляется? может чё поменять нада? там размер или количество ? у рекордсета ? или в ХП поставить SET ROWCOUNT ON? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.09.2003, 19:29 |
|
||
|
|

start [/forum/topic.php?all=1&fid=45&tid=1679374]: |
0ms |
get settings: |
6ms |
get forum list: |
9ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
49ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
45ms |
get tp. blocked users: |
1ms |
| others: | 195ms |
| total: | 318ms |

| 0 / 0 |
