Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Неправильно работает фильтр! [D7, DBISAM]


Страницы:   1 2

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; тогда и попробуй.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо