Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Окно загрузки файла
|
|||
|---|---|---|---|
|
#18+
Перед запуском проги идет загрузка большого объема данных. Примерно 10 секунд. Как сделать чтобы появилось такое красивой окно загрузки и на нем там или точки бегали или картинки менялись. Ну в общем по уму такое окошко, типа как при запуске фотошопа идет :) Толи гуглить не могу, толи нет такой инфы. В нете нашел только как закрыть свое окно. А как его изменить в процессе не нашел. С решением, которое нашел можно сделать так, форма, на ней надпись загрузка. По завершению loading-а закрыть окно. Но это некошер. Кто подскажет кошер. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 12:14 |
|
||
|
Окно загрузки файла
|
|||
|---|---|---|---|
|
#18+
ShamanusПеред запуском проги идет загрузка большого объема данных. Примерно 10 секунд. DoEvents или описывай подробно, что такое загрузка данных. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 12:17 |
|
||
|
Окно загрузки файла
|
|||
|---|---|---|---|
|
#18+
Shocker.Pro, загрузка данных это последовательность SQL запросов в базу. Их 14 штук. Каждый отрабатывает разный период времени часть полсекунды, некоторые около 5 секунд Код такой Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. проблема в том как запаралеллить процес и рисования на форме всяких картинок и загрузку, если приложение в момент загрузки запроса виснет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 13:14 |
|
||
|
Окно загрузки файла
|
|||
|---|---|---|---|
|
#18+
Использовать асинхронное соединение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 13:21 |
|
||
|
Окно загрузки файла
|
|||
|---|---|---|---|
|
#18+
Shamanusпроблема в том как запаралеллить процес и рисования на форме всяких картинок и загрузку, если приложение в момент загрузки запроса виснет. а тебе пауз между запросами недостаточно? Если нет - тогда асинхронное выполнение запроса ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 13:22 |
|
||
|
Окно загрузки файла
|
|||
|---|---|---|---|
|
#18+
Shocker.Pro, Antonariy Сейчас попробую, но есть подозрение, что и вся проблема выполнения запроса это не само время sql, а именно задрежка в процессе в загрузке данных в массив. У меня по итогам выполнения массив возвращает 300тыс записей,он и выполняется 5 секунд. В общем сейчас попробую ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 13:36 |
|
||
|
Окно загрузки файла
|
|||
|---|---|---|---|
|
#18+
Shamanusа именно задрежка в процессе в загрузке данных в массив. я ж с самого начала попросил пояснить, что такое "загрузка данных"... а вообще, загрузка такого объема данных в массив наводит на мысль об ошибках проектирования системы ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 13:40 |
|
||
|
Окно загрузки файла
|
|||
|---|---|---|---|
|
#18+
Shocker.Pro, в общем асинхронное соединение не помогло. Shocker.Proв массив наводит на мысль об ошибках проектирования системы ну может подскажешь как верно спроектировать с такой задачей. Пользователь вносит в систему информацию о товаре. Если товар в базе данных существует, то система должна быстро сказать об этом пользователю. Справочник товаров 300 тыс записей. Пользователь вносит инфу в ТекстБокс. На каждый change этого текстбокса нужно просмотреть 300 тыс записей и найти нет ли сходного товара. Варианта реализации я вижу 2. Первый - sql запрос к источнику данных в момент заполнения поля. Время работы запроса 3-7 секунд. Второй - полная загрузка данных и поиск в массиве. Время работы 7-10 секунд. Время поиска записи в массиве менее 0,5 секунд. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 13:51 |
|
||
|
Окно загрузки файла
|
|||
|---|---|---|---|
|
#18+
ShamanusВарианта реализации я вижу 2. Первый - sql запрос к источнику данных в момент заполнения поля. Время работы запроса 3-7 секунд. Неверная индексация БД ShamanusВторой - полная загрузка данных и поиск в массиве. Время работы 7-10 секунд. Время поиска записи в массиве менее 0,5 секунд. И куча занятой памяти под массив. Идиотское решение (пойдем в категоричности стопами Антонария) Кроме того, проверку при таком объеме надо делать на на Change, а на окончание ввода: потерю фокуса, нажатие Enter, нажатие кнопки сохранить и т.п. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 13:58 |
|
||
|
Окно загрузки файла
|
|||
|---|---|---|---|
|
#18+
нашел вот такое решение сейчас попробую, вроде то, что нужно.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 13:58 |
|
||
|
Окно загрузки файла
|
|||
|---|---|---|---|
|
#18+
Shamanusнашел вот такое решение сейчас попробую, вроде то, что нужно.... это и есть асинхронный запрос. Но еще раз - не надо грузить в массив 300к записей! Для этого существует БД!!!!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 14:01 |
|
||
|
Окно загрузки файла
|
|||
|---|---|---|---|
|
#18+
Shocker.Proэто и есть асинхронный запрос. Я не по поводу запроса, тут есть ещё и фишка с количеством обработанных данных. Shocker.ProИдиотское решение (пойдем в категоричности стопами Антонария) ну весьма категорично я бы сказал :) Shocker.ProНо еще раз - не надо грузить в массив 300к записей! Для этого существует БД!!!! Все таки не всегда быстрее запрашивать. Индексы нельзя построить если обращение идет к объединению таблиц. (не партициям, а именно множеству таблиц) что именно и есть в моем случае ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 15:29 |
|
||
|
Окно загрузки файла
|
|||
|---|---|---|---|
|
#18+
Shamanus Все таки не всегда быстрее запрашивать. Индексы нельзя построить если обращение идет к объединению таблиц. (не партициям, а именно множеству таблиц) что именно и есть в моем случае Это что еще за глупость? Допускаю, что ты просто недостаточно внятно выразил мысль.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 15:34 |
|
||
|
Окно загрузки файла
|
|||
|---|---|---|---|
|
#18+
Shocker.ProShamanus Все таки не всегда быстрее запрашивать. Индексы нельзя построить если обращение идет к объединению таблиц. (не партициям, а именно множеству таблиц) что именно и есть в моем случае Это что еще за глупость? Допускаю, что ты просто недостаточно внятно выразил мысль.... Кроме того, всегда существует возможность физической реализации плоской таблицы с нужными данными и ее индексирование ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 15:36 |
|
||
|
Окно загрузки файла
|
|||
|---|---|---|---|
|
#18+
Shocker.Pro, Есть база Access. База подключена к внешним файлам, которые содержат фрагменты большой единой таблицы. Например Таблица.part1 Таблица.part2 Таблица.part3 База содержит union запрос из нескольких запросов к этим таблицам. Которые объединяют её в одну. У меня обращение из программы идет к этому запросу, с целью получения общей картины. Почему таблица фрагментирована? - местоположение программы, структурное подразделение компании не имеющее доступа в центральную БД, им приходится скидывать БД. Т.к. таблица весит 15 метров, и 7 в архиве, из-за каждого update в одну строку, высылать всю таблицу с нуля некошер. Высылаем обновленный фрагмент. - сама база Access тоже периодически обновляется, поэтому сливать фрагменты при каждом обновлении в кучу и строить индексы тоже неверно. Автоматизировать этот процесс нельзя. + есть лимит на размер почтового вложения 2 мб. - нужно чтобы фрагмент и база вкладывались в этот лимит. Ну, а если я начну расписывать причины, почему так сделано, ты начнешь категорично утверждать, что компания у нас гиблая и подход неверный :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 16:39 |
|
||
|
Окно загрузки файла
|
|||
|---|---|---|---|
|
#18+
> Автор: Shamanus А если сделать так: Пользователь вводит как минимум две(три) буквы, после этого делаешь запрос с фильтром на введённые буквы, полученный рекордсет показываешь в выпадающем листбоксе, и при допечатке символов фильтровать уже полуенный рекордсет? Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 16:43 |
|
||
|
Окно загрузки файла
|
|||
|---|---|---|---|
|
#18+
ShamanusБаза содержит union запрос из нескольких запросов к этим таблицам. Которые объединяют её в одну. У меня обращение из программы идет к этому запросу, с целью получения общей картины. Ну это не отменяет использования индексов.... хотя.... union в аксессе дурной и тормознутый, это я проходил. Может быть можно использовать обращения отдельно к индексам каждой таблицы? Shamanus Почему таблица фрагментирована? - местоположение программы, структурное подразделение компании не имеющее доступа в центральную БД, им приходится скидывать БД. Т.к. таблица весит 15 метров, и 7 в архиве, из-за каждого update в одну строку, высылать всю таблицу с нуля некошер. Высылаем обновленный фрагмент. Ну, конечно, по-хорошему, это делается на MSSQL с дистрибуцией транзакций, но причин, по которым вы не используете MSSQL может быть конечно же много. Shamanus- сама база Access тоже периодически обновляется, поэтому сливать фрагменты при каждом обновлении в кучу и строить индексы тоже неверно. Автоматизировать этот процесс нельзя. + есть лимит на размер почтового вложения 2 мб. - нужно чтобы фрагмент и база вкладывались в этот лимит. Я намекал на то, что можно теоретически, вместо памяти сливать эти данные в локальный mdb-файл. Тогда во-первых эту операцию можно будет проделывать не при каждом запуске программы, а только по необходимости, ну и, соответственно, нет проблем с индексированием. Лично я довольно косо смотрю на процесс, который отжирает от 15-ти мегов оперативки.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2010, 17:02 |
|
||
|
Окно загрузки файла
|
|||
|---|---|---|---|
|
#18+
Игорь Горбонос > Автор: Shamanus А если сделать так: Пользователь вводит как минимум две(три) буквы, после этого делаешь запрос с фильтром на введённые буквы, полученный рекордсет показываешь в выпадающем листбоксе, и при допечатке символов фильтровать уже полуенный рекордсет? like запрос к этой таблице отрабатывает 3-5 секунд. Или я неправильно что то делаю? Shocker.Pro Ну это не отменяет использования индексов.... хотя.... union в аксессе дурной и тормознутый, это я проходил. Может быть можно использовать обращения отдельно к индексам каждой таблицы? Вот тут поподробнее, вообще не пойму о чем речь. Думал построить индексы на union запрос нельзя в принципе. Shocker.ProЯ намекал на то, что можно теоретически, вместо памяти сливать эти данные в локальный mdb-файл. Тогда во-первых эту операцию можно будет проделывать не при каждом запуске программы, а только по необходимости, ну и, соответственно, нет проблем с индексированием. я вот чето не пойму, как это при необходимости? Все равно нужно будет при запуске проверять изменилось ли чего. А count по количеству записей будет отрабатывать также долго. или хранить дату/время создания фрагментов? А откуда прога знает сколько фрагментов? Shocker.ProЛично я довольно косо смотрю на процесс, который отжирает от 15-ти мегов оперативки.... Ну это ты пользователю будет сугубо лично индифферентно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2010, 08:50 |
|
||
|
Окно загрузки файла
|
|||
|---|---|---|---|
|
#18+
ShamanusДумал построить индексы на union запрос нельзя в принципе. Индексы строятся на таблицы, а не на запросы (материализованные представления в MSSQL опустим). Запросы используют эти индексы. Другой вопрос, что аксесс плохо (по крайней мере лет 5 назад, щас не знаю) работал с UNION-ами в плане скорости. другой вопрос, что ты ищешь Like-ом. Тут индексы - да, не помогут. Shamanusя вот чето не пойму, как это при необходимости? Все равно нужно будет при запуске проверять изменилось ли чего. А count по количеству записей будет отрабатывать также долго. или хранить дату/время создания фрагментов? А откуда прога знает сколько фрагментов? Почему также долго? Если Like не использует индексы, то Count-то - вполне. Насчет фрагментов - не знаю, как у тебя устроены изменения этой структуры. Твой UNION-запрос как-то ведь об этом узнает... ShamanusShocker.ProЛично я довольно косо смотрю на процесс, который отжирает от 15-ти мегов оперативки.... Ну это ты пользователю будет сугубо лично индифферентно. А что база по размеру не расширяется постоянно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2010, 09:59 |
|
||
|
Окно загрузки файла
|
|||
|---|---|---|---|
|
#18+
Shocker.ProНасчет фрагментов - не знаю, как у тебя устроены изменения этой структуры. Твой UNION-запрос как-то ведь об этом узнает... запрос "узнает" при обновлении самой базы аксесс Shocker.ProА что база по размеру не расширяется постоянно? скорость роста маленькая. За месяц прирастает 1-1,5 тыс записей. Или рост за год 4,3% или 20Мб+5%=21МБ через год. Метром больше, метром меньше .. Shocker.Pro, такой ещё вопрос в рамках этой же задачи. Я пытаюсь уже не закорачиваясь просто сделать форму, которая появляется перед загрузкой приложения, в процессе загрузки на ней меняется label, и она hide-тся после обработки всех запросов. Но форма появляется белая, как недозагруженная... вот скрин ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2010, 10:36 |
|
||
|
Окно загрузки файла
|
|||
|---|---|---|---|
|
#18+
сорри интернет тупит ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2010, 10:37 |
|
||
|
Окно загрузки файла
|
|||
|---|---|---|---|
|
#18+
> Автор: Shamanus Дык, ты, это, сначала покажи форму, дай ей отрисоватся, а потом начинай загрузку делать Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2010, 10:40 |
|
||
|
Окно загрузки файла
|
|||
|---|---|---|---|
|
#18+
Среда разработки VB6 код такой Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. в коде формы 1 никаких процедур нет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2010, 10:41 |
|
||
|
Окно загрузки файла
|
|||
|---|---|---|---|
|
#18+
Игорь Горбонос > Автор: Shamanus Дык, ты, это, сначала покажи форму, дай ей отрисоватся, а потом начинай загрузку делать Я уже понял, что из моих слов не следует, что я её рисую. Вставил код в прошлом посте. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2010, 10:42 |
|
||
|
Окно загрузки файла
|
|||
|---|---|---|---|
|
#18+
> Автор: Shamanus Ты забыл сделать рефреш для лейбла и поставить DoEvents перед каждым выполнением запроса Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2010, 10:55 |
|
||
|
Окно загрузки файла
|
|||
|---|---|---|---|
|
#18+
Игорь Горбонос > Автор: Shamanus Ты забыл сделать рефреш для лейбла и поставить DoEvents перед каждым выполнением запроса Сделал doevents все заработало. Спасибо Игорь. а что значит рефреш для лейбла, разве строка Код: plaintext не есть рефреш? или должна быть какая то команда типа .update ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2010, 10:59 |
|
||
|
Окно загрузки файла
|
|||
|---|---|---|---|
|
#18+
> Автор: Shamanus > а что значит рефреш для лейбла, Код: plaintext Posted via ActualForum NNTP Server 1.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2010, 11:27 |
|
||
|
Окно загрузки файла
|
|||
|---|---|---|---|
|
#18+
Игорь Горбонос > Автор: Shamanus > а что значит рефреш для лейбла, Код: plaintext Игорь спасибо, Вы очень помогли ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2010, 15:49 |
|
||
|
Окно загрузки файла
|
|||
|---|---|---|---|
|
#18+
Можно еще AutoRefresh форме поставить ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2010, 15:53 |
|
||
|
Окно загрузки файла
|
|||
|---|---|---|---|
|
#18+
Игорь Горбонос, Игорь Горбоноспоставить DoEvents перед каждым выполнением запроса получается что запрос будет работать в фоне? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2010, 21:46 |
|
||
|
Окно загрузки файла
|
|||
|---|---|---|---|
|
#18+
aduka05admИгорь Горбонос, Игорь Горбоноспоставить DoEvents перед каждым выполнением запроса получается что запрос будет работать в фоне? Да. Только не из-за DoEvents, а из-за асинхронного его запуска. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2010, 21:49 |
|
||
|
Окно загрузки файла
|
|||
|---|---|---|---|
|
#18+
Shocker.Pro, а если обычным запросом разве не будет в фоне? вы говорили что в 1с grid догружается , а не разом заполняется это и есть асинхронный метод , или это что то другое? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2010, 21:53 |
|
||
|
Окно загрузки файла
|
|||
|---|---|---|---|
|
#18+
aduka05admИгорь Горбонос, Игорь Горбоноспоставить DoEvents перед каждым выполнением запроса получается что запрос будет работать в фоне? Что значит в фоне? Собственно выполнятся будет именно запрос, а форма будет болтатся перед глазами в фоне. Это если запрос синхронно выполнять. А DoEvents нужен для отрисовки всего что нужно и больше ни для чего :) А если запрос выполнять асинхронно, то там другая(событийная) схема работы будет. Собственно ничего сложного, но код будет выглядеть по другому ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2010, 22:28 |
|
||
|
Окно загрузки файла
|
|||
|---|---|---|---|
|
#18+
Игорь Горбонос, Игорь ГорбоносЧто значит в фоне? не будет зависшего окна , пока не выполнится запрос так как насколько понял DoEvents активным делает окно , а запрос делается и не тормозит работу Игорь ГорбоносА DoEvents нужен для отрисовки всего что нужно и больше ни для чего :) ну тоже самое про что я сказал выше? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2010, 22:33 |
|
||
|
Окно загрузки файла
|
|||
|---|---|---|---|
|
#18+
aduka05admа если обычным запросом разве не будет в фоне? Что ты понимаешь под фоновым выполнением? Как правило есть пользовательский интерфейс, который всегда должен быть доступен и откликатся на реакцию пользователя. Для достижения этих требований всякие долгоиграющие вычисления стараются выполнять в отдельном потоке и называют этот отдельный поток - фоновым. Из-за сложностей с реализацией отдельных потоков на VB, да и не только на VB, при долгой первоначальной загрузке программы используют метод называемый SplashScreen. Его суть заключается в следующем: при старте программы показывается обычная форма с красивым рисунком и если нужно с объяснительным текстом. Эта форма и будет имитировать работу, но на самом деле будет фоном для реальных действий, которые выполняются не в фоне, но без видимых последствий. По окончании всех первоначальных загрузок форма прячется и показывается уже окно, с которым будет работать пользователь. aduka05admвы говорили что в 1с grid догружается , а не разом заполняется это и есть асинхронный метод , или это что то другое? Это что-то другое и не асинхронное. Можно сделать свой класс-datasource который будет постепенно получать данные от сервера или читать из файла и грид, присоединенный к объекту этого класса будет отображать полученные данные. А асинхронность это реализация АДО, в 1с врядли используют АДО. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2010, 22:51 |
|
||
|
Окно загрузки файла
|
|||
|---|---|---|---|
|
#18+
aduka05admне будет зависшего окна , пока не выполнится запрос так как насколько понял DoEvents активным делает окно , а запрос делается и не тормозит работу Зависшее окно как раз будет, пока будет выполнятся запрос, но т.к. на форме ничего важного нет, это не важно. Именно для этого окно и показывается. А DoEvents всего лишь дает отрисовать новую информацию. И все. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2010, 22:55 |
|
||
|
Окно загрузки файла
|
|||
|---|---|---|---|
|
#18+
Игорь Горбонос, Игорь ГорбоносЕго суть заключается в следующем: при старте программы показывается обычная форма с красивым рисунком и если нужно с объяснительным текстом. Эта форма и будет имитировать работу, но на самом деле будет фоном для реальных действий, которые выполняются не в фоне, но без видимых последствий. По окончании всех первоначальных загрузок форма прячется и показывается уже окно, с которым будет работать пользователь. спасибо , просто я думал запрос в фон отправляется , а оказывается все наоборот Игорь ГорбоносА DoEvents всего лишь дает отрисовать новую информацию. И все. просто читал где то что DoEvents передает работу Windows , не совсем понял что имелось ввиду, щас понял спасибо только не понятно зачем его ставить перед запросом , а не перед Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2010, 23:03 |
|
||
|
Окно загрузки файла
|
|||
|---|---|---|---|
|
#18+
aduka05admкороче че то я не понял зачем этот DoEvents уже пишу свои попытки объяснить.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2010, 23:05 |
|
||
|
Окно загрузки файла
|
|||
|---|---|---|---|
|
#18+
Адука запутался. Попробую я его еще больше запутать или распутать. Давай только откажемся от термина "фоном" - это понятие относительное и диалектическое. Итак. Синхронные действия (обычные для VB). Код выполняется последовательно, друг за другом, если выполняется долгая операция, весь остальной код тупо ждет (даже если это запрос к серверу БД, выполнение которого зависит от сервера, а не от твоей программы). Закончилась одна команда - началась следующая. События при этом встают в очередь. Любые, кнопки, клавиши, клики, таймер. Если у тебя сработал таймер, событие от него не будет немедленно выполнено, а встанет в очередь и дождется завершения твоего текущего кода. То есть заканчивается выполнение текущего кода (а это тоже в 99,9 случаев обработка события), начинает выполняться следующие, остальные ждут. Вот. Это обычный синхронный режим. А есть такая интересная штука - DoEvents. Она вовсе не вводит асинхронность и многопоточность. Она просто берет и твой текущий код переносит в конец очереди событий. То есть ты делаешь DoEvents, твоя текущая процедура останавливается, начинают выполняться все события, которые ждали своей очереди. Потом управление вернется к твоей процедуре. Если событий в очереди не было - ничего как бы не произойдет. пока вникай, пишу далее.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2010, 23:09 |
|
||
|
Окно загрузки файла
|
|||
|---|---|---|---|
|
#18+
С помощью DoEvents можно сымитировать многопоточность. К примеру, у тебя прыгает по экрану чертик. Тупо в цикле: Код: plaintext 1. 2. 3. Как сделать, чтобы реагировало. Код: plaintext 1. 2. 3. 4. Кроме того, чертик будет себе прыгать, а пользователь может переключаться на другие формы того же приложения и делать там все, что хочет. Можно даже запустить несколько таких циклов, они все друг другу будут передавить управление и все чертики будут прыгать. теперь про асинхронность.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2010, 23:18 |
|
||
|
Окно загрузки файла
|
|||
|---|---|---|---|
|
#18+
Асинхронное выполнение запроса напоминает работу с таймером. Ты дал команду серверу выполнить запрос (завел таймер), сервер сказал "ок" и пошел думать. Твоя же программа получает управление взад и можешь дальше делать, что хочешь. Обрабатывать нажатия кнопок и т.п. Или рисовать на экране прыгающего чертика. Когда сервер закончит возиться с твоим запросом (когда у таймера настанет время), он выдаст событие - завершил. Вот для этого и важен в рисовании чертика DoEvents - иначе ты просто не поймаешь событие от ADO, когда твой запрос будет готов. Но лучше пойти дальше - не рисовать чертика с использование DoEvents, а рисовать его по таймеру. то есть заводишь таймер на 300 мс, и по каждому событию рисуешь новое положение чертика. Тогда у тебя программа вообще не занята ерундой. Она просто сидит в ожидании событий. Пришло событие от таймера - перерисовал чертика. Пришло событие от ADO - начинаем обрабатывать результаты запроса - вот и вся асинхронность. ЗЫ: Кстати, я не использую тот метод, пример которого ты нарыл. После того, как я получил от сервера событие, что данные готовы, я начинаю заполнять этими данными сетку. Но в цикле после каждой строки делаю DoEvents. В результате, я совершенно не мешаю пользователю работать с другими формами или контролами на этой же форме, включая возможность вообще отменить заполнение сетки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2010, 23:32 |
|
||
|
Окно загрузки файла
|
|||
|---|---|---|---|
|
#18+
aduka05adm, И немножко про многопоточность (мультизадачность). С помощью DoEvents ты создаешь псевдомультизадачность (но выглядит она как настоящая). С помощью асинхронного выполнения запроса - уже реальная мультизадачность. Кроме того, не очень сложно запустить в VB второй поток, и параллельно выполнять два своих кода. Самый большой гемор - это синхронизация и изоляция потоков. Это жуткая головная боль. Хорошо сделанных многопоточных программ очень мало (могу привести в пример The Bat! - там реально отрисовка письма, проверка почты, проверка антиспамом, пересчет и индексирование папок идет независимо и при этом не глючит - это дает пользователю нормально работать, а не ждать, пока закончится какая-то операция). В чем головная боль: вот к примеру ты сейчас организуешь, что твой пользователь может что-то делать, пока выполняется запрос. А если он пойдет, откроет еще одну форму и запустит на выполнение еще один запрос. А не выполнится ли он в том же комманде (тогда первый запрос может оказаться сброшенным). А не перепрограммирует он какие-то глобальные переменные, которые еще понадобятся первому запросу. В конце-концов, а не закроет ли пользователь форму, которая ожидает, когда закончит работать запрос? А то, если он закроет форму, а после этого придет событие от ADO - форма может загрузиться обратно без твоего желания :). То есть надо предусмотреть отмену выполнения запроса, если пользователь закрыл форму. А не может ли пользователь поменять какие-то контролы на форме, пока выполняется запрос, что окажется критичным при получении данных. А не запустит ли пользователь запрос повторно... В общем головной боли с этой многопоточностью хватает.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2010, 23:52 |
|
||
|
Окно загрузки файла
|
|||
|---|---|---|---|
|
#18+
Shocker.Pro, Shocker.ProВ результате, я совершенно не мешаю пользователю работать с другими формами или контролами на этой же форме, включая возможность вообще отменить заполнение сетки. то есть у вас здесь также как в цикле с чертиком , если наступает событие то передается управление пользователю? если стоит DoEvents перед строкой кода то, она помещается в конец очереди как например Код: plaintext 1. 2. Код: plaintext Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. здесь все лэйблы будут поочереди срабатывать, пока запросы очереди ждут? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2010, 23:54 |
|
||
|
Окно загрузки файла
|
|||
|---|---|---|---|
|
#18+
Shocker.Pro, Shocker.ProВ чем головная боль: вот к примеру ты сейчас организуешь, что твой пользователь может что-то делать, пока выполняется запрос. А если он пойдет, откроет еще одну форму и запустит на выполнение еще один запрос. А не выполнится ли он в том же комманде (тогда первый запрос может оказаться сброшенным). А не перепрограммирует он какие-то глобальные переменные, которые еще понадобятся первому запросу. В конце-концов, а не закроет ли пользователь форму, которая ожидает, когда закончит работать запрос? А то, если он закроет форму, а после этого придет событие от ADO - форма может загрузиться обратно без твоего желания :). То есть надо предусмотреть отмену выполнения запроса, если пользователь закрыл форму. А не может ли пользователь поменять какие-то контролы на форме, пока выполняется запрос, что окажется критичным при получении данных. А не запустит ли пользователь запрос повторно... В общем головной боли с этой многопоточностью хватает.... читал где-то люди тоже говорили , что его надо использовать осторожно))) но и без этого тоже трудно наверно , хотя можно вешать progressbar пусть пользователь ждет)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2010, 23:58 |
|
||
|
Окно загрузки файла
|
|||
|---|---|---|---|
|
#18+
aduka05adm только вот еще вопрос Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. здесь все лэйблы будут поочереди срабатывать, пока запросы очереди ждут? Ща почитал повнимательней, о чем вы переписывались с Игорем.... Там DoEvents не служит никакой асинхронности и лучше его, наверное, не использовать... просто после каждого Form1.Label1.Caption = поставить Form1.Label1.Refresh или Form1.Refresh Просто, как правило, отрисовка экрана не происходит, пока не закончатся все события в очереди или кто-нить не даст DoEvents или Refresh. Но так как имеет другие побочные эффекты, можно обойтись Refresh для ясности. Однако, насколько я помню, что твои запросы выполняются разное время, а ты хотел, чтобы твоя форма отображала процесс равномерно. Тогда нужно запускать запросы асинхронно, а на форме рисовать то, что тебе нравится.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2010, 00:11 |
|
||
|
Окно загрузки файла
|
|||
|---|---|---|---|
|
#18+
aduka05admShocker.Pro, Shocker.ProВ результате, я совершенно не мешаю пользователю работать с другими формами или контролами на этой же форме, включая возможность вообще отменить заполнение сетки. то есть у вас здесь также как в цикле с чертиком , если наступает событие то передается управление пользователю? Не пользователю - а событию, которое мог вызвать пользователь (нажать кнопку, закрыть форму...) aduka05admесли стоит DoEvents перед строкой кода то, она помещается в конец очереди как например Код: plaintext 1. 2. Код: plaintext Нет, недоразобрался ты.... Не строка, которая следует за DoEvents помещается в конец очереди, а вся твоя процедура. То есть последовательность выполнения строк в твоей процедуре никак измениться не может. Будут выполняться другие события, но не код твоей процедуры. До тех пор, пока другие события не закончатся. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2010, 00:23 |
|
||
|
Окно загрузки файла
|
|||
|---|---|---|---|
|
#18+
Shocker.Pro, спасибо большое , еще вопрос задать хотел в этой процедуре я заношу данные в две таблицы код Код: 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. так вот может быть ситуация что какой сбой и в первую таблицу данные занеслись а во вторую нет (как вы сами такое реализуете )? то есть хочется все или ничего (транзакция называется по мойму) но как это на VB реализуется ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2010, 00:23 |
|
||
|
Окно загрузки файла
|
|||
|---|---|---|---|
|
#18+
aduka05adm так вот может быть ситуация что какой сбой и в первую таблицу данные занеслись а во вторую нет (как вы сами такое реализуете )? то есть хочется все или ничего (транзакция называется по мойму) но как это на VB реализуется Напомни, какой СУБД ты пользуешься? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2010, 00:26 |
|
||
|
Окно загрузки файла
|
|||
|---|---|---|---|
|
#18+
Shocker.Pro, все понял поэтому Shamanus говорил что у него никаких процедур Shamanusв коде формы 1 никаких процедур нет только еще вопрос ИгорьТы забыл сделать рефреш для лейбла и поставить DoEvents перед каждым выполнением запроса Shocker.ProТам DoEvents не служит никакой асинхронности и лучше его, наверное, не использовать... просто после каждого Form1.Label1.Caption = поставить Form1.Label1.Refresh или Form1.Refresh то есть в данном случае он не помогает есть смысл его использовать если есть куча процедур которые должны срабатывать в то же время что и запрос с DoEvents(работа с контролами , другими гридами , или игра самописная ))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2010, 00:32 |
|
||
|
Окно загрузки файла
|
|||
|---|---|---|---|
|
#18+
Shocker.Pro, MYSQL ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2010, 00:32 |
|
||
|
Окно загрузки файла
|
|||
|---|---|---|---|
|
#18+
Shocker.Pro, еще меня смущает что я в цикле запрос выполняю Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2010, 00:35 |
|
||
|
Окно загрузки файла
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. Что-то глупость наблюдаю.... Ты перегружаешь на клиента ВСЕ документы только для того, чтобы посмотреть номер последнего? Ну, во-первых, кто сказал, что "Select * from documents" выдаст их в порядке возрастания????? Как СУБД на душу положит, так и выдаст, для сортироки обязательно надо использовать "order by". Во-вторых, зачем грузить ВСЕ ЗАПИСИ И ВСЕ ПОЛЯ? Это может быть огромный объем данных. Используй Max(id). В третьих - этот способ все равно неправильный. Что будет, если два пользователя одновременно вставят документ? Какой номер ты получишь, свой или чужой?.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2010, 00:36 |
|
||
|
Окно загрузки файла
|
|||
|---|---|---|---|
|
#18+
aduka05admесть смысл его использовать если есть куча процедур которые должны срабатывать в то же время что и запрос с DoEvents(работа с контролами , другими гридами , или игра самописная ))) Фраза "запрос с DoEvents" выдает, что ты опять не понял. Почитай еще несколько раз мой текст... Если запрос будет выполнен синхронно, одновременно с ним ты ничего не сделаешь. Если запрос будет выполнен асинхронно, DoEvents у тебя будет не рядом с запросом, а совершенно в другом коде (если вообще он будет нужен). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2010, 00:39 |
|
||
|
Окно загрузки файла
|
|||
|---|---|---|---|
|
#18+
Shocker.Pro, Shocker.Pro третьих - этот способ все равно неправильный. Что будет, если два пользователя одновременно вставят документ? Какой номер ты получишь, свой или чужой?.... ну да ошибка будет, в итоге ниче не вставится Shocker.ProЕсли запрос будет выполнен асинхронно, DoEvents у тебя будет не рядом с запросом, а совершенно в другом коде (если вообще он будет нужен). типо этого? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2010, 00:45 |
|
||
|
Окно загрузки файла
|
|||
|---|---|---|---|
|
#18+
aduka05admтак вот может быть ситуация что какой сбой и в первую таблицу данные занеслись а во вторую нет (как вы сами такое реализуете )? то есть хочется все или ничего (транзакция называется по мойму) но как это на VB реализуется Я работаю с MSSQL. SQL-команд из VB не выполняю вообще. Все отдаю серверу и он сам там уже выполняет. В том числе, открывает и закрывает транзакции. Если бы ты работал с MSSQL, впрочем я бы посоветовал передать обе команды одним пакетом сразу с транзакцией. В MySQL тоже можно выполнить два запроса в одной строке, разделив их ";", но как и можно ли там открыть транзакцию - не знаю. ADO поддерживает транзакцию на своем уровне: BeginTrans, CommitTrans в коннекшне. Но я это не люблю, если у тебя прога рухнет, транзакция останется открытая на какое-то время (пока по таймауту не отвалится), таблицы останутся заблокированными для других пользователей.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2010, 00:48 |
|
||
|
Окно загрузки файла
|
|||
|---|---|---|---|
|
#18+
Shocker.Pro, Shocker.ProВ MySQL тоже можно выполнить два запроса в одной строке, разделив их ";" так и буду делать Shocker.ProSQL-команд из VB не выполняю вообще. Все отдаю серверу и он сам там уже выполняет отдаете так же ? Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2010, 00:54 |
|
||
|
Окно загрузки файла
|
|||
|---|---|---|---|
|
#18+
aduka05admвдруг не успеет отработать Что значит "не успеет"? Кто не успеет? Здесь все синхронно работает, пока предыдущая команда не выполнится, следующая не начнется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2010, 00:54 |
|
||
|
Окно загрузки файла
|
|||
|---|---|---|---|
|
#18+
aduka05admShocker.Pro третьих - этот способ все равно неправильный. Что будет, если два пользователя одновременно вставят документ? Какой номер ты получишь, свой или чужой?.... ну да ошибка будет, в итоге ниче не вставится Почему не вставится? Вставится. Только ты вставишь содержимое в другой документ, не в свой, потому что получишь чужой идентификатор. aduka05admShocker.ProЕсли запрос будет выполнен асинхронно, DoEvents у тебя будет не рядом с запросом, а совершенно в другом коде (если вообще он будет нужен). типо этого? там вообще нет DoEvents ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2010, 00:57 |
|
||
|
Окно загрузки файла
|
|||
|---|---|---|---|
|
#18+
aduka05admShocker.Pro, Shocker.ProВ MySQL тоже можно выполнить два запроса в одной строке, разделив их ";" так и буду делать Можно собрать все в одну строку и скопом отправить на сервер. Только надо смотреть ограничение по длине выполняемой строки. И еще. В MSSQL есть команды для получения номера очередного ID-а, вставленного лично твоей сессией. Не знаю, можно ли это с MySQL. aduka05admShocker.ProSQL-команд из VB не выполняю вообще. Все отдаю серверу и он сам там уже выполняет отдаете так же ? Код: plaintext Вопрос не понят. Еще раз - я НЕ ВЫПОЛНЯЮ SQL-команд из VB. В MSSQL есть свой внутренний язык и такое понятие, как процедура. Я отдаю данные процедуре, а она уже сама разбирается, какие SQL-команды дать для записи в базу и как организовать транзакции. =================== ЗЫ: Еще совет (и, кажется, я тебе его уже давал ранее). Перед rs.Open обязательно делай rs.Close и Set rs = Nothing. ЗЗЫ: А вообще процедура query организована криво. Представь, что тебе надо открыть рекордсет, а у тебя один уже открыт. Или еще хуже - вызываешь внутри цикла какую-нить функцию, а она тоже вызывает query, которая подпортит тебе rs для вышестоящей функции. И вообще, логично не объявлять глобальную переменную rs, а переделать query с процедуры на функцию, которая возвращает ADODB.Recordset. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2010, 01:06 |
|
||
|
Окно загрузки файла
|
|||
|---|---|---|---|
|
#18+
ушел спать. тебе тут хватит пока для внимательного изучения.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2010, 01:07 |
|
||
|
Окно загрузки файла
|
|||
|---|---|---|---|
|
#18+
Shocker.Pro, транзакцииMYSQLТранзакцией называется такая последовательность SQL-запросов, которая выполняется как единая, неделимая операция. Транзакция может быть либо выполнена целиком, либо не выполнена совсем. Третьего не дано. Доступ к записям таблиц, которые подвергаются изменению в ходе транзакции, блокируется для всех клиентов (кроме того, разумеется, который непосредственно инициировал транзакцию). Транзакции поддерживаются СУБД MySQL только для таблиц типа InnoDB (а также BDB — BerkeleyDB; это не обсуждавшийся нами ранее физический тип таблиц MySQL, разработанный фирмой Sleepycat). По умолчанию MySQL работает в режиме немедленного выполнения операторов SQL. Иными словами, любой SQL-запрос, модифицирующий таблицу, выполняется сразу же, и все изменения тут же фиксируются на диске. Этот режим контролируется системной переменной AUTOCOMMIT, которая по умолчанию принимает значение 1. Для того, чтобы отключить режим немедленного выполнения SQL-запросов, нужно установить переменную AUTOCOMMIT в 0: SET AUTOCOMMIT = 0; Результаты выполнения последующих SQL-запросов не будут фиксироваться на диске. Для того, чтобы завершить транзакцию, т. е. единомоментно зафиксировать результаты выполнения всех запросов, необходимо использовать оператор COMMIT. Для того же, чтобы отменить при необходимости действие SQL-операторов, составляющих транзакцию, т. е. вернуть базу данных в исходное состояние, применяется команда ROLLBACK. (После фиксации результатов транзакции при помощи оператора COMMIT использование оператора ROLLBACK уже не будет иметь смысла — транзакция завершена.) Вот как может выглядеть описание транзакции для перевода денег со счета на счет: SET AUTOCOMMIT = 0; UPDATE account SET balance = balance – 1000 WHERE id = 32768; UPDATE account SET balance = balance + 1000 WHERE id = 65536; COMMIT; SET AUTOCOMMIT = 1; А вот пример использования оператора ROLLBACK: SET AUTOCOMMIT = 0; UPDATE account SET balance = balance – 1000 WHERE id = 32768; UPDATE account SET balance = balance + 1000 WHERE id = 65536; ROLLBACK; SET AUTOCOMMIT = 1;Операция перевода средств со счета на счет, которую пытались выполнить два запроса UPDATE, будет отменена. В ряде случаев прибегать к изменению системной переменной AUTOCOMMIT не слишком удобно. Язык SQL предусматривает оператор START TRANSACTION, отключающий режим немедленного выполнения SQL-операторов. Этот режим остается выключенным до момента явного завершения транзакции при помощи оператора COMMIT или ROLLBACK. Пример нашей транзакции, осуществляющей перевод средств со счета на счет, таким образом, можно перефразировать: START TRANSACTION; UPDATE account SET balance = balance – 1000 WHERE id = 32768; UPDATE account SET balance = balance + 1000 WHERE id = 65536; COMMIT; Примечание Некоторые операторы SQL неявно завершают транзакцию, как если бы был вызван оператор COMMIT. В их числе CREATE DATABASE, DROP DATABASE, CREATE TABLE, DROP TABLE, START TRANSACTION, SET AUTOCOMMIT = 1 и ряд других, не рассмотренных нами. Shocker.Proтам вообще нет DoEvents ну да) поищу ка я примеры с DoEvents плюс ваша информация и все встанет по полочкам Shocker.ProЗдесь все синхронно работает, пока предыдущая команда не выполнится, следующая не начнется. точно Shocker.ProПочему не вставится? Вставится. Только ты вставишь содержимое в другой документ, не в свой, потому что получишь чужой идентификатор. точно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2010, 01:07 |
|
||
|
Окно загрузки файла
|
|||
|---|---|---|---|
|
#18+
Shocker.Proушел спать. тебе тут хватит пока для внимательного изучения.... это точно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2010, 01:23 |
|
||
|
Окно загрузки файла
|
|||
|---|---|---|---|
|
#18+
aduka05admтранзакцииMYSQL ага, ну все то же самое важно собрать все команды в одну большую строку, обрамить началом и концом транзакции и выполнить разом. Но тут возникает вопрос о максимальной длине этой строки ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2010, 10:03 |
|
||
|
Окно загрузки файла
|
|||
|---|---|---|---|
|
#18+
теперь голову поломал на абсолютно обратной ситуации Код: plaintext 1. 2. при этом форма Form_SelectDate меняет константу dt_1 почему этот засранец... нехороший VB не дожидается пока форма не закроется, а меняет сразу величину поля на текущее значение dt_1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2010, 14:53 |
|
||
|
Окно загрузки файла
|
|||
|---|---|---|---|
|
#18+
Shamanus, Жарко. Ты сам понял, чего спросил? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2010, 14:56 |
|
||
|
Окно загрузки файла
|
|||
|---|---|---|---|
|
#18+
Shamanusтеперь голову поломал на абсолютно обратной ситуации Код: plaintext 1. 2. при этом форма Form_SelectDate меняет константу dt_1 почему этот засранец... нехороший VB не дожидается пока форма не закроется, а меняет сразу величину поля на текущее значение dt_1 Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2010, 14:57 |
|
||
|
Окно загрузки файла
|
|||
|---|---|---|---|
|
#18+
Ёпрст. Вчера всю ночь с Адукой тут общался, а это оказывается топик Шамануса. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2010, 14:57 |
|
||
|
Окно загрузки файла
|
|||
|---|---|---|---|
|
#18+
Shamanus, А, вот Костя догадался... В общем, то, что ты открыл форму, никак не запрещает твой программе дальше выполняться. Иначе какая ж многозадачность. Исключение из этого Костя привел. Но тогда ты не сможешь переключаться на другие формы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2010, 15:01 |
|
||
|
Окно загрузки файла
|
|||
|---|---|---|---|
|
#18+
Konst_OneShamanusтеперь голову поломал на абсолютно обратной ситуации Код: plaintext 1. 2. при этом форма Form_SelectDate меняет константу dt_1 почему этот засранец... нехороший VB не дожидается пока форма не закроется, а меняет сразу величину поля на текущее значение dt_1 Код: plaintext Спасибо Konst_One, но это не то, Если форма Form_SelectDate (это календарь) будет модальной, то на ней должны быть управляющие конструкции, которые сами будут менять значение текстбокса в форме iskl. А этот вариант не подходит, т.к. эту форму могут вызывать другие формы. Мы же не можем каждую форму прописать в коде календаря. А я хочу так, есть глобальная переменная с датой, вызываем диалог календаря, в диалоге меняем переменную, при закрытии диалога устанавливаем значение даты в текстбокс. в VBA если я из одной формы вызывал другую, то выполнение кода прерывалось до закрытия вызванной формы т.е вот так Код: plaintext 1. 2. 3. VB не ждет, а считает, что если он сделал Show, то и ждать пока форма закроется не стоит. Shocker.Pro Жарко. Ты сам понял, чего спросил? трудности перехода с VBA на VB, помнишь я тебя спрашивал как оно :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2010, 15:09 |
|
||
|
Окно загрузки файла
|
|||
|---|---|---|---|
|
#18+
ShamanusKonst_OneShamanusтеперь голову поломал на абсолютно обратной ситуации Код: plaintext 1. 2. при этом форма Form_SelectDate меняет константу dt_1 почему этот засранец... нехороший VB не дожидается пока форма не закроется, а меняет сразу величину поля на текущее значение dt_1 Код: plaintext Спасибо Konst_One, но это не то, Если форма Form_SelectDate (это календарь) будет модальной, то на ней должны быть управляющие конструкции, которые сами будут менять значение текстбокса в форме iskl. А этот вариант не подходит, т.к. эту форму могут вызывать другие формы. Мы же не можем каждую форму прописать в коде календаря. А я хочу так, есть глобальная переменная с датой, вызываем диалог календаря, в диалоге меняем переменную, при закрытии диалога устанавливаем значение даты в текстбокс. в VBA если я из одной формы вызывал другую, то выполнение кода прерывалось до закрытия вызванной формы т.е вот так Код: plaintext 1. 2. 3. VB не ждет, а считает, что если он сделал Show, то и ждать пока форма закроется не стоит. Shocker.Pro Жарко. Ты сам понял, чего спросил? трудности перехода с VBA на VB, помнишь я тебя спрашивал как оно :) тогда делайте через событие класса и вызывайте метод, в котором будет ожидание получения инфы из данного события вашей формы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2010, 15:11 |
|
||
|
Окно загрузки файла
|
|||
|---|---|---|---|
|
#18+
Shamanus, Тебе нужно разнести вызов формы и программирование поля в любом случае в разные места. Далее надо получить событие от вызванной формы. Это можно сделать миллионом способов. К примеру, форма может сгенерировать событие, может вызывать метод вызвавшей формы. Может сама поменять тебе поле и т.п. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2010, 15:14 |
|
||
|
Окно загрузки файла
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. вот так: Код: plaintext 1. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2010, 15:19 |
|
||
|
Окно загрузки файла
|
|||
|---|---|---|---|
|
#18+
Konst_One, Shocker.Pro так и сделаю теперь судя по всему. Просто для портации готового кода не очень удобно конечно. Но будем доделывать. Спасибо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2010, 15:19 |
|
||
|
Окно загрузки файла
|
|||
|---|---|---|---|
|
#18+
Konst_One, Еще и готовый код сразу. Спасибо большое. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2010, 15:21 |
|
||
|
Окно загрузки файла
|
|||
|---|---|---|---|
|
#18+
ShamanusKonst_One, Еще и готовый код сразу. Спасибо большое. А я вот не люблю такой подход. Зачем гонять процессор в дурном цикле? Пользователь может год там будет возиться. Проще тогда уж просто перехватить закрытие формы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2010, 15:29 |
|
||
|
Окно загрузки файла
|
|||
|---|---|---|---|
|
#18+
Shocker.ProShamanusKonst_One, Еще и готовый код сразу. Спасибо большое. А я вот не люблю такой подход. Зачем гонять процессор в дурном цикле? Пользователь может год там будет возиться. Проще тогда уж просто перехватить закрытие формы. я не знаю причину зачем что-то там ждать на label, но если автор так хочет и понимает зачем ему это надо, то пусть циклы гоняет процессор ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2010, 15:30 |
|
||
|
Окно загрузки файла
|
|||
|---|---|---|---|
|
#18+
Konst_Oneя не знаю причину зачем что-то там ждать на label, но если автор так хочет и понимает зачем ему это надо, то пусть циклы гоняет процессор Ага. А потом из-за таких программ гонка вооруженийапгрейдов и новые супермощные процессоры и закон Мура ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2010, 15:33 |
|
||
|
Окно загрузки файла
|
|||
|---|---|---|---|
|
#18+
Shocker.ProKonst_Oneя не знаю причину зачем что-то там ждать на label, но если автор так хочет и понимает зачем ему это надо, то пусть циклы гоняет процессор Ага. А потом из-за таких программ гонка вооруженийапгрейдов и новые супермощные процессоры и закон Мура мы работаем на интел+микрософт даёшь гонку процессоров и ОС ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2010, 15:34 |
|
||
|
Окно загрузки файла
|
|||
|---|---|---|---|
|
#18+
Konst_One даёшь гонку процессоров и ОС согласен, пусть ОС, думает КАК эту конструкцию циклическую можно упростить, чтобы не грузить проц. За что платятся деньги? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2010, 15:36 |
|
||
|
Окно загрузки файла
|
|||
|---|---|---|---|
|
#18+
ShamanusKonst_One даёшь гонку процессоров и ОС согласен, пусть ОС, думает КАК эту конструкцию циклическую можно упростить, чтобы не грузить проц. За что платятся деньги? если будет плохо, то в цикле можно так извратиться: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2010, 15:42 |
|
||
|
Окно загрузки файла
|
|||
|---|---|---|---|
|
#18+
Шаманус, не слушай его, он засланец билла гейтса Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2010, 15:52 |
|
||
|
Окно загрузки файла
|
|||
|---|---|---|---|
|
#18+
Shocker.ProШаманус, не слушай его, он засланец билла гейтса Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. это самый лучший вариант, но нам так и не ответили зачем ему нужно ждать закрытия формы? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2010, 15:54 |
|
||
|
Окно загрузки файла
|
|||
|---|---|---|---|
|
#18+
Сорри, ошибся при копипасте Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2010, 15:54 |
|
||
|
Окно загрузки файла
|
|||
|---|---|---|---|
|
#18+
Konst_Oneэто самый лучший вариант, но нам так и не ответили зачем ему нужно ждать закрытия формы? Затем, что форма меняет ему эту переменную dt_1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2010, 15:55 |
|
||
|
Окно загрузки файла
|
|||
|---|---|---|---|
|
#18+
Shocker.ProKonst_Oneэто самый лучший вариант, но нам так и не ответили зачем ему нужно ждать закрытия формы? Затем, что форма меняет ему эту переменную dt_1 а зачем она ему её меняет и почему надо ждать программе пока не поменяется эта дата? может в этом весь фокус? ТС переходи на событийное объектное программирование ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2010, 15:57 |
|
||
|
Окно загрузки файла
|
|||
|---|---|---|---|
|
#18+
Konst_Oneа зачем она ему её меняет и почему надо ждать программе пока не поменяется эта дата? может в этом весь фокус? ТС переходи на событийное объектное программирование Дык. Календарь для ввода даты пользователем.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2010, 16:03 |
|
||
|
Окно загрузки файла
|
|||
|---|---|---|---|
|
#18+
Shocker.ProKonst_Oneа зачем она ему её меняет и почему надо ждать программе пока не поменяется эта дата? может в этом весь фокус? ТС переходи на событийное объектное программирование Дык. Календарь для ввода даты пользователем.... тогда я вообще перестал понимать логику. чем vbModal не подошло? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2010, 16:05 |
|
||
|
Окно загрузки файла
|
|||
|---|---|---|---|
|
#18+
Да, что-то они лишнего понаписал. ShamanusЕсли форма Form_SelectDate (это календарь) будет модальной, то на ней должны быть управляющие конструкции, которые сами будут менять значение текстбокса в форме iskl. Как эти два предложения связаны, вообще непонятно. Не видно причинно-следственной связи. ShamanusА этот вариант не подходит, т.к. эту форму могут вызывать другие формы. Мы же не можем каждую форму прописать в коде календаря. Можем. Для этого в вызываемую форму отдается ссылка на вызывающую форму. ShamanusА я хочу так, есть глобальная переменная с датой, вызываем диалог календаря, в диалоге меняем переменную, при закрытии диалога устанавливаем значение даты в текстбокс. А вот это как раз криво. Пользователь может одновременно из разных форм вызвать календарь, а переменная у них на всех одна ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2010, 16:14 |
|
||
|
Окно загрузки файла
|
|||
|---|---|---|---|
|
#18+
Shocker.ProShamanusА этот вариант не подходит, т.к. эту форму могут вызывать другие формы. Мы же не можем каждую форму прописать в коде календаря. Можем. Для этого в вызываемую форму отдается ссылка на вызывающую форму. Вот тут я автору рассказывал основы этого дела ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2010, 16:17 |
|
||
|
Окно загрузки файла
|
|||
|---|---|---|---|
|
#18+
Shocker.ProДа, что-то они лишнего понаписал. ShamanusЕсли форма Form_SelectDate (это календарь) будет модальной, то на ней должны быть управляющие конструкции, которые сами будут менять значение текстбокса в форме iskl. Как эти два предложения связаны, вообще непонятно. Не видно причинно-следственной связи. ShamanusА этот вариант не подходит, т.к. эту форму могут вызывать другие формы. Мы же не можем каждую форму прописать в коде календаря. Можем. Для этого в вызываемую форму отдается ссылка на вызывающую форму. ShamanusА я хочу так, есть глобальная переменная с датой, вызываем диалог календаря, в диалоге меняем переменную, при закрытии диалога устанавливаем значение даты в текстбокс. А вот это как раз криво. Пользователь может одновременно из разных форм вызвать календарь, а переменная у них на всех одна так а я о чём и толкую. ему просто надо сделать свою форму календаря с public function: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2010, 16:18 |
|
||
|
Окно загрузки файла
|
|||
|---|---|---|---|
|
#18+
Konst_One, Сейчас проверил насчет vbModal, кажется действительно сморозил глупость если использую vbModal при закрытии формы календаря возврат идет не на форму, которая календарь вызвала, а на её материнскую форму. Я сейчас попробую оптимизировать эту часть кода и возможно vbModal устроит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2010, 16:29 |
|
||
|
Окно загрузки файла
|
|||
|---|---|---|---|
|
#18+
ShamanusKonst_One, Сейчас проверил насчет vbModal, кажется действительно сморозил глупость если использую vbModal при закрытии формы календаря возврат идет не на форму, которая календарь вызвала, а на её материнскую форму. Я сейчас попробую оптимизировать эту часть кода и возможно vbModal устроит. Код: plaintext 2-й параметр - это ссылка на вызывающий объект. можете указать тот , который вам нужен. модальная форма откроется в рамках указанного объекта ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2010, 16:32 |
|
||
|
Окно загрузки файла
|
|||
|---|---|---|---|
|
#18+
Shamanus, Подумай. Если у тебя в проекте будет хотя бы полтора десятка форм, неплохо бы написать себе небольшой движок работы с ними, который будет обеспечивать передачу параметров туда и обратно, активацию форм в порядке, обратном открытию и т.п.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2010, 16:42 |
|
||
|
Окно загрузки файла
|
|||
|---|---|---|---|
|
#18+
Shocker.ProShamanus, Подумай. Если у тебя в проекте будет хотя бы полтора десятка форм, неплохо бы написать себе небольшой движок работы с ними, который будет обеспечивать передачу параметров туда и обратно, активацию форм в порядке, обратном открытию и т.п.... Я согласен, у меня уже есть многие элементы движка для стандартной проги. (календарь один из них) Пока проблема в знаниях. А систематическим изучением заниматься времени не хватает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.07.2010, 17:29 |
|
||
|
|

start [/forum/topic.php?all=1&fid=60&tid=2159589]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
38ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
124ms |
get tp. blocked users: |
1ms |
| others: | 11ms |
| total: | 215ms |

| 0 / 0 |
