Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.01.29;
Скачать: CL | DM;

Вниз

отрубить DataSource но без DisableControls   Найти похожие ветки 

 
leolick ©   (2005-08-08 21:45) [0]

Пишу компоненту и хочу посчиталь номер текущей логической записи с учетом всех индексов фильтров и всяких запрсов... Стандартной такой функции нет... :( Пытаюсь написать..... вроде все выходит а когда добавляю эту функцию в обработчик события DataChange компанента DataSource эта редиска залазит в бесконечный цыкл. Пытался отрубить DisableControls но при обратном подключении срабатывает опять DataChange, и все по кругу... что делать подскажите ПЛИЗЗЗЗЗЗЗЗЗЗЗЗ!!!!! Нужно срочно и позарез... допишу компоненту поделюсь, если понадобится, или алгоритмом...


 
Наиль ©   (2005-08-08 22:17) [1]

Не вникая в суть компонентов баз данных, могу предложить следующее.

private
IamBusy:boolean;
...
Constructor ___.Create
Begin
IamBusy:=false;
....
End;

Function ___.MyFunction;
Begin
if IamBusy then Exit;
IamBusy:=true;
....
IamBusy:=false;
End;

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


 
Юрий Зотов ©   (2005-08-09 03:20) [2]

А если еще добавить try-finally, то все станет вполне надежно:

procedure TMyComponent.MyProc;
begin
 if not FIamBusy then
 begin
   FIamBusy := True;
   try
     ...
   finally
     FIamBusy := False
   end
 end
end;

Буква F добавлена к IamBusy не случайно - это должно быть поле компонента.


 
Юрий Зотов ©   (2005-08-09 10:01) [3]

Хотя, по здравом размышлении - что-то тут не так. DataChange означает любое изменение данных и если возникает рекурсия - значит, Ваша функция их как-то меняет. Хотя, если исходить из ее назначения, делать этого, вроде как, не должна. Поэтому я бы проверил, не портит ли она данные.


 
Наиль ©   (2005-08-09 15:10) [4]

Моих скудных знаний по DBComponents хватает, чтобы вспомнить, что DataChange вызывается всегда, когда изменяется содержимое FieldValues. Например, при вызове Next. Так что думаю дело не в изменении, а в переборе данных.


 
leolick ©   (2005-08-09 19:23) [5]

DataChange вызывается при любом изменении номера записи (переходе на другую), при обновлении (Refresh), при открытии и закрытии таблиц и при вызове DisableControls... А зацыкливание вызывает компонент DataSource. Чтото такое уже пробовал... Попробую и этот вариант. Спасибо!!! Если будут идеи как лучше избавится от этого гемороя пишите. Зарание Спасибо!



Страницы: 1 вся ветка

Текущий архив: 2006.01.29;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.055 c
2-1136932525
Arazel
2006-01-11 01:35
2006.01.29
(DiskSize-DiskFree) > на Char (Не чего не получается :( )


6-1129401928
Black-Grin
2005-10-15 22:45
2006.01.29
NMFTP вызов LIST


1-1134447027
pepper
2005-12-13 07:10
2006.01.29
Динамическая загрузка mht файла в WebBrowser


15-1136762101
iZEN
2006-01-09 02:15
2006.01.29
Mind map, или Научите себя думать.


2-1136802938
BiggieSmalls
2006-01-09 13:35
2006.01.29
Свернуть окно