Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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.058 c
14-1083132708
Тимохов
2004-04-28 10:11
2004.05.16
Режим пользователя и режим ядра.


14-1082771296
Bonial
2004-04-24 05:48
2004.05.16
HXS-файлы


3-1082380121
Term
2004-04-19 17:08
2004.05.16
Можно ли в запросе три поля VARCHAR объеденить в одно


8-1077637570
dwUser
2004-02-24 18:46
2004.05.16
Как поменять частоту вертикальной развертки для DirectDraw?


14-1082973413
AGAMEMNUM
2004-04-26 13:56
2004.05.16
монополия на инет





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский