powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Прогрес Бар при загрузке Query
24 сообщений из 49, страница 2 из 2
Прогрес Бар при загрузке Query
    #32378527
Dedushka Mazai
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
не - ну тут, конечно, никто и спорит. если софтина написана под аксес, а база огроменная (ну, скажем, по надцать миллионов записей в таблицах), то тут и ежу понятно, что аксес загнётся. так это ж тогда разработчик лажанулся. для каждой задачи надо выбирать соответствующую платформу. можно и запорожец 15 человек запихнуть - только вот будет ли он ехать?
...
Рейтинг: 0 / 0
Прогрес Бар при загрузке Query
    #32378544
Snatch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да база тянет своё существование из далеких далек
+ все архивы остаются в ней же
...
Рейтинг: 0 / 0
Прогрес Бар при загрузке Query
    #32378574
Snatch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 Dedushka Mazai
Кстати что ты про Application.ProcessMessages; грил
работает одинаково что с ним что без него и контролы так же не прорисовываются когда проведеш по энтому окну другим
...
Рейтинг: 0 / 0
Прогрес Бар при загрузке Query
    #32378581
Фотография KirillovA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TThread
...
Рейтинг: 0 / 0
Прогрес Бар при загрузке Query
    #32378589
Фотография JibSkeart
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FAQ

____
...
Рейтинг: 0 / 0
Прогрес Бар при загрузке Query
    #32378596
Dedushka Mazai
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
при чём тут другие окна?
предположим у тебя есть такой код:

if MessageDlg('Вставить мильён записей?', mtWarning, [mbYes, mbNo], 0)=mrYes then begin
//офигенный инсерт
end;

так вот - у тебя твоя форма в том месте, где было модальное окно не перерисуется. для этого и нужен вызов Application.ProcessMessages.

а чтобы перерисовывалось так, как ты написал, надо по таймеру делать Invalidate.
...
Рейтинг: 0 / 0
Прогрес Бар при загрузке Query
    #32378611
Snatch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 JibSkeart
и там тоже самое
не до корня(
...
Рейтинг: 0 / 0
Прогрес Бар при загрузке Query
    #32378697
locky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Dedushka Mazai
привести пример запроса на 40 минут? обычная выборка :-)
А на 4.5 часа?
...
Рейтинг: 0 / 0
Прогрес Бар при загрузке Query
    #32378730
Snatch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
To KirillovA
авторTThread
Как прервать процесс открытия Query?
...
Рейтинг: 0 / 0
Прогрес Бар при загрузке Query
    #32378734
Фотография KirillovA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kill №процесса
...
Рейтинг: 0 / 0
Прогрес Бар при загрузке Query
    #32378739
Dedushka Mazai
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2locky:
приведи
...
Рейтинг: 0 / 0
Прогрес Бар при загрузке Query
    #32378753
Snatch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Так ты про SQL запрос говорил
'Kill №'
я блин ищю в дельфях что только не перепробовал
а узнать № процесса своей Query?
...
Рейтинг: 0 / 0
Прогрес Бар при загрузке Query
    #32378759
Фотография KirillovA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SELECT @@SPID
...
Рейтинг: 0 / 0
Прогрес Бар при загрузке Query
    #32378762
locky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Dedushka Mazai
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
select	date,case when DateCalc < '01.01.2000' then '01.01.1900' else DateCalc end
	,House_id,Ac,Sum(Summ)
	,Sum(Vol),Count(*),Count(distinct DD.Acc)
	,case when InnerState & ( 32 + 64 ) <>  0  then InnerState else  0  end
from	DocDebet DD inner join acfi A on DD.Acc = A.ID
where	DD.State = convert(bit, 0 ) and DD.Date >= @datefrom and DD.Date < @dateto
group by date
	,case when DateCalc < '01.01.2000' then '01.01.1900' else DateCalc end
	,House_id,Ac
	,case when InnerState & ( 32 + 64 ) <>  0  then InnerState else  0  end
...
Рейтинг: 0 / 0
Прогрес Бар при загрузке Query
    #32378789
Dedushka Mazai
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2locky:
скажу ещё раз, если ты невнимательно читал этот топик: если запрос долго отрабатывается, значит либо виноват разработчик, у которого кривые руки (а может и голова), либо железо слабое и, как следствие, тормозит SQL-сервер.
запрос твой всё равно ничего не скажет, так как без информации о структуре БД, о платформе, SQL-сервере и железе объективно запрос не оценить. Может его можно написать в 10 раз проще?
...
Рейтинг: 0 / 0
Прогрес Бар при загрузке Query
    #32378841
Snatch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
автор2 Dedushka Mazai
Но мы же не ищем кто виноват
автор2 KirillovA а SELECT @@SPID даёт свой Id
пытаюсь вставить в основной запрос но толку то не будет когда' я его получу обратно
...
Рейтинг: 0 / 0
Прогрес Бар при загрузке Query
    #32378843
locky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а куда проще то?
Связка двух таблиц и суммы с группировками :-)
к сожалению, не все запросы можно оптимизировать :-( (даже при наличии прямых рук)
Железо... ну, слабовато немного (дисковая подсистема не самая быстрая, а при этом запросе (и аналогичных запросах) это очень важно, т.к. перелопачивается большой объем данных)
(развести тут флейм, что ли?)
Иногда, если запрос долго выполняется, это свидетельствует только о том, что он и должен долго выполняться. Потому что руки править - может и можно, да уж вроде некуда, а денег на то, чтобы прикупить себе парочку дополнительных камней, еще 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 минут. Но есть и куда более тяжелые.
...
Рейтинг: 0 / 0
Прогрес Бар при загрузке Query
    #32378853
locky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Snatch
А кто мешает в потоке создать TADOConnection, подцепить к нему 2 процедуры(или TADOQuery - кому что нравится) - одна из них возрващает @@SPID, другая, собственно, считает то, что надо.
Запустил 1-ю получил @@SPID, затем запустил вторую.
Можно и одной процедурой обойтись - запускать с разными кодами запуска.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
create procedure _My
@action int
as begin
  if @action =  0  return @@spid
  if @action =  1  begin
   DoSomeWork
   return  0 
 end
 return  0 
end

Как я подозреваю, можно и TADOConnection заставить сделать что-то вроде Execute('select @@SPID'), но никогда такого не пробовал и как получить результат просто не знаю.
...
Рейтинг: 0 / 0
Прогрес Бар при загрузке Query
    #32378895
Dedushka Mazai
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2locky:
авторк сожалению, не все запросы можно оптимизировать :-( (даже при наличии прямых рук)
запросы может и не оптимизировать, а вот логику программы запросто.
если есть некая оперативная таблица, в которую постоянно добавляются данные, то постоянно иметь в ней ~10^9 записей по меньшей мере неразумно.
морально устаревшие данные можно архивировать. Вот тебе реальный пример (между прочим, тоже MSSQL):
телефонный биллинг, данные о звонках хранятся в оперативной таблице. За год работы накопится такая херова туча данных, что, например, посмотреть отчёт за текущий месяц - это уже проблема. Решение: старые звонки удалить из оперативной таблицы и хранить в архиве. в результате тормоза уменьшились в несколько раз.

авторЖелезо... ну, слабовато немного (дисковая подсистема не самая быстрая, а при этом запросе (и аналогичных запросах) это очень важно, т.к. перелопачивается большой объем данных)
если пишется серьёзный биллинг для большой конторы (если контора небольшая - врядле у них будет под миллиард оборотов в оперативной таблице, если я правильно понял назначение таблицы), то в их же интересах купить для этого соответствующее железо

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

авторMS SQL Server EE
MSSQL - это далеко не лучший сервер, если уже что и покупать, так это Oracle или Informix
...
Рейтинг: 0 / 0
Прогрес Бар при загрузке Query
    #32378917
locky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2Dedushka Mazai
Ну, не миллиард, а все-ж таки в 5 раз меньше (пока что)...
Серъезная контора, обслуживает весь город...
Государственная (это, кстати, о деньгах на железо ;-) Как ты думаешь, есть они?)
Архив? Здорово, хорошая идея :-)
проблема в том, что при распечатке карточки, расчете списания задолженностей и всё такое, должна быть учтена ВСЯ информация :-).
Тем более, независимо от того, удалить или не удалить из базы информацию о прошедших периодах, текущий период быстрее считаться не будет (если, конечно, не считать сальдо входящее как обороты о начала времен).
Тут надо тупо перелопатить много-много строк, сложить их так и этак, и выдать на гора результат.
...
Рейтинг: 0 / 0
Прогрес Бар при загрузке Query
    #32378945
Dedushka Mazai
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторСеръезная контора, обслуживает весь город...
Государственная (это, кстати, о деньгах на железо ;-) Как ты думаешь, есть они?)
хе-хе. как мне это знакомо :) ну чего уж - как говаривал один небезызвестный политик: маємо те, що маємо :)
зато есть отличная отмазка: медленно работает? - ну дык купите быстрые компы и всё летать будет!

авторпроблема в том, что при распечатке карточки, расчете списания задолженностей и всё такое, должна быть учтена ВСЯ информация :-).
не обязательно. можно так организовать бд, что будут храниться только остатки на какой-либо период и перелопачивать старые данные не будет смысла (но это опять-таки применительно к задаче)

авторТем более, независимо от того, удалить или не удалить из базы информацию о прошедших периодах, текущий период быстрее считаться не будет

будет-будет. как ты думаешь, есть разница между выполнением дорогого запроса на пустой таблице и на таблице с миллионами записей?
этот факт проверен на практике

ЗЫ: а вообще - сделать можно всё, было бы желание да возможности
...
Рейтинг: 0 / 0
Прогрес Бар при загрузке Query
    #32378986
locky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
остатки есть, но по другому временнОму срезу.
А остатки по нужному временнОму срезу по объему сопоставимы с объемом исходных данных :-)
Кстати, что-то я не замечал, что при наличии нужных индексов размер таблицы влияет на скорсть выборки нужных данных (при условии, что объем нужных данных не пропорционален объему таблицы). Т.е. если меня из этой таблицы интересует, скажем 10 строк по такому-то ключу, то разница в выборке из таблицы объемом 10^3 строк не сильно отличается от выборки из таблицы объемом 10^8 строк.
...
Рейтинг: 0 / 0
Прогрес Бар при загрузке Query
    #32378994
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Событие 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;
}
...
Рейтинг: 0 / 0
Прогрес Бар при загрузке Query
    #32379036
Snatch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 Гавриленко Сергей Алексеевич
пробовал
но такое дело что там прогресс =макспрогресс = рекорд кокнт
и обращяется к энтой процедуре единожды
какой тут после этого прогресс
...
Рейтинг: 0 / 0
24 сообщений из 49, страница 2 из 2
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Прогрес Бар при загрузке Query
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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