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

Вниз

onFilterRecord   Найти похожие ветки 

 
td   (2004-04-15 22:40) [0]

В событии 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 вместе с обработчиком не перемещается по всем записям набора данных, а остается все время на первой!

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


 
tERRORist ©   (2004-04-15 22:50) [1]

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


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

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

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

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


 
kaif ©   (2004-04-16 03:19) [3]

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


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

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

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

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


 
Reindeer Moss Eater ©   (2004-04-16 08:58) [5]

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

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


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

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


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

не связаны :(

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


 
ЮЮ ©   (2004-04-16 09:18) [8]

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

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

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


 
tERRORist ©   (2004-04-16 09:25) [9]

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


 
ЮЮ ©   (2004-04-16 09:32) [10]

TTable + OnFilterRecord + Locate

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


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


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


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

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



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

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

Наверх




Память: 0.49 MB
Время: 0.038 c
3-1082704507
pet600
2004-04-23 11:15
2004.05.16
Oracle 9 + dbExpress (D7)


4-1080451471
C.A.M.
2004-03-28 09:24
2004.05.16
Восстановление сетевого подключения


1-1082973506
Daman
2004-04-26 13:58
2004.05.16
Как получить тег любого объекта кликом на него


4-1080823908
Midaw
2004-04-01 16:51
2004.05.16
Перевод хэндла процесса в хэндл его окна


1-1083048323
Vitaliygavrilov
2004-04-27 10:45
2004.05.16
Не умещется страка в Combobox как сделать