Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Прогрес Бар при загрузке Query
|
|||
|---|---|---|---|
|
#18+
Как показывать ход загрузки данных с базы в прогу и по возможность отменить запрос по Cancel типа База SQL Delphi 7 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2004, 16:33 |
|
||
|
Прогрес Бар при загрузке Query
|
|||
|---|---|---|---|
|
#18+
Реальный прогресс никак. А чтоб сделать Cancel запрос пуляй ассинхронно или в отдельном треде. Вот тока накой все это. Какие объемы вы грузите, что прогресс понадобился? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2004, 16:42 |
|
||
|
Прогрес Бар при загрузке Query
|
|||
|---|---|---|---|
|
#18+
через kill № процесса ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2004, 16:45 |
|
||
|
Прогрес Бар при загрузке Query
|
|||
|---|---|---|---|
|
#18+
если это нужно, чтобы занять чем-то пользователя, пока выполняется один тяжёлый запрос, то никак. можно, конечно, через сторед прок извратиться - но это будет полный изврат. если нужно, чтобы всё не замирало при Query1.Open, то можно сделать так Screen.Cursor:=crSQLWait; try Application.ProcessMessages; Query1.Open; finally Screen.Cursor:=crDefault; end; или какой-нить TAnimate прикрутить с летящими документами. ещё можно от балды двигать прогресс-бар, а потом, когда запрос откроется, сразу прыгать на 100% ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2004, 16:50 |
|
||
|
Прогрес Бар при загрузке Query
|
|||
|---|---|---|---|
|
#18+
Аолучилось у меня в два запроса Сначала получаю общее число полей через SElect Count(*) .. потом AsyncFetch используя получаю процентовку Объёмы порядка 6 милионнов ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2004, 10:05 |
|
||
|
Прогрес Бар при загрузке Query
|
|||
|---|---|---|---|
|
#18+
авторОбъёмы порядка 6 милионнов У тебя пользователи гении чтоли?! Накой им такие объемы данных? И SQL в таком случаи на кой тебе? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2004, 10:06 |
|
||
|
Прогрес Бар при загрузке Query
|
|||
|---|---|---|---|
|
#18+
4 pkarklin Я про таблицу воще а выборка тоже не меньше получается в принцыпе ждать не долго 10-15 сек по запросу ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2004, 10:12 |
|
||
|
Прогрес Бар при загрузке Query
|
|||
|---|---|---|---|
|
#18+
автора выборка тоже не меньше получается Вот и спрашиватеся, нафига такое нужно, если обычный пользователь после скроллинга 200-300 записей уже забывате, что было в начале набора. И эти 10-15 секунд это что - серверное время выполнения запроса или время перекачи набора по сети. Может лучше потратить время на оптимизацию запроса. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2004, 10:27 |
|
||
|
Прогрес Бар при загрузке Query
|
|||
|---|---|---|---|
|
#18+
4 pkarklin Советуешь Показывать по кадрово? Запрос за 15 сек уже у клиента, оптимизировать куда уж проще, выборка из одной таблицы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2004, 11:08 |
|
||
|
Прогрес Бар при загрузке Query
|
|||
|---|---|---|---|
|
#18+
Да, в SELECT * FROM MyTable много не наоптимизуруешь. А если SELECT COUNT(*) FROM MyTable возвращает 6 млн., то ничего и не надо оптимизировать, ибо все уже оптимально. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2004, 11:21 |
|
||
|
Прогрес Бар при загрузке Query
|
|||
|---|---|---|---|
|
#18+
авторСоветуешь Показывать по кадрово? Уж лучше, чем все на клиента гнать. А еще лучше, чтоб юзер мог задать критерии отбора от 1 до n и получить ограниченный объем записей. Про какую предметную область то речь идет? Если не секрет, конечно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2004, 11:33 |
|
||
|
Прогрес Бар при загрузке Query
|
|||
|---|---|---|---|
|
#18+
2 pkarklin Разработка для конторы одной. По оконно оно то хорошо но для отчета не годится ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2004, 11:52 |
|
||
|
Прогрес Бар при загрузке Query
|
|||
|---|---|---|---|
|
#18+
2 Dedushka Mazai Кстати Application.ProcessMessages никак не проканает ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2004, 13:15 |
|
||
|
Прогрес Бар при загрузке Query
|
|||
|---|---|---|---|
|
#18+
2Snatch: да ты шо?! неужто? ты хоть знаешь для чего оно там нужно? это чтобы контролы на форме прорисовались нормально, пока запрос выполняется ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2004, 13:22 |
|
||
|
Прогрес Бар при загрузке Query
|
|||
|---|---|---|---|
|
#18+
Вопрос по другому стоит ведь а так и окно свернуть не получится даже ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2004, 13:27 |
|
||
|
Прогрес Бар при загрузке Query
|
|||
|---|---|---|---|
|
#18+
а зачем нам его сворачивать? мы ж его только что открыли? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2004, 13:29 |
|
||
|
Прогрес Бар при загрузке Query
|
|||
|---|---|---|---|
|
#18+
А Обновление Забыли? и Запросы Бывають и не на 15 сек, а и на полчаса ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2004, 13:35 |
|
||
|
Прогрес Бар при загрузке Query
|
|||
|---|---|---|---|
|
#18+
если запрос выполняется полчаса, значит либо бд кривая (например, индексов нету), либо зам запрос криво написан, либо логика у программы кривая. я, как пользователь, программу, в которой запросы по полчаса выполняются, без раздумий выкинул бы на свалку. поэтому, аргумент "бывают запросы на полчаса" не принимается ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2004, 13:40 |
|
||
|
Прогрес Бар при загрузке Query
|
|||
|---|---|---|---|
|
#18+
Поговорка "Молод ты и Неискушен не Видал Больших Баз Данных" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2004, 13:43 |
|
||
|
Прогрес Бар при загрузке Query
|
|||
|---|---|---|---|
|
#18+
и какие же базы, по Вашему мнению, считаются большими? а поговорка хороша. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2004, 13:46 |
|
||
|
Прогрес Бар при загрузке Query
|
|||
|---|---|---|---|
|
#18+
создаешь нитку TThread. в ней ранишь свой запрос и все. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2004, 13:47 |
|
||
|
Прогрес Бар при загрузке Query
|
|||
|---|---|---|---|
|
#18+
2Kirillov: это-то итак понятно. тут уже тема обсуждения другая ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2004, 13:49 |
|
||
|
Прогрес Бар при загрузке Query
|
|||
|---|---|---|---|
|
#18+
тема в том что дохнет приложение - юзер должен еще чета делать. поэтому только так как я написал. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2004, 13:50 |
|
||
|
Прогрес Бар при загрузке Query
|
|||
|---|---|---|---|
|
#18+
и что же он ещё должен делать? если я хочу просмотреть список чего-либо, значит я хочу делать именно это, а не нажимать на кнопочки, вводить текст или чего ещё там (это если select). если запрос это не select, то как-то не понятно, как он может выполняться полчаса и более ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2004, 13:58 |
|
||
|
Прогрес Бар при загрузке Query
|
|||
|---|---|---|---|
|
#18+
2 Dedushka Mazai Чесно если так долго он выполнялся в Аксесе а перевели на скл за минуту другую была полная выборка Думаеш нехай он его запустил пусть теперь подождет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2004, 14:01 |
|
||
|
Прогрес Бар при загрузке Query
|
|||
|---|---|---|---|
|
#18+
не - ну тут, конечно, никто и спорит. если софтина написана под аксес, а база огроменная (ну, скажем, по надцать миллионов записей в таблицах), то тут и ежу понятно, что аксес загнётся. так это ж тогда разработчик лажанулся. для каждой задачи надо выбирать соответствующую платформу. можно и запорожец 15 человек запихнуть - только вот будет ли он ехать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2004, 14:11 |
|
||
|
Прогрес Бар при загрузке Query
|
|||
|---|---|---|---|
|
#18+
Да база тянет своё существование из далеких далек + все архивы остаются в ней же ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2004, 14:20 |
|
||
|
Прогрес Бар при загрузке Query
|
|||
|---|---|---|---|
|
#18+
2 Dedushka Mazai Кстати что ты про Application.ProcessMessages; грил работает одинаково что с ним что без него и контролы так же не прорисовываются когда проведеш по энтому окну другим ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2004, 14:34 |
|
||
|
Прогрес Бар при загрузке Query
|
|||
|---|---|---|---|
|
#18+
TThread ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2004, 14:37 |
|
||
|
Прогрес Бар при загрузке Query
|
|||
|---|---|---|---|
|
#18+
при чём тут другие окна? предположим у тебя есть такой код: if MessageDlg('Вставить мильён записей?', mtWarning, [mbYes, mbNo], 0)=mrYes then begin //офигенный инсерт end; так вот - у тебя твоя форма в том месте, где было модальное окно не перерисуется. для этого и нужен вызов Application.ProcessMessages. а чтобы перерисовывалось так, как ты написал, надо по таймеру делать Invalidate. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2004, 14:46 |
|
||
|
Прогрес Бар при загрузке Query
|
|||
|---|---|---|---|
|
#18+
2 JibSkeart и там тоже самое не до корня( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2004, 14:54 |
|
||
|
Прогрес Бар при загрузке Query
|
|||
|---|---|---|---|
|
#18+
2Dedushka Mazai привести пример запроса на 40 минут? обычная выборка :-) А на 4.5 часа? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2004, 15:32 |
|
||
|
Прогрес Бар при загрузке Query
|
|||
|---|---|---|---|
|
#18+
To KirillovA авторTThread Как прервать процесс открытия Query? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2004, 15:52 |
|
||
|
Прогрес Бар при загрузке Query
|
|||
|---|---|---|---|
|
#18+
kill №процесса ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2004, 15:54 |
|
||
|
Прогрес Бар при загрузке Query
|
|||
|---|---|---|---|
|
#18+
2locky: приведи ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2004, 15:58 |
|
||
|
Прогрес Бар при загрузке Query
|
|||
|---|---|---|---|
|
#18+
Так ты про SQL запрос говорил 'Kill №' я блин ищю в дельфях что только не перепробовал а узнать № процесса своей Query? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2004, 16:06 |
|
||
|
Прогрес Бар при загрузке Query
|
|||
|---|---|---|---|
|
#18+
SELECT @@SPID ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2004, 16:08 |
|
||
|
Прогрес Бар при загрузке Query
|
|||
|---|---|---|---|
|
#18+
2Dedushka Mazai Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2004, 16:11 |
|
||
|
Прогрес Бар при загрузке Query
|
|||
|---|---|---|---|
|
#18+
2locky: скажу ещё раз, если ты невнимательно читал этот топик: если запрос долго отрабатывается, значит либо виноват разработчик, у которого кривые руки (а может и голова), либо железо слабое и, как следствие, тормозит SQL-сервер. запрос твой всё равно ничего не скажет, так как без информации о структуре БД, о платформе, SQL-сервере и железе объективно запрос не оценить. Может его можно написать в 10 раз проще? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2004, 16:26 |
|
||
|
Прогрес Бар при загрузке Query
|
|||
|---|---|---|---|
|
#18+
автор2 Dedushka Mazai Но мы же не ищем кто виноват автор2 KirillovA а SELECT @@SPID даёт свой Id пытаюсь вставить в основной запрос но толку то не будет когда' я его получу обратно ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2004, 16:47 |
|
||
|
Прогрес Бар при загрузке Query
|
|||
|---|---|---|---|
|
#18+
а куда проще то? Связка двух таблиц и суммы с группировками :-) к сожалению, не все запросы можно оптимизировать :-( (даже при наличии прямых рук) Железо... ну, слабовато немного (дисковая подсистема не самая быстрая, а при этом запросе (и аналогичных запросах) это очень важно, т.к. перелопачивается большой объем данных) (развести тут флейм, что ли?) Иногда, если запрос долго выполняется, это свидетельствует только о том, что он и должен долго выполняться. Потому что руки править - может и можно, да уж вроде некуда, а денег на то, чтобы прикупить себе парочку дополнительных камней, еще 5-6 гиг памяти, с 10-ток дисков и MS SQL Server EE - нету. p.s. DocDebet 1.7*10^8 rows, acfi - 4.9*10^5 rows Под ограничения подпадают, конечно, меньше (порядка 4.5*10^6 из DocDebet и все из acfi). Такой вот запрос выполняется, в зависмости от ситуации от 5 до 8 минут. Но есть и куда более тяжелые. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2004, 16:48 |
|
||
|
Прогрес Бар при загрузке Query
|
|||
|---|---|---|---|
|
#18+
2Snatch А кто мешает в потоке создать TADOConnection, подцепить к нему 2 процедуры(или TADOQuery - кому что нравится) - одна из них возрващает @@SPID, другая, собственно, считает то, что надо. Запустил 1-ю получил @@SPID, затем запустил вторую. Можно и одной процедурой обойтись - запускать с разными кодами запуска. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Как я подозреваю, можно и TADOConnection заставить сделать что-то вроде Execute('select @@SPID'), но никогда такого не пробовал и как получить результат просто не знаю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2004, 16:54 |
|
||
|
Прогрес Бар при загрузке Query
|
|||
|---|---|---|---|
|
#18+
2locky: авторк сожалению, не все запросы можно оптимизировать :-( (даже при наличии прямых рук) запросы может и не оптимизировать, а вот логику программы запросто. если есть некая оперативная таблица, в которую постоянно добавляются данные, то постоянно иметь в ней ~10^9 записей по меньшей мере неразумно. морально устаревшие данные можно архивировать. Вот тебе реальный пример (между прочим, тоже MSSQL): телефонный биллинг, данные о звонках хранятся в оперативной таблице. За год работы накопится такая херова туча данных, что, например, посмотреть отчёт за текущий месяц - это уже проблема. Решение: старые звонки удалить из оперативной таблицы и хранить в архиве. в результате тормоза уменьшились в несколько раз. авторЖелезо... ну, слабовато немного (дисковая подсистема не самая быстрая, а при этом запросе (и аналогичных запросах) это очень важно, т.к. перелопачивается большой объем данных) если пишется серьёзный биллинг для большой конторы (если контора небольшая - врядле у них будет под миллиард оборотов в оперативной таблице, если я правильно понял назначение таблицы), то в их же интересах купить для этого соответствующее железо авторИногда, если запрос долго выполняется, это свидетельствует только о том, что он и должен долго выполняться. не должен авторMS SQL Server EE MSSQL - это далеко не лучший сервер, если уже что и покупать, так это Oracle или Informix ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2004, 17:15 |
|
||
|
Прогрес Бар при загрузке Query
|
|||
|---|---|---|---|
|
#18+
2Dedushka Mazai Ну, не миллиард, а все-ж таки в 5 раз меньше (пока что)... Серъезная контора, обслуживает весь город... Государственная (это, кстати, о деньгах на железо ;-) Как ты думаешь, есть они?) Архив? Здорово, хорошая идея :-) проблема в том, что при распечатке карточки, расчете списания задолженностей и всё такое, должна быть учтена ВСЯ информация :-). Тем более, независимо от того, удалить или не удалить из базы информацию о прошедших периодах, текущий период быстрее считаться не будет (если, конечно, не считать сальдо входящее как обороты о начала времен). Тут надо тупо перелопатить много-много строк, сложить их так и этак, и выдать на гора результат. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2004, 17:26 |
|
||
|
Прогрес Бар при загрузке Query
|
|||
|---|---|---|---|
|
#18+
авторСеръезная контора, обслуживает весь город... Государственная (это, кстати, о деньгах на железо ;-) Как ты думаешь, есть они?) хе-хе. как мне это знакомо :) ну чего уж - как говаривал один небезызвестный политик: маємо те, що маємо :) зато есть отличная отмазка: медленно работает? - ну дык купите быстрые компы и всё летать будет! авторпроблема в том, что при распечатке карточки, расчете списания задолженностей и всё такое, должна быть учтена ВСЯ информация :-). не обязательно. можно так организовать бд, что будут храниться только остатки на какой-либо период и перелопачивать старые данные не будет смысла (но это опять-таки применительно к задаче) авторТем более, независимо от того, удалить или не удалить из базы информацию о прошедших периодах, текущий период быстрее считаться не будет будет-будет. как ты думаешь, есть разница между выполнением дорогого запроса на пустой таблице и на таблице с миллионами записей? этот факт проверен на практике ЗЫ: а вообще - сделать можно всё, было бы желание да возможности ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2004, 17:43 |
|
||
|
Прогрес Бар при загрузке Query
|
|||
|---|---|---|---|
|
#18+
остатки есть, но по другому временнОму срезу. А остатки по нужному временнОму срезу по объему сопоставимы с объемом исходных данных :-) Кстати, что-то я не замечал, что при наличии нужных индексов размер таблицы влияет на скорсть выборки нужных данных (при условии, что объем нужных данных не пропорционален объему таблицы). Т.е. если меня из этой таблицы интересует, скажем 10 строк по такому-то ключу, то разница в выборке из таблицы объемом 10^3 строк не сильно отличается от выборки из таблицы объемом 10^8 строк. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2004, 18:08 |
|
||
|
Прогрес Бар при загрузке Query
|
|||
|---|---|---|---|
|
#18+
Событие OnFetchProgress у DataControl'а Из Help'а Occurs periodically during an asynchronous data retrieval operation. Delphi syntax: TFetchProgressEvent = procedure(DataSet: TCustomADODataSet; Progress, MaxProgress: Integer ; var EventStatus: TEventStatus) of object; property OnFetchProgress: TfetchProgressEvent; C++ syntax: typedef void __fastcall (__closure *TFetchProgressEvent)(TCustomADODataSet* DataSet, int Progress, int MaxProgress, TEventStatus &EventStatus); __property TFetchProgressEvent OnFetchProgress = {read=FOnFetchProgress, write =FOnFetchProgress}; Description Write an OnFetchProgress event handler to take specific action during an asynchronous data retrieval operation. The OnFetchProgress event fires periodically during the data retrieval to provide indications of its progress. Create a handler for this event to react to this periodic notification, such as providing the user with a visual indication of the progress of the data retrieval. DataSet is the ADO dataset component that triggered the OnFetchProgress event. This dataset component also contains the recordset in question. Progress is the number of records that have been received since the data fetching operation began. MaxProgress is the total number of records to be retrieved by the operation. Progress and MaxProgress used together to get percent complete. For example, Progress divided by MaxProgress and multiplied by 100 yields the percent completion of the data fetching. procedure TForm1.ADODataSet1FetchProgress(DataSet: TCustomADODataSet; Progress, MaxProgress: Integer; var EventStatus: TEventStatus); begin Caption := 'Percent complete: ' + IntToStr(Trunc(Progress / MaxProgress * 100)) + '%'; Application.ProcessMessages; end; void __fastcall TForm1::ADODataSet1FetchProgress(TCustomADODataSet *DataSet, int Progress, int MaxProgress, TEventStatus &EventStatus) { Caption = "Percent complete: " + IntToStr(Trunc(Progress / MaxProgress * 100)) + "%"; Application->ProcessMessages; } ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.01.2004, 18:15 |
|
||
|
|

start [/forum/topic.php?all=1&fid=58&tid=2115071]: |
0ms |
get settings: |
8ms |
get forum list: |
12ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
35ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
49ms |
get tp. blocked users: |
1ms |
| others: | 215ms |
| total: | 334ms |

| 0 / 0 |
