Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Базы данных и репортинг > О множественной фильтрации в BDE


Автор: Johnny M 17.4.2005, 19:51
Привет всем.
Столкнулся с такой проблемой. Допустим, из БД нужно выбрать все значения (например, сортировать поле Year со значением года выпуска)

Table1.Filter:='Year = '+QuotedStr('2005');

в таблице после этого останутся только записи со значением 2005 в этом поле. Все прекрасно - НО -

1) Как же работать с многочисленным выбором - не только по одному полю? (например, нужна сортировка по полю "год выпуска" такой то, по полю "месяц" такой то, по полю "день" такой то, ну и т.д.

Справляется ли с данным типом фильтрации свойсво Filter или нет?


Спасибо заранее

Автор: Pakshin A. S. 17.4.2005, 21:11
Лично мне никогда не приходил в голову данный вопрос... я использую SQL... smile

Автор: offline 17.4.2005, 23:10
А "and" пробовал?

Автор: Johnny M 18.4.2005, 07:41
Цитата(kirilllius @ 17.4.2005, 23:10)
А "and" пробовал?

пробовал. Не помогает. Может, снтаксис неправильный был? smile

Нужна ведь сортировка по первому значению, потом - из получившегося списка - вторая сортировка, потом - из того что останется - третья и т. д.

Может, верно - только SQL поможет?

Автор: DimW 18.4.2005, 08:04
В качестве альтернативы могу предложить вариант когда пользователь сам определяет по какому полю отсортировать данные:

Код

procedure TForm1.DBGridTitleClick(Column: TColumn);
var
st_FieldName:string;
begin
st_FieldName:=Column.FieldName;
Query.Close;
Query.SQL.Clear;
Query.SQL.Add('select * from New_Tovar');
Query.SQL.Add('Order By '+#39+st_FieldName+#39);
Query.Open;
end;


При клике на нужную пользоателю колонку DBGrid, выполняется выборка данных и сортировка по имени колонки на которую кликнул пользователь. Конечно лучше формировать запрос статически и передовать сортируемое поле как параметр.

Query, DataSource, DBGrid.
Добавлено @ 08:13
По нескольким полям можно отсортировать так:

SELECT
год_выпуска
,месяц
,день
FROM TABLE NAME
ORDER BY год_выпуска, месяц, день

Опять таки SQL...

Автор: offline 18.4.2005, 15:36
Цитата
Нужна ведь сортировка по первому значению, потом - из получившегося списка - вторая сортировка, потом - из того что останется - третья и т. д.


Что-то я логики не вижу.

Ты хочешь
1.отсортировать по году
2. из получившегося набора отсортировать по месяцу
3. из получившегося набора отсортировать по дате

а не проще

сортировать по году и сортировать по месяцу и сортировать по дате

ведь результат наверное будет одинаковый

Код

  ADOTable1.DisableControls;
  ADOTable1.Filtered := False;
  ADOTable1.Filter := 'поле года = 2005 and поле месяца = 5 and поле дня = 1';
  ADOTable1.Filtered := True;
  ADOTable1.EnableControls;

Автор: Akella 19.4.2005, 08:46
Цитата(Johnny @ 17.4.2005, 19:51)
1) Как же работать с многочисленным выбором - не только по одному полю? (например, нужна сортировка по полю "год выпуска" такой то, по полю "месяц" такой то, по полю "день" такой то, ну и т.д.


Так тебе нужна фильтрация или сортировка? Это две разные вещи.
Пользуйся поиском по форуму:

http://forum.vingrad.ru/index.php?showtopic=31536&hl=фильтрация
http://forum.vingrad.ru/index.php?showtopic=38859&hl=фильтрация
http://forum.vingrad.ru/index.php?showtopic=37207&hl=фильтрация
http://forum.vingrad.ru/index.php?showtopic=40539&unread=1&hl=фильтрация
http://forum.vingrad.ru/index.php?showtopic=34426&hl=фильтрация
http://forum.vingrad.ru/index.php?showtopic=43822&unread=1&hl=фильтрация

По поводу AND:
http://forum.vingrad.ru/index.php?showtopic=33129&hl=фильтрация

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)