![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Немогу установить фильтр на датасет [D6, IB6.x]
Alex_x © (2003-06-25 11:25:00)Датасет состоит из полей одно из них "tovarID" по которому я хочу фильтровать. согласно хелпу должно виглядеть так:
IBDataSet1.Filtered:=false;
IBDataSet1.Filter:= "tovarID = 20";
IBDataSet1.Filtered:=true;
но не работает :(
Johnmen (2003-06-25 14:14:00) [1]>Izyum © (25.06.03 14:01)
Вполне применимо. И полный перебор не делается, а только необходимого для приложения количества. Кривизны не замечено...
Zacho (2003-06-25 14:08:00) [2]
> Izyum © (25.06.03 14:01)
Во многих ситуациях - очень даже правильно. Например, при построении отчетов.
Izyum (2003-06-25 14:01:00) [3]Воще-то, есл иречь идет об Интербейсе использовать OnFilterRecord - не совсем правильно. Этим методом фильтрация производится путем полного перебора всех записей и поиска совпадений с условием - это очень медленно и иногда криво. Для Интербейса (да и воще для SQL-серверов) оптимальным является формирования Дата-сета с помощью TIBQuery (select * from name_table where id=20)
Zacho (2003-06-25 12:21:00) [4]
> Alex_x © (25.06.03 12:14)
Не обращай внимания на RecordCount.
Просто пройдись в цикле типа
DataSet.First;
while not DataSet.Eof do
begin
....
DataSet.Next;
end;
и получишь только отфильтрованные записи.
Да, на всякий случай предупреждаю: не стоит использовать фильтр при CachedUpdates:=true - по крайней мере в моей версии IBX есть весьма неприятный баг, вылезающий при этом.
Соловьев (2003-06-25 12:19:00) [5]
> забрать" отфильтрование записи например в масив
как и всегда
While not Eof do
begin
...
Next;
end;
Alex_x (2003-06-25 12:14:00) [6]Спасибо получилось
но есть вопрос. Я хотел фильтровать ДатаСет и потом делать цикл по "отфильтрованим" записям. Но количество записей в датасете показывае прежнее, тоесть я так понимаю фильтр используется только для отображения, а как "забрать" отфильтрование записи например в масив
Zacho (2003-06-25 11:38:00) [7]
> Alex_x © (25.06.03 11:35)
Писать обработчик OnFilterRecord.
Примерно так:
Accept:=DataSet.FieldByName("tovarID").AsInteger=20;
Alex_x (2003-06-25 11:35:00) [8]Ну а что делать?
как фильтровать датасет правильно?
Zacho (2003-06-25 11:29:00) [9]
> Alex_x © (25.06.03 11:25)
Если имеется в виду TIBDataSet, то св-во Filter в нем не работало, не работает, и уверен, что работать никогда не будет. :-)
См. Наталия © (25.06.03 11:26)
Наталия (2003-06-25 11:26:00) [10]OnFilterRecord пробовал?