1 (edited by savage 2014-10-10 03:44:29)

Topic: [Решено] Combobox - вывести только определенные записи

День добрый.

Вопрос:
как сделать так, чтобы ограничить список комбобокса только теми записями, которые мне нужны?
1.  есть комбо, в котором по умолчанию есть все юзеры (5 человек -  5 logins в таблице users)
2. при выполнении определенного условия (вход под определенным пользователем) необходимо, чтобы в комбобокс выводились строго определенные мной записи (указываю явным способом).
Это важно для разграничения прав доступа: залогинился под admin - имеешь право просматривать записи по всем юзерам, под sale - под юзерами sale, spec1, spec2 и так далее...

Re: [Решено] Combobox - вывести только определенные записи

Думаю можно так:


     Form1.ComboBox1.dbFilter := 'id_usertype = 3';
     UpdateDatabase('users');

при условии, что в таблице пользователей, есть например поле id_usertype, которое определяет тип пользователя


либо можно так

     Form1.ComboBox1.dbFilter := '(username = "sale") or (username = "spec1") '; // в списке комбо будут только перечисленные имена пользователей, остальные будут скрыты
     UpdateDatabase('users');
Dmitry.

3 (edited by savage 2014-10-08 20:42:49)

Re: [Решено] Combobox - вывести только определенные записи

DriveSoft, а как програмным способом убрать пустое поле в combobox? Только необходимо именно программным

Re: [Решено] Combobox - вывести только определенные записи

к сожалению никак, а зачем?

Dmitry.

Re: [Решено] Combobox - вывести только определенные записи

Хотя ошибаюсь, можно

Form1.ComboBox1.Items.Delete(0);
Dmitry.

Re: [Решено] Combobox - вывести только определенные записи

DriveSoft, к сожалению, не сработало. Как показывало, так и показывает нулевое поле

PS Нужно это только для одного - не допустить просмотра юзерами чужих записей. У меня, просто, некоторые юзеры должны иметь возможность видеть, кроме своих задач,  задачи своих подчиненных...

Re: [Решено] Combobox - вывести только определенные записи

Уфф, понял, где косяк закрался.
Код д.б. таким:

 begin
      Form1.ComboBox11.dbFilter := '(login = "brand-manager home") or (login = "brand-manager help") '; // в списке комбо будут только перечисленные имена пользователей, остальные будут скрыты
      Form1.ComboBox21.dbFilter := '(login = "brand-manager home") or (login = "brand-manager help") ';
      UpdateDatabase('users');
      Form1.ComboBox11.Items.Delete(0);
      Form1.ComboBox21.Items.Delete(0);
      Form1.ComboBox11.dbItemID :=2;
      Form1.ComboBox21.dbItemID :=2;

     end;

А я, не подумав, ставил UpdateDatabase('users'); в конец...
Спасибо, за помощь, DriveSoft

8 (edited by savage 2014-10-09 05:07:13)

Re: [Решено] Combobox - вывести только определенные записи

Рано радовался...
У меня к этому комбобоксу привязан "поиск" в гриде.
При удалении 0 строки в комбобоксе "летит" фильтр, т.к. ,имхо, он привязан к старым номерам строк, т.е.

Form1.ComboBox11.dbItemID :=2;
      Form1.ComboBox21.dbItemID :=2;

т.е. .dbItemID :=2  уже  не 2...

PS на всякий прикрепил проект.. Пароль admin ... попробуйте зайти пол brand-manager home (пароль - 1) и посмотрите как первый  фильтр отрабатывает ... Комментирую строки кода с удалением 0-позиции  и все работает штатно, но юзер имеет возможность просматривать все записи (при пустышке в поле комбобокс)

Post's attachments

Attachment icon PlanWork.zip 351.22 kb, 537 downloads since 2014-10-09 

Re: [Решено] Combobox - вывести только определенные записи

Действительно, сбивается.


Скачайте пожалуйста бета версию 1.45
https://www.dropbox.com/s/88lx13h9cw5ro … 5.zip?dl=0


Добавил новые методы для ComboBox
dbAddRecord(id: integer; s: string);
dbEditRecord(id: integer; s: string);
dbDeleteRecord(id: integer);


Form1.ComboBox1.dbDeleteRecord (-1); // позволяет удалить из начала списка пустое значение, которое по умолчанию присутствует в ComboBox 
Dmitry.

Re: [Решено] Combobox - вывести только определенные записи

Извините за вторжение, есть вопрос по комбобоксу - можно ли из скрипта или установкой свойств запретить выбор другого значения в комбобоксе, кроме текущего?То есть показано в комбобоксе значение, а нажать на стрелку справа и выбрать другое значение нельзя.

Re: [Решено] Combobox - вывести только определенные записи

atempbox

можно

Form1.ComboBox1.Enabled := False;
Dmitry.

Re: [Решено] Combobox - вывести только определенные записи

DriveSoft, спасибо. Функция  (проверил dbDeleteRecord) работает штатно.

13 (edited by savage 2014-10-10 19:20:34)

Re: [Решено] Combobox - вывести только определенные записи

DriveSoft, продолжение "балета":
1. есть у меня есть 2 формы, 1 - задачи, 2 - добавление новой задачи
2. на обеих формах присутствует выбор юзеров (через combobox1 и combobox2), который надо ограничивать одинаково
3. при подключении фильтрации и удаления лишней пустой записи в комбобокс на 1 форме ,все отрабатывает штатно
4. я перехожу на форму добавления новой задачи - фильтрация и удаление лишней пустой записи в комбобокс отрабатывает штатно, но происходит сбрасывание фильтра на 1 форме.
5. вероятно, последнее происходит из-за срабатывания:

UpdateDatabase('users');

Нашел выход, задавая значения в комбобокс открываемой формы одновременно с комбобоксом на форме Задач, но, имхо, это не совсем правильно..

Re: [Решено] Combobox - вывести только определенные записи

savage
проверил у себя, фильтр не сбросился после UpdateDatabase
отправьте пожалуйста ваш проект на support@drive-software.com

Dmitry.

Re: [Решено] Combobox - вывести только определенные записи

отправил.

Re: [Решено] Combobox - вывести только определенные записи

DriveSoft, спасибо за помощь.
На всякий случай, привожу  решение проблемы:
чтобы значение комбобокса на форме 1 запоминалось и после обновления (при появлении  формы 2) восстанавливало его,  необходимо в скрипте по событию onShow формы2 прописывать:

 i := Form1.ComboBox11.dbItemID;
      UpdateDatabase('users');
      Form1.ComboBox11.dbItemID := i;