Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Окно загрузки файла / 25 сообщений из 96, страница 1 из 4
07.07.2010, 12:14
    #36727565
Shamanus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Окно загрузки файла
Перед запуском проги идет загрузка большого объема данных. Примерно 10 секунд.

Как сделать чтобы появилось такое красивой окно загрузки и на нем там или точки бегали или картинки менялись. Ну в общем по уму такое окошко, типа как при запуске фотошопа идет :)

Толи гуглить не могу, толи нет такой инфы. В нете нашел только как закрыть свое окно. А как его изменить в процессе не нашел. С решением, которое нашел можно сделать так, форма, на ней надпись загрузка. По завершению loading-а закрыть окно. Но это некошер. Кто подскажет кошер.
...
Рейтинг: 0 / 0
07.07.2010, 12:17
    #36727583
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Окно загрузки файла
ShamanusПеред запуском проги идет загрузка большого объема данных. Примерно 10 секунд.
DoEvents
или описывай подробно, что такое загрузка данных.
...
Рейтинг: 0 / 0
07.07.2010, 13:14
    #36727794
Shamanus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Окно загрузки файла
Shocker.Pro,

загрузка данных это последовательность SQL запросов в базу. Их 14 штук. Каждый отрабатывает разный период времени часть полсекунды, некоторые около 5 секунд

Код такой

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
Sub  MYSUB
 
Вот тут хочу запустить вывод формы на экран

Процедура выполнения SQL запроса  1   '0,1 сек выполнения
Процедура выполнения SQL запроса  2   '5 сек выполнения
Процедура выполнения SQL запроса  3   '1 сек выполнения
Процедура выполнения SQL запроса  4   '0,5 сек выполнения
...
Процедура выполнения SQL запроса  14  '3 сек выполнения

Вот тут хочу закрыть форму


end sub

проблема в том как запаралеллить процес и рисования на форме всяких картинок и загрузку, если приложение в момент загрузки запроса виснет.
...
Рейтинг: 0 / 0
07.07.2010, 13:21
    #36727815
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Окно загрузки файла
Использовать асинхронное соединение.
...
Рейтинг: 0 / 0
07.07.2010, 13:22
    #36727824
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Окно загрузки файла
Shamanusпроблема в том как запаралеллить процес и рисования на форме всяких картинок и загрузку, если приложение в момент загрузки запроса виснет.
а тебе пауз между запросами недостаточно?
Если нет - тогда асинхронное выполнение запроса
...
Рейтинг: 0 / 0
07.07.2010, 13:36
    #36727880
Shamanus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Окно загрузки файла
Shocker.Pro, Antonariy

Сейчас попробую, но есть подозрение, что и вся проблема выполнения запроса это не само время sql, а именно задрежка в процессе в загрузке данных в массив.

У меня по итогам выполнения массив возвращает 300тыс записей,он и выполняется 5 секунд.

В общем сейчас попробую
...
Рейтинг: 0 / 0
07.07.2010, 13:40
    #36727893
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Окно загрузки файла
Shamanusа именно задрежка в процессе в загрузке данных в массив.
я ж с самого начала попросил пояснить, что такое "загрузка данных"...

а вообще, загрузка такого объема данных в массив наводит на мысль об ошибках проектирования системы
...
Рейтинг: 0 / 0
07.07.2010, 13:51
    #36727937
Shamanus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Окно загрузки файла
Shocker.Pro,

в общем асинхронное соединение не помогло.

Shocker.Proв массив наводит на мысль об ошибках проектирования системы

ну может подскажешь как верно спроектировать с такой задачей.

Пользователь вносит в систему информацию о товаре. Если товар в базе данных существует, то система должна быстро сказать об этом пользователю.

Справочник товаров 300 тыс записей. Пользователь вносит инфу в ТекстБокс.
На каждый change этого текстбокса нужно просмотреть 300 тыс записей и найти нет ли сходного товара.

Варианта реализации я вижу 2.
Первый - sql запрос к источнику данных в момент заполнения поля. Время работы запроса 3-7 секунд.
Второй - полная загрузка данных и поиск в массиве. Время работы 7-10 секунд. Время поиска записи в массиве менее 0,5 секунд.
...
Рейтинг: 0 / 0
07.07.2010, 13:58
    #36727958
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Окно загрузки файла
ShamanusВарианта реализации я вижу 2.
Первый - sql запрос к источнику данных в момент заполнения поля. Время работы запроса 3-7 секунд.

Неверная индексация БД

ShamanusВторой - полная загрузка данных и поиск в массиве. Время работы 7-10 секунд. Время поиска записи в массиве менее 0,5 секунд.

И куча занятой памяти под массив.

Идиотское решение (пойдем в категоричности стопами Антонария)


Кроме того, проверку при таком объеме надо делать на на Change, а на окончание ввода: потерю фокуса, нажатие Enter, нажатие кнопки сохранить и т.п.
...
Рейтинг: 0 / 0
07.07.2010, 13:58
    #36727959
Shamanus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Окно загрузки файла
нашел вот такое решение
сейчас попробую, вроде то, что нужно....
...
Рейтинг: 0 / 0
07.07.2010, 14:01
    #36727972
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Окно загрузки файла
Shamanusнашел вот такое решение
сейчас попробую, вроде то, что нужно....
это и есть асинхронный запрос.

Но еще раз - не надо грузить в массив 300к записей! Для этого существует БД!!!!!
...
Рейтинг: 0 / 0
07.07.2010, 15:29
    #36728215
Shamanus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Окно загрузки файла
Shocker.Proэто и есть асинхронный запрос.
Я не по поводу запроса, тут есть ещё и фишка с количеством обработанных данных.

Shocker.ProИдиотское решение (пойдем в категоричности стопами Антонария)
ну весьма категорично я бы сказал :)

Shocker.ProНо еще раз - не надо грузить в массив 300к записей! Для этого существует БД!!!!
Все таки не всегда быстрее запрашивать. Индексы нельзя построить если обращение идет к объединению таблиц. (не партициям, а именно множеству таблиц)
что именно и есть в моем случае
...
Рейтинг: 0 / 0
07.07.2010, 15:34
    #36728230
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Окно загрузки файла
Shamanus Все таки не всегда быстрее запрашивать. Индексы нельзя построить если обращение идет к объединению таблиц. (не партициям, а именно множеству таблиц)
что именно и есть в моем случае
Это что еще за глупость?
Допускаю, что ты просто недостаточно внятно выразил мысль....
...
Рейтинг: 0 / 0
07.07.2010, 15:36
    #36728235
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Окно загрузки файла
Shocker.ProShamanus Все таки не всегда быстрее запрашивать. Индексы нельзя построить если обращение идет к объединению таблиц. (не партициям, а именно множеству таблиц)
что именно и есть в моем случае
Это что еще за глупость?
Допускаю, что ты просто недостаточно внятно выразил мысль....
Кроме того, всегда существует возможность физической реализации плоской таблицы с нужными данными и ее индексирование
...
Рейтинг: 0 / 0
07.07.2010, 16:39
    #36728455
Shamanus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Окно загрузки файла
Shocker.Pro,

Есть база Access. База подключена к внешним файлам, которые содержат фрагменты большой единой таблицы.

Например
Таблица.part1
Таблица.part2
Таблица.part3

База содержит union запрос из нескольких запросов к этим таблицам. Которые объединяют её в одну.

У меня обращение из программы идет к этому запросу, с целью получения общей картины.

Почему таблица фрагментирована?
- местоположение программы, структурное подразделение компании не имеющее доступа в центральную БД, им приходится скидывать БД. Т.к. таблица весит 15 метров, и 7 в архиве, из-за каждого update в одну строку, высылать всю таблицу с нуля некошер. Высылаем обновленный фрагмент.
- сама база Access тоже периодически обновляется, поэтому сливать фрагменты при каждом обновлении в кучу и строить индексы тоже неверно. Автоматизировать этот процесс нельзя.
+ есть лимит на размер почтового вложения 2 мб. - нужно чтобы фрагмент и база вкладывались в этот лимит.

Ну, а если я начну расписывать причины, почему так сделано, ты начнешь категорично утверждать, что компания у нас гиблая и подход неверный :)
...
Рейтинг: 0 / 0
07.07.2010, 16:43
    #36728473
Игорь Горбонос
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Окно загрузки файла
> Автор: Shamanus

А если сделать так:
Пользователь вводит как минимум две(три) буквы, после этого делаешь запрос с фильтром на введённые буквы, полученный
рекордсет показываешь в выпадающем листбоксе, и при допечатке символов фильтровать уже полуенный рекордсет?

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
07.07.2010, 17:02
    #36728550
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Окно загрузки файла
ShamanusБаза содержит union запрос из нескольких запросов к этим таблицам. Которые объединяют её в одну.
У меня обращение из программы идет к этому запросу, с целью получения общей картины.
Ну это не отменяет использования индексов.... хотя.... union в аксессе дурной и тормознутый, это я проходил. Может быть можно использовать обращения отдельно к индексам каждой таблицы?
Shamanus
Почему таблица фрагментирована?
- местоположение программы, структурное подразделение компании не имеющее доступа в центральную БД, им приходится скидывать БД. Т.к. таблица весит 15 метров, и 7 в архиве, из-за каждого update в одну строку, высылать всю таблицу с нуля некошер. Высылаем обновленный фрагмент.
Ну, конечно, по-хорошему, это делается на MSSQL с дистрибуцией транзакций, но причин, по которым вы не используете MSSQL может быть конечно же много.
Shamanus- сама база Access тоже периодически обновляется, поэтому сливать фрагменты при каждом обновлении в кучу и строить индексы тоже неверно. Автоматизировать этот процесс нельзя.
+ есть лимит на размер почтового вложения 2 мб. - нужно чтобы фрагмент и база вкладывались в этот лимит.
Я намекал на то, что можно теоретически, вместо памяти сливать эти данные в локальный mdb-файл. Тогда во-первых эту операцию можно будет проделывать не при каждом запуске программы, а только по необходимости, ну и, соответственно, нет проблем с индексированием.
Лично я довольно косо смотрю на процесс, который отжирает от 15-ти мегов оперативки....
...
Рейтинг: 0 / 0
08.07.2010, 08:50
    #36729464
Shamanus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Окно загрузки файла
Игорь Горбонос
> Автор: Shamanus
А если сделать так:
Пользователь вводит как минимум две(три) буквы, после этого делаешь запрос с фильтром на введённые буквы, полученный
рекордсет показываешь в выпадающем листбоксе, и при допечатке символов фильтровать уже полуенный рекордсет?

like запрос к этой таблице отрабатывает 3-5 секунд. Или я неправильно что то делаю?


Shocker.Pro
Ну это не отменяет использования индексов.... хотя.... union в аксессе дурной и тормознутый, это я проходил. Может быть можно использовать обращения отдельно к индексам каждой таблицы?
Вот тут поподробнее, вообще не пойму о чем речь. Думал построить индексы на union запрос нельзя в принципе.

Shocker.ProЯ намекал на то, что можно теоретически, вместо памяти сливать эти данные в локальный mdb-файл. Тогда во-первых эту операцию можно будет проделывать не при каждом запуске программы, а только по необходимости, ну и, соответственно, нет проблем с индексированием.

я вот чето не пойму, как это при необходимости? Все равно нужно будет при запуске проверять изменилось ли чего. А count по количеству записей будет отрабатывать также долго.
или хранить дату/время создания фрагментов? А откуда прога знает сколько фрагментов?

Shocker.ProЛично я довольно косо смотрю на процесс, который отжирает от 15-ти мегов оперативки.... Ну это ты пользователю будет сугубо лично индифферентно.
...
Рейтинг: 0 / 0
08.07.2010, 09:59
    #36729559
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Окно загрузки файла
ShamanusДумал построить индексы на union запрос нельзя в принципе.
Индексы строятся на таблицы, а не на запросы (материализованные представления в MSSQL опустим). Запросы используют эти индексы. Другой вопрос, что аксесс плохо (по крайней мере лет 5 назад, щас не знаю) работал с UNION-ами в плане скорости.

другой вопрос, что ты ищешь Like-ом. Тут индексы - да, не помогут.

Shamanusя вот чето не пойму, как это при необходимости? Все равно нужно будет при запуске проверять изменилось ли чего. А count по количеству записей будет отрабатывать также долго.
или хранить дату/время создания фрагментов? А откуда прога знает сколько фрагментов?
Почему также долго? Если Like не использует индексы, то Count-то - вполне.

Насчет фрагментов - не знаю, как у тебя устроены изменения этой структуры. Твой UNION-запрос как-то ведь об этом узнает...
ShamanusShocker.ProЛично я довольно косо смотрю на процесс, который отжирает от 15-ти мегов оперативки.... Ну это ты пользователю будет сугубо лично индифферентно.
А что база по размеру не расширяется постоянно?
...
Рейтинг: 0 / 0
08.07.2010, 10:36
    #36729639
Shamanus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Окно загрузки файла
Shocker.ProНасчет фрагментов - не знаю, как у тебя устроены изменения этой структуры. Твой UNION-запрос как-то ведь об этом узнает...
запрос "узнает" при обновлении самой базы аксесс

Shocker.ProА что база по размеру не расширяется постоянно? скорость роста маленькая. За месяц прирастает 1-1,5 тыс записей. Или рост за год 4,3% или 20Мб+5%=21МБ через год. Метром больше, метром меньше ..


Shocker.Pro, такой ещё вопрос в рамках этой же задачи.

Я пытаюсь уже не закорачиваясь просто сделать форму, которая появляется перед загрузкой приложения, в процессе загрузки на ней меняется label, и она hide-тся после обработки всех запросов. Но форма появляется белая, как недозагруженная...

вот скрин
...
Рейтинг: 0 / 0
08.07.2010, 10:36
    #36729640
Shamanus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Окно загрузки файла
Shamanus,
...
Рейтинг: 0 / 0
08.07.2010, 10:37
    #36729641
Shamanus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Окно загрузки файла
сорри интернет тупит
...
Рейтинг: 0 / 0
08.07.2010, 10:40
    #36729656
Игорь Горбонос
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Окно загрузки файла
> Автор: Shamanus


Дык, ты, это, сначала покажи форму, дай ей отрисоватся, а потом начинай загрузку делать

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
08.07.2010, 10:41
    #36729657
Shamanus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Окно загрузки файла
Среда разработки VB6
код такой

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
Form1.Show

Form1.Label1( 0 ).Caption = Название
Выполнение запроса  1 
Form1.Label1( 0 ).Caption = Название
Выполнение запроса  2 

....

Form1.Label1( 0 ).Caption = Название
Выполнение запроса  14 

Unload Form1

в коде формы 1 никаких процедур нет
...
Рейтинг: 0 / 0
08.07.2010, 10:42
    #36729661
Shamanus
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Окно загрузки файла
Игорь Горбонос
> Автор: Shamanus


Дык, ты, это, сначала покажи форму, дай ей отрисоватся, а потом начинай загрузку делать


Я уже понял, что из моих слов не следует, что я её рисую. Вставил код в прошлом посте.
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Окно загрузки файла / 25 сообщений из 96, страница 1 из 4
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]