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

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

onFilterRecord [D5, Paradox]


td ©   (2004-04-15 22:40:00) 

В событии Table1.OnFilterRecord(DataSet: TDataSet;  var Accept: Boolean) при выполнении обработчика каким-то образом получается так, что DataSet - это вовсе не та таблица, которой это событие присвоено.
Это может влиять, что событие я динамически присваиваю?

(Таблица фильтруется по некоторой зависимости от значения одного из полей). Т.е. мне надо получить сначала значение поля Field1.

Было написано так (утрируя): s:=DataSet.FieldByName('Field1').AsString;
Accept:=Table2.Locate('ID',s,[]);  

(Ну т.е. если в Table2 находятся записи, которые каким-то образом соответсвуют текущей записи Table1, то она Accept:=true).

Но почему-то датасетом оказалась таблица, которую я фильтрую до этого, т.е. Table2!!

И вот еще - попробовал обойти, написал так:

s:=Table1.FieldByName('Field1').AsString;

Тогда s вместе с обработчиком не перемещается по всем записям набора данных, а остается все время на первой!

Почему так происходит?
Спасибо!


td   (2004-04-16 17:57:00) [1]


> ЮЮ ©   (16.04.04 09:32) [10]


Да-аа.. пожалуй, что так. Сегодня, когда заметил, что потер одну строку случайно, все чудесным образом разрешилось и заработало в любых ситуациях, но стало ужасно тормозить!!

Всем спасибо за помощь!


ЮЮ   (2004-04-16 09:32:00) [2]

TTable + OnFilterRecord + Locate

Не пора ли переходить на запросы? (вопрос риторический :)


tERRORist   (2004-04-16 09:25:00) [3]

td говорил что обработчики разные...
Но вот когда идет локейт по Тэйбл2, действительно может многократно вызываться ОнФильтерТэйбл2. Попробуй отрубать Table2.Filtered на время локейта


ЮЮ   (2004-04-16 09:18:00) [4]

>Но почему-то датасетом оказалась таблица, которую я фильтрую до этого, т.е. Table2!!

Что значит фильтрую до этого. Фильтрация производится непрерывно. К чему, думаешь, приведёт Table2.Locate('ID',s,[])?. К сканированию Table2 и , соответственно, вызову этого же обработчика, но для DataSet=Table2 ! И только после туевой хучи вызовов этого обработчика, вызванного этим Locate, продолжится выполнение обработчика для DataSet=Table1

Напиши разные обработчики для фильтрации Table2 и Table1. По крайней мере будешь понимать где нахожишься


td   (2004-04-16 09:15:00) [5]

не связаны :(

мистика какая-то


tERRORist   (2004-04-16 09:08:00) [6]

А таблицы не связаны друг с другом как мастер-детайл? Или может где-то еще прописано их взаимодействие, которое блокирует перемещение по Table1


Reindeer Moss Eater   (2004-04-16 08:58:00) [7]

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

Если только он руками (зачем-то) не вызван
Form1.OnFilterRecord(AnotherDataSet,AAccept);


td   (2004-04-16 08:48:00) [8]

присвоения при создании формы.
Потому что в других формах другой механизм фильтрации.

Filtered делаю
nil попробую..

Так все же, почему, если обращаться не имени к набору данных
s:=Table1.FieldByName('Field1').AsString;
то получается, что курсор остается на одной и той же строке?
Это так и должно быть, да?


kaif   (2004-04-16 03:19:00) [9]

Когда происходят присвоения обработчиков? Пробовал ли перед присвоением сначала присваивать им nil? Делаешь ли после присвоения обработчика какие-то refresh или хотя бы
Filtered := False;
Filtered := True;
Почему пришлось обработчики присваивать динамически?


td   (2004-04-15 23:01:00) [10]

нет, конечно :)

Тем более, что они оба присваиваются динамически. Я думаю, может, в этом дело?

Тем более, эта дрянь обнаружилась только в особой последовательности действий. В прочих ситуациях все работает по-задуманному.


tERRORist   (2004-04-15 22:50:00) [11]

Случайно этот же обработчик у второго Тэйбла2 не стоит?
Может они оба ссылаются на Table1OnFilterRecord


Наверх

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