1 (edited by Bullet3203 2017-10-05 05:46:21)

Topic: Как реализовать фильтр в Комбобокс

Помогите реализовать фильтр в комбобокс!
Имеется таблица users с полями: (login, password, read, write, search, remove, administrator, director, zamdirector, rabotnik).
Login и Password (тип поля ТЕКСТ), остальные поля имеют тип (ДА/НЕТ).
Пользователи могут быть Директором, Зам. директора или Работниками.
Как реализовать фильтр в комбобоксе такого плана: если пользователь является директором то ему в комбобоксе показываются определенные пользователи, если работниками то другие.
Пробовал таким способом:

procedure Formzadanie_OnShow (Sender: string; Action: string);
begin
sUser := frmLogin.ComboBox1.Text; // remember username
if SQLExecute( 'SELECT director FROM users WHERE login='''+frmLogin.ComboBox1.Text+'''' ) = '1' then  Formzadanie.ComboBox1.dbFilter := '(id=19) and (id=20)';  
Formzadanie.ComboBox1.dbUpdate;
end;

Но после компиляции в комбобоксе вообще ничего нету!

Post's attachments

Attachment icon table.jpg 38.57 kb, 212 downloads since 2017-10-05 

Re: Как реализовать фильтр в Комбобокс

Ситуация схожа с вашей, только немного для других целей. Посмотрите, может натолкнёт не мысль

if frmApplication.CheckBox1.Checked then
   begin
   frmApplication.cdRepStatus.dbFilter := '(repairstatus = "Выдано/Оплачено") or (repairstatus = "Выдано/Ожидание оплаты") ';
   UpdateDatabase('repairstatus');
   end else
   begin
   frmApplication.cdRepStatus.dbFilter := '(repairstatus = "Принят") or (repairstatus = "В работе") or (repairstatus = "Ожидание ЗПЧ") or (repairstatus = "На согласовании") or (repairstatus = "Согласовано") or (repairstatus = "Готово") or (repairstatus = "Без ремонта") or (repairstatus = "Выдано/Ожидание оплаты") ';
   UpdateDatabase('repairstatus');
    end;

надо идти вперёд....

Re: Как реализовать фильтр в Комбобокс

kovalenko wrote:

Ситуация схожа с вашей, только немного для других целей. Посмотрите, может натолкнёт не мысль

if frmApplication.CheckBox1.Checked then
   begin
   frmApplication.cdRepStatus.dbFilter := '(repairstatus = "Выдано/Оплачено") or (repairstatus = "Выдано/Ожидание оплаты") ';
   UpdateDatabase('repairstatus');
   end else
   begin
   frmApplication.cdRepStatus.dbFilter := '(repairstatus = "Принят") or (repairstatus = "В работе") or (repairstatus = "Ожидание ЗПЧ") or (repairstatus = "На согласовании") or (repairstatus = "Согласовано") or (repairstatus = "Готово") or (repairstatus = "Без ремонта") or (repairstatus = "Выдано/Ожидание оплаты") ';
   UpdateDatabase('repairstatus');
    end;

Да, спасибо) Уже разобрался что проблема была из-за отсутствия двойных кавычек в условиях фильтра. Если прописать так, то все работает!

procedure Formzadanie_OnShow (Sender: string; Action: string);
begin
sUser := frmLogin.ComboBox1.Text; // remember username
if SQLExecute( 'SELECT director FROM users WHERE login='''+frmLogin.ComboBox1.Text+'''' ) = '1' then  Formzadanie.ComboBox1.dbFilter := '(id = "19") and (id = "20")';  
Formzadanie.ComboBox1.dbUpdate;
end;