powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Формирование строки фильтра
5 сообщений из 5, страница 1 из 1
Формирование строки фильтра
    #39825809
Sashaua
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для формирования строки фильтра использую такой велосипед.
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
const
  Condition = '%s = ''%s''';
begin
 Filter := '';
 for i := 0 to ComponentCount - 1 do begin
 if Components[i] is TCombobox then
   begin
    EditControl := TCombobox(Components[i]);
    if EditControl.Text = '' then Continue;
    if Filter = ''
    then Filter := Format(Condition, [EditControl.Name, IntToStr(integer(EditControl.Items.Objects[EditControl.ItemIndex]))])
    else Filter := Filter + ' and ' + Format(Condition, [EditControl.Name, IntToStr(integer(EditControl.Items.Objects[EditControl.ItemIndex]))]);
   end;
 end;


Нюанс в том что компоненты необходимо называть аналогично полям в выборке, не очень утобно для читаемоски в коде.
Можно придумать ненапряжное в реализации что-то типа словаря название компонента= поле в выборке.?
...
Рейтинг: 0 / 0
Формирование строки фильтра
    #39825817
ёёёёё
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sashaua,

да, конечно можно. Делай.
...
Рейтинг: 0 / 0
Формирование строки фильтра
    #39825828
asviridenkov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ёёёёё,

За всех то не отвечай
...
Рейтинг: 0 / 0
Формирование строки фильтра
    #39825867
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashauaНюанс в том что компоненты необходимо называть аналогично полям в выборке, не очень утобно для читаемоски в коде.
Называй компоненты с префиксом, так гораздо удобнее.
Если поле называется Comment я называю компонент cxComment
А если такой уже вдруг есть на форме (например в другом датасете), то просто меняю приставку на axComment, bxCommet, dxComment
...
Рейтинг: 0 / 0
Формирование строки фильтра
    #39826167
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sashaua,

По идее, у всех компонентов есть привязанный к ним Label. Тогда все просто. В дизайнтайме заносишь в Label название поля. При старте программы пробегаешься по всем Label
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
 for i := 0 to ComponentCount - 1 do begin
 if Components[i] is TLabel then
   begin
    LabelControl := TCombobox(Components[i]);
    if (LabelControl.Tag = 1) and (LabelControl.FocusControl is TComboBox) then begin
      FilterList.Add(TPair.Create(TCombobox(LabelControl.FocusControl), LabelControl.Caption));
      LabelControl.Caption := LoadCaption(LabelControl.Caption);
    end;
   end;


И сама фильтрация
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
const
  Condition = '%s = %d';
begin
 Filter := '';
 for i := 0 to FilterList.Count - 1 do begin
    EditControl := FilterList[i].Key;
    if EditControl.Text = '' then Continue;
    if Filter <> '' then
      Filter := Filter + ' and ';
    Filter := Filter + Format(Condition, [FilterList[i].Value, Integer(EditControl.Items.Objects[EditControl.ItemIndex])]);
   end;
 end;
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Формирование строки фильтра
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]