Главная страница
    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.47 MB
Время: 0.038 c
3-1082102461
Evgenija
2004-04-16 12:01
2004.05.16
добавление записи в базу


3-1082115450
nv_
2004-04-16 15:37
2004.05.16
А всё таки поиск в подстановочном поле...


4-1079608010
andri
2004-03-18 14:06
2004.05.16
Как запустить файл от имени другого пользователя (NT)


3-1082632889
Draught
2004-04-22 15:21
2004.05.16
как получить эти данные


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