![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Проблеммка - Визуальные компоненты - При обрабтке большой базы [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. А лучше всего в отдельном потоке сделай прогресс...