![]() |
| ||
|
|
Новости |
Поиск |
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.
Это что такое и как с этим бороться?
аматор (2006-01-23 22:12:00) [1]http://sergamateur.narod.ru/Arh.rar- это не есть решением проблемы, но вариант (нажимаем кнопку 1 раз :) и фильт работает и индексы есть, кажись), а про фильтр посмотрите, плиз, в помощи (зачем её пишут) там я, мельком, о фильтре читал (много интересного увидел). Только я не понял: при простой перестройке индексов как мона повлиять на данные таблицы? Конечно, если структуру таблицы менять, и то не очень, тем более если база есть и работает можна работать с индексами без ущерба таблице (и не трогая структуру таблицы).
аматор (2006-01-23 20:19:00) [2]ирокез мелочь, меня и кротом и синичкой звали (прикольно), может ещё чё придумают :).
"чо поле имеет свой индекс (secondary ) и до включения фильтра этот индекс станет" в таблице я этого, кажись, не заметил (может плохо смотрел), иль оно там спряталось :).
[31] - похоже там именно так (уверености нет, может компонент такой (но факт остался - выбирается тока первая запись), попробую подобное у себя (интересно очень).
[30] - первичное поле краше делать авто... (ну это дело разработчика). А для Вашего варианта наверное, если нужен такой сложный индекс (как у Вас первичный (3 поля для меня многовато будет и тем более с повторением значений (б.. формулировку забыл), (может я книжки не те читал)) может его сделать обычным индексом, а первичным сделать авто. поле.
А компонент прикольный, тока бабки надо.......
atruhin (2006-01-23 14:22:00) [3]>>а фильтр можно поставит на любом поле ( на первичном тоже ) но при >>условии чо поле имеет свой индекс
Это с каких же пор? Индекс стал иметь отношение к фильтру?
DimDim (2006-01-23 11:53:00) [4]Дык, уже переделал структуру (а что делать!), а заодно и переписал примерно 28 страниц кода.
Согласен, что структура таблицы дурная (была). Все из-за того что программа существует уже 6 лет и постоянно (практически, каждую неделю) дорабатывается, меняется и т.д. Предусмотреть сразу все как должно быть - нереально. Я, пока, даром предсказания не обладаю. А выполнять нормальные корректировки баз - проблематично, т.к. программа работает примерно в 300 организациях и обслуживается через дилерскую сеть. Программно корректировки не всегда удается выполнить, да и опасно - иногда данные "улетают" (тогда столько интересного осебе узнаешь!). Лучше ручками. Поэтому, базы стараюсь без острой необходимости не изменять.
zwsoft (2006-01-23 11:50:00) [5]уникальное поле - да все значения уникальны ( не могут повторятса ) и только такое поле может стать первичным клюуем таблицы
а фильтр можно поставит на любом поле ( на первичном тоже ) но при условии чо поле имеет свой индекс (secondary ) и до включения фильтра этот индекс станет текщим для таблицы ( Paradox )
с ирокезом я конечно пошутил, извиняюь...
аматор (2006-01-23 09:15:00) [6]zwsoft - :) , а при чём тут индейцы, я что не прав? Если да то поясните плиз как можно создавать уникальное поле (при этом значение поля повторяется, я считаю, что NumGrup никак не может быть уникальным (Primary)) . Выкинте NumGrup из Primary и фильтр будет работать. И я настаиваю, пересмотрите структуру таблицы. Да насчёт книжек: в одной умной книге сказано Primary-уникальное и первое поле, далее идут индексный поля, потом обычные. К сожаленью в таблице этого я не увидел. Я опять извиняюсь за возможную грубость. zwsoft-насчет ирокеза Вам какой: большой, маленький, цветной...
zwsoft (2006-01-23 00:35:00) [7]это конечно шутка, так что не обижайся...
zwsoft (2006-01-22 23:41:00) [8]аматор, а ирокеза на башке у тебя нет случяйно?
ты менше травку кури, а читай книжек больше
аматор (2006-01-22 23:15:00) [9]Привет...
Я, наверное, профан но почему ругать компонент: скачал, посмотрел, офиге...(это базу). Ничего себе структура таблицы (особено индексы :)). Зачем их сколько я в ужасе (не я понимаю быстрее поиск и т.д. и т.п.) но если есть возможность работы с запросами конечно индексы нужны, но основной индекс который, по идее, должен быть в единственном экземпляре - это кажись, уникальное поле, ну эт, наверное не три поля, хотя давайте запихнем десять или двадцать и может глюки вообще исчезнут. Хотя правильно: давайте будем ругать компоненты (там их всего десятка два програмеров делали и без понятия чёт писали). Между прочим, с оочень большим понятием: их dbsys.exe мне сподобался: удобен и лишнего нет. А вывод из всей моей ахинеи: пересмотри структуру таблицы (особено уникальное поле). Ссори если не много грубовато (я этот dbisam качал долго оф..... мона, а структуру увидел оф.. полностью). Может я не прав.
zwsoft (2006-01-22 21:08:00) [10]Поле 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;
SilverAlex (2006-01-22 13:12:00) [11]есть обработчик события TDataSet.OnFilterRecord посоветую пользоваться ним. Тот же фильтр, но надежней и гибче. Со свойством Filter не раз наблюдал галюны. А если датасет нестандартный, то тем более актуально.
Рустем (2006-01-19 16:52:00) [12]
> После удаления Primary индекса фильтр стал работать как
> надо
Иногда переиндексация помогает... :)
DimonS (2006-01-19 15:30:00) [13]
> DimonS © (13.01.06 14:37) [19]
> То DimDim ©
> Скинь, плз, мне на мыло свою БД, если небольшая.
> Просто самому стало интересно, как это у тебя происходит!
>
>
> А вообще, попробуй сделать, как тебе сказали в [18]. Это
> уже точно покажет ошибку (или не ошибку).
мне интересно!!! :)
Скинь БД, плз!
DimDim (2006-01-18 11:51:00) [14]После удаления Primary индекса фильтр стал работать как надо. Но для того, чтобы его удалить пришлось удалять все остальные индексы, иначе данные в таблице исчезали (т.е. записи оставалить, а в них - пустота)!
Никого так сильно не удивляет работа программы как ее разработчика!
DimonS (2006-01-13 14:37:00) [15]То DimDim ©
Скинь, плз, мне на мыло свою БД, если небольшая.
Просто самому стало интересно, как это у тебя происходит!
А вообще, попробуй сделать, как тебе сказали в [18]. Это уже точно покажет ошибку (или не ошибку).
asafr (2006-01-13 13:38:00) [16]Попробуй ка этоже самое, но с TQuery... :)
select * from Table
where NumGrup=3
DimDim (2006-01-13 10:26:00) [17]А может, заодно, и комп поменять???
DimonS (2006-01-13 06:38:00) [18]Format C: /s
Далее Install Delphi
:)
DimDim (2006-01-12 23:31:00) [19]ой, извините, WWW. - не надо.
http://Belstroyka.narod.ru\Test\TestM_Rep.zip
http://Belstroyka.narod.ru\Test\TestM_Rep.rar
DimDim (2006-01-12 23:27:00) [20]Исходники еще здесь: http://www.Belstroyka.narod.ru\Test\TestM_Rep.rar(если zip не читается)