Форум: "Базы";
Текущий архив: 2004.05.16;
Скачать: [xml.tar.bz2];
Вниз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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.049 c