Форум: "Базы";
Текущий архив: 2006.03.12;
Скачать: [xml.tar.bz2];
ВнизНеправильно работает фильтр! Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.54 MB
Время: 0.013 c