Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.03.12;
Скачать: CL | DM;

Вниз

Неправильно работает фильтр!   Найти похожие ветки 

 
DimDim ©   (2006-01-12 14:13) [0]

Уважаемые Мастера, первый раз такое вижу и 2-й день не могу разобраться:

Пишу:
if Table1.Filtered=True then Table1.Filtered:=False;
Table1.Filter:="NumGrup=3";
Table1.Filtered:=True;


Поле NumGrup : Integer;
При этом фильтрация выполняется совсем по другому полю, а именно по полю AUTO : AutoInc.
Т.е. в результате всегда только одна запись с соответствующим номером в AUTO.

Это что такое и как с этим бороться?


 
DimonS ©   (2006-01-12 14:24) [1]

then Table1.Filtered:=False;

По-моему, тута собака и зарыта. Сам так нарывался. Сделай
then Table1.Filtered:=true; тогда и попробуй.


 
evvcom ©   (2006-01-12 14:25) [2]


> if Table1.Filtered=True then

:)
Зачем булево выражение сравнивать с булевой константой? Достаточно просто
if Table1.Filtered then
Но в данном случае (в [0]) этот if вообще не нужен.

> Это что такое и как с этим бороться?

Видимо, искать ошибку где-то в другом месте.


 
Reindeer Moss Eater ©   (2006-01-12 14:30) [3]

Это что такое и как с этим бороться?

Это обман зрения.
Фильтруем обну таблицу, а смотрим в другую


 
DimonS ©   (2006-01-12 14:34) [4]

То evvcom ©  
Согласен. Незачем делать Table1.Filtered:=False;
Фильтр и без этого неплохо работает.


 
DimDim ©   (2006-01-12 15:15) [5]

Дык, без первой строки та же хрень!
Специально, для наглядности, временно приклеил на форму Грид и кнопку с указанным кодом. Запускаю программу - в Гриде вся таблица. Нажимаю на кнопку и уже раз 58-й удивляюсь - осталась только одна запись с этим номером! (Первую строку убрал).


 
DimonS ©   (2006-01-12 15:21) [6]

То DimDim ©  

Для проверки сделай так.
Брось на форму тот же Edit1.
далее:
если писать по-твоему, то:

if Table1.Filtered=True then Table1.Filtered:=False;
Table1.Filter:="NumGrup=3";
Table1.Filtered:=True;

Edit1.Text:=Table1.Filter;

И проверь, какое поле у тебя фильтруется. Вот и все!


 
Johnmen ©   (2006-01-12 15:26) [7]

>удивляюсь - осталась только одна запись с этим номером!

Отсюда вывод - в НД только одна запись удовлетворяет выражению фильтра.


 
DimDim ©   (2006-01-12 15:51) [8]

> Edit1.Text:=Table1.Filter;
> И проверь, какое поле у тебя фильтруется. Вот и все!


Сделал. Чудес не произошло. в Едите NumGrup=3.
В отфильтрованной строке поле NumGrup=1, поле AUTO=3 (ну, или то число, которое указано в фильтре).
Вообще, в наборе данных и в Table порядок полей отличается. Может поэтому???


 
DimonS ©   (2006-01-12 16:01) [9]


> Вообще, в наборе данных и в Table порядок полей отличается.
>  Может поэтому???


В смысле, отображается не то, что в TTable? или как? И как отображается НД?


 
Johnmen ©   (2006-01-12 16:03) [10]

>Вообще, в наборе данных и в Table порядок полей отличается. Может поэтому???

Нет.

>В отфильтрованной строке поле NumGrup=1
>Чудес не произошло.

Чудес произошел! :)

А какие там у тебя поля в НД? И какой компонент "владелец" НД?


 
evvcom ©   (2006-01-12 16:57) [11]

ты в design-time пробовал такое же? Попробуй. Оставь run-time пока, может в рантайме у тебя еще где-то фильтр меняется.


 
Reindeer Moss Eater ©   (2006-01-12 17:15) [12]

Reindeer Moss Eater ©   (12.01.06 14:30) [3]
Это что такое и как с этим бороться?

Это обман зрения.
Фильтруем обну таблицу, а смотрим в другую


 
DimDim ©   (2006-01-12 23:00) [13]

> Это обман зрения.
> Фильтруем обну таблицу, а смотрим в другую


Я, конечно, хорошо отметил Новый год и Рождество, но не до такой же степени...

Для неверующих:
Сделал отдельный проект.
Выложил на форму 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 работает без движков.


 
DimDim ©   (2006-01-12 23:27) [14]

Исходники еще здесь: http://www.Belstroyka.narod.ru\Test\TestM_Rep.rar (если zip не читается)


 
DimDim ©   (2006-01-12 23:31) [15]

ой, извините, WWW. - не надо.
http://Belstroyka.narod.ru\Test\TestM_Rep.zip
http://Belstroyka.narod.ru\Test\TestM_Rep.rar


 
DimonS ©   (2006-01-13 06:38) [16]

Format C: /s
Далее Install Delphi
:)


 
DimDim ©   (2006-01-13 10:26) [17]

А может, заодно, и комп поменять???


 
asafr ©   (2006-01-13 13:38) [18]

Попробуй ка этоже самое, но с TQuery... :)
select * from Table
where NumGrup=3


 
DimonS ©   (2006-01-13 14:37) [19]

То DimDim ©  
Скинь, плз, мне на мыло свою БД, если небольшая.
Просто самому стало интересно, как это у тебя происходит!

А вообще, попробуй сделать, как тебе сказали в [18]. Это уже точно покажет ошибку (или не ошибку).


 
DimDim ©   (2006-01-18 11:51) [20]

После удаления Primary индекса фильтр стал работать как надо. Но для того, чтобы его удалить пришлось удалять все остальные индексы, иначе данные в таблице исчезали (т.е. записи оставалить, а в них - пустота)!

Никого так сильно не удивляет работа программы как ее разработчика!


 
DimonS ©   (2006-01-19 15:30) [21]


> DimonS ©   (13.01.06 14:37) [19]
> То DimDim ©  
> Скинь, плз, мне на мыло свою БД, если небольшая.
> Просто самому стало интересно, как это у тебя происходит!
>
>
> А вообще, попробуй сделать, как тебе сказали в [18]. Это
> уже точно покажет ошибку (или не ошибку).


мне интересно!!! :)
Скинь БД, плз!


 
Рустем ©   (2006-01-19 16:52) [22]


> После удаления Primary индекса фильтр стал работать как
> надо

Иногда переиндексация помогает... :)


 
SilverAlex ©   (2006-01-22 13:12) [23]

есть обработчик события TDataSet.OnFilterRecord посоветую пользоваться ним. Тот же фильтр, но надежней и гибче. Со свойством Filter не раз наблюдал галюны. А если датасет нестандартный, то тем более актуально.


 
zwsoft ©   (2006-01-22 21:08) [24]

Поле NumGrup должно иметь индекс

Table1.Close;
Table1.Filtered := true;
Table1.IndexName := "idx_NumGrup";
Table1.Open;

используй
OnFilterRecord event  в  Table1  в Object Inspector

procedure TForm1.Table1FilterRecord(DataSet: TDataSet;
 var Accept: Boolean);
begin
Accept := DataSet["NumGrup"] = 3 ;
end;


 
аматор ©   (2006-01-22 23:15) [25]

Привет...
Я, наверное, профан но почему ругать компонент: скачал, посмотрел, офиге...(это базу). Ничего себе структура таблицы (особено индексы :)). Зачем их сколько я в ужасе (не я понимаю быстрее поиск и т.д. и т.п.) но если есть возможность работы с запросами конечно индексы нужны, но основной индекс который, по идее, должен быть в единственном экземпляре - это кажись, уникальное поле, ну эт, наверное не три поля, хотя давайте запихнем десять или двадцать и может глюки вообще исчезнут. Хотя правильно: давайте будем ругать компоненты (там их всего десятка два програмеров делали и без понятия чёт писали). Между прочим, с оочень большим понятием: их dbsys.exe мне сподобался: удобен и лишнего нет. А вывод из всей моей ахинеи: пересмотри структуру таблицы (особено уникальное поле). Ссори если не много грубовато (я этот dbisam качал долго оф..... мона, а структуру увидел оф.. полностью). Может я не прав.


 
zwsoft ©   (2006-01-22 23:41) [26]

аматор, а ирокеза на башке у тебя нет случяйно?
ты менше травку кури, а читай книжек больше


 
zwsoft ©   (2006-01-23 00:35) [27]

это конечно шутка, так что не обижайся...


 
аматор ©   (2006-01-23 09:15) [28]

zwsoft - :) , а при чём тут индейцы, я что не прав? Если да то поясните плиз как можно создавать уникальное поле (при этом значение поля повторяется, я считаю, что NumGrup никак не может быть уникальным (Primary)) . Выкинте NumGrup из Primary и фильтр будет работать. И я настаиваю, пересмотрите структуру таблицы. Да насчёт книжек: в одной умной книге сказано Primary-уникальное и первое поле, далее идут индексный поля, потом обычные. К сожаленью в таблице этого я не увидел. Я опять извиняюсь за возможную грубость. zwsoft-насчет ирокеза Вам какой: большой, маленький, цветной...


 
zwsoft ©   (2006-01-23 11:50) [29]

уникальное поле - да все значения уникальны ( не могут повторятса ) и только такое поле может стать первичным клюуем таблицы
а фильтр можно поставит на любом поле ( на первичном тоже ) но при условии чо поле имеет свой индекс (secondary ) и до включения фильтра этот индекс станет текщим для таблицы ( Paradox )
с ирокезом я конечно пошутил, извиняюь...


 
DimDim ©   (2006-01-23 11:53) [30]

Дык, уже переделал структуру (а что делать!), а заодно и переписал примерно 28 страниц кода.
Согласен, что структура таблицы дурная (была). Все из-за того что программа существует уже 6 лет и постоянно (практически, каждую неделю) дорабатывается, меняется и т.д. Предусмотреть сразу все как должно быть - нереально. Я, пока, даром предсказания не обладаю. А выполнять нормальные корректировки баз - проблематично, т.к. программа работает примерно в 300 организациях и обслуживается через дилерскую сеть. Программно корректировки не всегда удается выполнить, да и опасно - иногда данные "улетают" (тогда столько интересного осебе узнаешь!). Лучше ручками. Поэтому, базы стараюсь без острой необходимости не изменять.


 
atruhin ©   (2006-01-23 14:22) [31]

>>а фильтр можно поставит на любом поле ( на первичном тоже ) но при >>условии чо поле имеет свой индекс
Это с каких же пор? Индекс стал иметь отношение к фильтру?


 
аматор ©   (2006-01-23 20:19) [32]

ирокез мелочь, меня и кротом и синичкой звали (прикольно), может ещё чё придумают :).
"чо поле имеет свой индекс (secondary ) и до включения фильтра этот индекс станет" в таблице я этого, кажись, не заметил (может плохо смотрел), иль оно там спряталось :).
[31] - похоже там именно так (уверености нет, может компонент такой (но факт остался - выбирается тока первая запись), попробую подобное у себя (интересно очень).
[30] - первичное поле краше делать авто... (ну это дело разработчика). А для Вашего варианта наверное, если нужен такой сложный индекс (как у Вас первичный (3 поля для меня многовато будет и тем более с повторением значений (б.. формулировку забыл), (может я книжки не те читал)) может его сделать обычным индексом, а первичным сделать авто. поле.

А компонент прикольный, тока бабки надо.......


 
аматор ©   (2006-01-23 22:12) [33]

http://sergamateur.narod.ru/Arh.rar - это не есть решением проблемы, но вариант (нажимаем кнопку 1 раз :) и фильт работает и индексы есть, кажись), а про фильтр посмотрите, плиз, в помощи (зачем её пишут) там я, мельком, о фильтре читал (много интересного увидел). Только я не понял: при простой перестройке индексов как мона повлиять на данные таблицы? Конечно, если структуру таблицы менять, и то не очень, тем более если база есть и работает можна работать с индексами без ущерба таблице (и не трогая структуру таблицы).



Страницы: 1 вся ветка

Текущий архив: 2006.03.12;
Скачать: CL | DM;

Наверх




Память: 0.56 MB
Время: 0.055 c
8-1128691370
sco
2005-10-07 17:22
2006.03.12
Manifest


2-1140589417
Bratskiy
2006-02-22 09:23
2006.03.12
Почему не выводится текст?


2-1140462150
laxmatiy
2006-02-20 22:02
2006.03.12
Dial-Up (компонент ras.dcu)


2-1140527296
Mahab
2006-02-21 16:08
2006.03.12
JPEG


2-1140621520
mihauzen
2006-02-22 18:18
2006.03.12
Чем/как реализовать "многооконность" в одном приложении?