Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Проблеммка - Визуальные компоненты - При обрабтке большой базы [D6, dBase, FoxPro, Btrieve]


Stenkz ©   (2003-01-20 08:36:00) 

При обрабтке большой базы, примерно 120 000 записей, на форме отключаются визуальные компоненты, например ProgreesBar и включаются только при окончании цикла. Например здесь. Pb1 - прогресс бар
Вот пример кода:
Pb1.Position:=0;
Pb1.Max:=TPr_Cred.RecordCount;
Lproc.Caption:="0%";
while (not TPr_Cred.EOF )do
begin
PB1.Position:=TPr_Cred.RecNo;
LProc.Caption:=FloatToStr(RoundTo PB1.Position/Pb1.Max*100,-2))+" %";
TPr_Cred.Delete;
end;

Дело приосходит на WinXp


izyum   (2003-01-21 13:15:00) [1]

В некоторых БД, хоть это и не рекомендуется, можно использовать RecordCount и RecNo. Проблема в том, что, например IB, выдает в РекордСаунт количество уже отфетченных записей, а не реальное их количество в таблице. Для того что бы он показал правильное число записей перед использованием этих свойств сделай NameTable.FetchAll.


Stenkz   (2003-01-21 10:36:00) [2]

Спасибо всем за ответы :) Вери санькс...


Johnmen   (2003-01-20 14:11:00) [3]

RecNo не поддерживается используемым тобой движком для используемой тобой БД. Вообще про это св-во лучше забыть...


Delirium^.Tremens   (2003-01-20 14:04:00) [4]

Фильтры .. etc.


Stenkz   (2003-01-20 13:47:00) [5]

После того как сделал PB1.Position:=PB1.Position+1
заработало.
Это что RecNo выдавал конец таблицы? С чем это может быть связано?


Johnmen   (2003-01-20 13:26:00) [6]

>Delirium^.Tremens © (20.01.03 13:15)

Практически монопенисно... :-)))))))))


Delirium^.Tremens   (2003-01-20 13:15:00) [7]

Johnmen © (20.01.03 13:09)
ProgressBar.StepIt; :-)


Johnmen   (2003-01-20 13:09:00) [8]

>Delirium^.Tremens © (20.01.03 13:02)

Никто же не гарантирует корректность RecNo...



Delirium^.Tremens   (2003-01-20 13:02:00) [9]

Johnmen © (20.01.03 12:56)
> (Кстати : PB1.Position:=PB1.Position+1; так правильней...)

В чем правильность, брат?
Что на счет шага?


Stenkz   (2003-01-20 13:00:00) [10]

сделано например <Johnmen> © (20.01.03 09:30)
сделано BorisUK © (20.01.03 09:33)


Johnmen   (2003-01-20 12:56:00) [11]

Что было сделано ?
(Кстати : PB1.Position:=PB1.Position+1; так правильней...)


Digitman   (2003-01-20 12:54:00) [12]

>Stenkz

Ты читал вот это ? <Johnmen> © (20.01.03 09:30) ???


Stenkz   (2003-01-20 12:44:00) [13]

Братцы - не работает, прогрессбар сразу 100% показывает, и значёк SQl моргает...


111   (2003-01-20 09:51:00) [14]

Удалено модератором


Johnmen   (2003-01-20 09:41:00) [15]

>BorisUK © (20.01.03 09:33)
>Ну и в потоке такие вещи делать конечно правильнее.

В чем правильность, брат ?


BorisUK   (2003-01-20 09:33:00) [16]

Pb1.Position:=0;
Pb1.Max:=TPr_Cred.RecordCount;
Lproc.Caption:="0%";
Application.ProcessMessages;
while (not TPr_Cred.EOF )do
begin
PB1.Position:=TPr_Cred.RecNo;
PB1.Refresh;
LProc.Caption:=FloatToStr(RoundTo PB1.Position/Pb1.Max*100,-
2))+" %";
LProc.Refresh;
TPr_Cred.Delete;
end;
Ну и в потоке такие вещи делать конечно правильнее.
Главное на время выполнения доступ к таблице залочить!


Johnmen   (2003-01-20 09:30:00) [17]

Application.ProcessMessages последней строкой цикла


Соловьев   (2003-01-20 09:27:00) [18]

Вызови метод Update. А лучше всего в отдельном потоке сделай прогресс...


Наверх

Титульная страница Поиск, карта сайта Написать письмо