Topic: Фильтр для ComboBox

Добрый день.
Не получается настроить фильтр ComboBox сов.
На одной форме ComboBox1 и ComboBox2
ComboBox1 = sch.id_PriznZam
ComboBox2 = sch.id_OrigKart.
Возможно ли реализовать следующее:
Если в ComboBox1 sch.id_PriznZam = 1, то в ComboBox2 мы видим только значение для sch.id_OrigKart = 5.
Если в ComboBox1 sch.id_PriznZam  > 1  то в ComboBox2 мы видим все значения, а именно sch.id_OrigKart <> 5.
Если на уровне настроек ComboBox это возможно, то хотелось бы увидеть как это делается.

Re: Фильтр для ComboBox

Попробуйте так

procedure Form1_ComboBox1_OnChange (Sender: TObject);
begin
    if Form1.ComboBox1.dbItemID = 1 then Form1.ComboBox2.dbFilter := 'id=5'
    else if Form1.ComboBox1.dbItemID > 1 then Form1.ComboBox2.dbFilter := 'id<>5';
    Form1.ComboBox2.dbUpdate;
end;
Dmitry.

Re: Фильтр для ComboBox

Спасибо работает.
Посмотрев на вашу процедуру, сразу нашел ошибку в своем скрипте.

4 (edited by Andrei 2020-06-05 07:44:43)

Re: Фильтр для ComboBox

Здравствуйте.
Как наложить фильтр на Combobox, что бы он показывал уникальные записи.
Ключи ComboBoxa
ForeignKey: sprav_zapr.id_Zapros
FieldName: vhod_numer
В таблице есть 10 записей с vhod_numer = '100'
Если просто использовать данный ComBobox, то он в ComBoboxе будет показывать 10 записей со значением '100'.
Нужно, чтоб Combobox показал 1 запись со значением '100' и при выборе данной записи в TableGrid вывелось 10 строк.
Если с Combobox этого не может, то как можно это реализовать?

Re: Фильтр для ComboBox

Combobox сохраняет запись во внешнем ключе.
Поэтому если вы сгруппируете однотипные по определённому полю записи то во внешний ключ ничего не запишется.
Поэтому, как научили меня на форуме говорить, нужно слепить костыль)))))

procedure Form1_ComboBox1_OnDropDown (Sender: TObject);
begin
Form1.ComboBox1.dbSQLExecute ('SELECT vhod_numer FROM Zapros GROUP BY vhod_numer ');
end;

Создаёте компонент Edit1 который и будет участвовать в поиске.

procedure Form1_ComboBox1_OnCloseUp (Sender: TObject);
begin
Form1.Edit1.Text := Form1.ComboBox1.Text;
end;

Re: Фильтр для ComboBox

Petr
Огромное спасибо.
Это реальный костыль, который работает.
с процедурой OnChange. Рабочий код:

procedure Form_Zapr_ComboBox1_Change(Sender: TObject);
   begin
        Form_Zapr.Edit1.Text := Form_Zapr.ComboBox1.Text;
 end;
procedure Form_Zapr_ComboBox1_OnDropDown (Sender: TObject);
   begin
        Form_Zapr.ComboBox1.dbSQLExecute ('SELECT vhod_numer FROM Zapros GROUP BY vhod_numer ');
 end;
procedure Form_Zapr_Button1_OnClick (Sender: TObject; var Cancel: boolean);
    begin
          Form_Zapr.Button1.dbSQL :=   'select distinct a.id, b.Kod, c.inn, c.name, a.vhod_numer, a.vhod_data, d.name '+
                                'from zapros a '+
                                'join departament b on a.id_departament=b.id '+
                                'join plat c on a.id_plat=c.id '+
                                'join org_zap d on a.id_org_zap=d.id '+
                                'where (a.vhod_numer = {edit1})';

 end;

7 (edited by Inkalika 2020-07-18 15:02:21)

Re: Фильтр для ComboBox

Скажите, а какой функцией можно при открытии формы подставить в комбобокс значение по умолчанию?
У меня есть форма, на которой комбобокс. В нем я выбираю один из параметров другой связанной таблицы (Например, Сотрудник, а в комбике я отображаю лишь фамилию).
Пробовал Form1.ComboBox1.dbSQLExecute ('SELECT fieldname, id FROM tablename'); но такой запрос лишь позволяет выбрать в комбике нужный мне вариант, а не сразу сделать за меня выбор, который мне интересен.
Form1.ComboBox1.ItemIndex:=SQLexecute('SELECT 1 FROM tablename'); работает, когда таблица tablename состоит лишь из одного параметра, а если их несколько как у меня Фамилия, Должность и тд, то уже не работает

В примере на главной форме хотел бы показать по умолчанию первую запись. В идеале, где чекбокс=1

Post's attachments

Attachment icon Тест.rar 292.84 kb, 257 downloads since 2020-07-18 

Re: Фильтр для ComboBox

procedure Form2_OnShow (Sender: TObject; Action: string);
begin
  Form2.ComboBox1.ItemIndex:=0;
end;

так - как Вы отключили пустое поле, то первое значение будет 0

Re: Фильтр для ComboBox

sibprogsistem wrote:
procedure Form2_OnShow (Sender: TObject; Action: string);
begin
  Form2.ComboBox1.ItemIndex:=0;
end;

так - как Вы отключили пустое поле, то первое значение будет 0

Спасибо! Действительно так проще, а то я пытался создать этот индекс SQL запросом и не получалось никак.