![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Неправильно работает фильтр! [D7, DBISAM]
DimDim © (2006-01-12 14:13:00)Уважаемые Мастера, первый раз такое вижу и 2-й день не могу разобраться:
Пишу:
if Table1.Filtered=True then Table1.Filtered:=False;
Table1.Filter:='NumGrup=3';
Table1.Filtered:=True;
Поле NumGrup : Integer;
При этом фильтрация выполняется совсем по другому полю, а именно по полю AUTO : AutoInc.
Т.е. в результате всегда только одна запись с соответствующим номером в AUTO.
Это что такое и как с этим бороться?
DimDim (2006-01-12 23:00:00) [21]> Это обман зрения.
> Фильтруем обну таблицу, а смотрим в другую
Я, конечно, хорошо отметил Новый год и Рождество, но не до такой же степени...
Для неверующих:
Сделал отдельный проект.
Выложил на форму DBISAMTable, DataSource, Грид, Едит и кнопку.
(из DBISAMTable удалил Lookup и Calculated поля, а остальное полностью едентично).
В onActivate:
TableM_Rep.Open;
В onClick кнопки:
TableM_Rep.Filter:='NumGrup=4';
TableM_Rep.Filtered:=True;
Edit1.Text:=TableM_Rep.Filter;
Та же хрень!
Это все с исходниками здесь: http://www.Belstroyka.narod.ru\Test\TestM_Rep.zip(должны быть установлены движки DBISAM v4.0).
EXE работает без движков.
Reindeer Moss Eater (2006-01-12 17:15:00) [22]Reindeer Moss Eater © (12.01.06 14:30) [3]
Это что такое и как с этим бороться?
Это обман зрения.
Фильтруем обну таблицу, а смотрим в другую
evvcom (2006-01-12 16:57:00) [23]ты в design-time пробовал такое же? Попробуй. Оставь run-time пока, может в рантайме у тебя еще где-то фильтр меняется.
Johnmen (2006-01-12 16:03:00) [24]>Вообще, в наборе данных и в Table порядок полей отличается. Может поэтому???
Нет.
>В отфильтрованной строке поле NumGrup=1
>Чудес не произошло.
Чудес произошел! :)
А какие там у тебя поля в НД? И какой компонент "владелец" НД?
DimonS (2006-01-12 16:01:00) [25]
> Вообще, в наборе данных и в Table порядок полей отличается.
> Может поэтому???
В смысле, отображается не то, что в TTable? или как? И как отображается НД?
DimDim (2006-01-12 15:51:00) [26]> Edit1.Text:=Table1.Filter;
> И проверь, какое поле у тебя фильтруется. Вот и все!
Сделал. Чудес не произошло. в Едите NumGrup=3.
В отфильтрованной строке поле NumGrup=1, поле AUTO=3 (ну, или то число, которое указано в фильтре).
Вообще, в наборе данных и в Table порядок полей отличается. Может поэтому???
Johnmen (2006-01-12 15:26:00) [27]>удивляюсь - осталась только одна запись с этим номером!
Отсюда вывод - в НД только одна запись удовлетворяет выражению фильтра.
DimonS (2006-01-12 15:21:00) [28]То DimDim ©
Для проверки сделай так.
Брось на форму тот же Edit1.
далее:
если писать по-твоему, то:
if Table1.Filtered=True then Table1.Filtered:=False;
Table1.Filter:='NumGrup=3';
Table1.Filtered:=True;
Edit1.Text:=Table1.Filter;
И проверь, какое поле у тебя фильтруется. Вот и все!
DimDim (2006-01-12 15:15:00) [29]Дык, без первой строки та же хрень!
Специально, для наглядности, временно приклеил на форму Грид и кнопку с указанным кодом. Запускаю программу - в Гриде вся таблица. Нажимаю на кнопку и уже раз 58-й удивляюсь - осталась только одна запись с этим номером! (Первую строку убрал).
DimonS (2006-01-12 14:34:00) [30]То evvcom ©
Согласен. Незачем делать Table1.Filtered:=False;
Фильтр и без этого неплохо работает.
Reindeer Moss Eater (2006-01-12 14:30:00) [31]Это что такое и как с этим бороться?
Это обман зрения.
Фильтруем обну таблицу, а смотрим в другую
evvcom (2006-01-12 14:25:00) [32]
> if Table1.Filtered=True then
:)
Зачем булево выражение сравнивать с булевой константой? Достаточно просто
if Table1.Filtered then
Но в данном случае (в [0]) этот if вообще не нужен.
> Это что такое и как с этим бороться?
Видимо, искать ошибку где-то в другом месте.
DimonS (2006-01-12 14:24:00) [33]then Table1.Filtered:=False;
По-моему, тута собака и зарыта. Сам так нарывался. Сделай
then Table1.Filtered:=true; тогда и попробуй.