Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Компоненты";
Текущий архив: 2006.01.29;
Скачать: [xml.tar.bz2];

Вниз

отрубить 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.45 MB
Время: 0.052 c
8-1124723116
nuser
2005-08-22 19:05
2006.01.29
Доступ к тегам mp3-файла


3-1133163291
boalse
2005-11-28 10:34
2006.01.29
Хэш-функция и поиск


3-1133187172
s77
2005-11-28 17:12
2006.01.29
sql запрос для поиска, сравнение с null


2-1137161449
sanich
2006-01-13 17:10
2006.01.29
Что могла бы значить подобная ошибка?


2-1137320121
SergP
2006-01-15 13:15
2006.01.29
StrToDateTime. Проблема с форматом даты/времени





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский