Topic: Список одного combobox зависит от значения другого combobox а

Приветствую.
Подскажите пожалуйста.
Какой скрипт необходим при таком условии.
Допустим есть два combobox.
В Combobox1 есть некий список:

001223
154233
245852
365845
423568

В Combobox2 есть такой список:

00021
02581
06587
11254
12233
25878
35685
34385
........

Так вот задача.
Если выбираю из Combobox1 например "154233", тогда в Combobox2 должны остаться лишь значения:   "11254"
"12233"  то есть те что начинаются с "1"

Если выбираю из Combobox1 например "245852", тогда в Combobox2 должно остаться лишь значение:  "25878"
то есть те что начинаются с "2"

И т.д.
То есть значения или список Combobox2 зависит от выбора в Combobox1

2 (edited by k245 2023-03-10 12:09:36)

Re: Список одного combobox зависит от значения другого combobox а

В обработчике события Combobox1.OnChange устанавливайте свойство Combobox2.Filter и обновляйте данные:

procedure Form1_Combobox1_OnChange (Sender: TObject);
begin
  Form1.Combobox2.Filter := 'SUBSTR( <имя поля>, 1, 1) =  '+copy( Form1.Combobox1.Text,1,1 );
  Form1.Combobox2.dbUpdate;
end;

<имя поля> - поле, указанное в свойстве Combobox2.FieldName

Визуальное программирование: блог и телеграм-канал.

Re: Список одного combobox зависит от значения другого combobox а

Приветствую k245


procedure Form1_Combobox2_OnChange (Sender: TObject);
begin
  Form1.Combobox2.Filter := 'SUBSTR( <имя поля>, 1, 1) =  '+copy( Form1.Combobox2.Text,1,1 );
  Form1.Combobox2.dbUpdate;
end;



Здесь везде повтор Combobox2
Прошу прощения, а что означают цифры ,1,1 - это некий диапазон?

Спасибо

Re: Список одного combobox зависит от значения другого combobox а

Привет Estimation411, Konstantin,
Попробуй это.
Derek.

Post's attachments

Attachment icon linked comboboxes.zip 436.94 kb, 124 downloads since 2023-03-10 

Re: Список одного combobox зависит от значения другого combobox а

estimation411 wrote:

Приветствую k245


procedure Form1_Combobox2_OnChange (Sender: TObject);
begin
  Form1.Combobox2.Filter := 'SUBSTR( <имя поля>, 1, 1) =  '+copy( Form1.Combobox2.Text,1,1 );
  Form1.Combobox2.dbUpdate;
end;



Здесь везде повтор Combobox2
Прошу прощения, а что означают цифры ,1,1 - это некий диапазон?

Спасибо

Исправил опечатку.
Функции
SUBSTR для базы данных
COPY для скрипта
Они выделяют из строки подстроку указанной длины, начиная с указанного символа. В данном случае интересует первый символ.

Визуальное программирование: блог и телеграм-канал.

Re: Список одного combobox зависит от значения другого combobox а

Derek. ваш скрипт работает.
Я так понимаю отбор происходит лишь по одному символу в строке.
Такого варианта как по двум первым символам - возможно?

например в Combobox1

01000
02000
03000
13000
14000
15000
16000

а в Combobox2

01045
01665
01254
02500
02368
03600
13800
13990
14222
15600

И при выборе в Combobox1 "01000" в Combobox2 останутся лишь "01045, 01665, 01254"
При выборе в Combobox1 "02000" в Combobox2 останутся лишь "02500, 02368"

и т.д.

Re: Список одного combobox зависит от значения другого combobox а

А в чем глобальная задача? Что это за цифры?

Re: Список одного combobox зависит от значения другого combobox а

Смысл в том чтобы при выборе "категории" выпадали "субкатегории" того же порядка.
Например есть категории
- 01000 продукты
- 02000 мебель
- 03000 автомобили

Субкатегории:

- 01010 сметана
- 01020 хлеб
- 01203 колбаса
и т..д.

- 02020 стул
- 02023 стол
- 02350 кровать
и т.д.

То есть при выборе 01000 выпадает список из продуктов а не все в подряд.

Как то так.

Re: Список одного combobox зависит от значения другого combobox а

А категории и субкатегории не связаны реляционными отношениями на уровне БД? Еще есть вариант с деревом, но там сложней с выборкой данных.

Визуальное программирование: блог и телеграм-канал.

10 (edited by vovka3003 2023-03-11 10:53:24)

Re: Список одного combobox зависит от значения другого combobox а

estimation411 wrote:

Смысл в том чтобы при выборе "категории" выпадали "субкатегории" того же порядка.
То есть при выборе 01000 выпадает список из продуктов а не все в подряд.

XYZ проблема налицо... Вы спрашиваете "как соорудить молоток", но промолчали, что требуется "забить шуруп".
Здесь не "циферками" надо решать вопрос а именованием категорий.

11 (edited by estimation411 2023-03-11 13:40:00)

Re: Список одного combobox зависит от значения другого combobox а

Я наверное плохо объяснил.

Цифры вначале значения не имеют. В категории и субкатегории оба списка включая цифры - текстовые.

Это тоже самое если бы я сделал все тоже самое но буквами.

- ахааа продукты
- амааа мебель
- ажааа автомобили

Субкатегории:

- ахнол сметана
- ахдож хлеб
- ахкош колбаса
и т..д.

- амшор стул
- амвол стол
- амкдв кровать
и т.д.

То есть при выборе ахааа выпадает список субкатегории который начинается на ах****
Все субкатегории находятся в отдельной таблице сквозным списком.
Все категории также находятся в отдельной таблице сквозным списком.

Изначально субкатегории заполняются по этому правилу самим пользователем в таблицу.
Пользователь всегда будет заполнять субкатегории начиная с букв ах***** для продуктов.

И категории и субкатегории не связаны реляционными отношениями на уровне БД

Спасибо огромное

Re: Список одного combobox зависит от значения другого combobox а

Философское отступление


Тема: реализация дерева с двумя уровнями с применением текстового поразрядного ключа.


Плюсы: простота выборки данных по каждому узлу и связанных данных.
Минусы: ограничения числа элементов каждого уровня задаются форматом поразрядного ключа; выборка по текстовому ключу медленнее, чем по целочисленному; сложность редактирования ключа подчиненных узлов (товаров по категориям/субкатегориям при изменении ключа верхнего уровня.


Пояснение. Имеет место быть задача классификации, которая имеет следующие параметры:

  • число уровней классификации заранее определено;

  • максимальное число элементов на каждом уровне заранее определено длиной последовательности и его алфавитом;

  • родительский элемент определяется текстовым значением ключа классификатора без поддержки целостности данных на уровне БД.


По научному такое дерево называется "визуальный путь". По сравнению с деревом, построенном на связке ID-ParentID, позволяет извлекать данные о дочерних элементах более простым SQL-запросом, но имеет ряд ограничений, описанных выше. В MVDB нет встроенной поддержки такого дерева, но скриптами его легко организовать.


P.S. "Забивание шурупа молотком" иногда вполне себя оправдывает, так как "создание шуруповёрта" гораздо сложнее "создания молотка".

Визуальное программирование: блог и телеграм-канал.

Re: Список одного combobox зависит от значения другого combobox а

Hi Estimation, Konstantin,
Константин прав в том, что он пишет, и я бы тоже выбрал такой путь.
Однако, если по какой-либо причине вам нужно связать два поля со списком без использования функции «parentcombobox», я бы сделал это следующим образом (см. вложение), что решает предыдущую проблему с начальными нулями, альфа-строками и т. д. (извините за это).
Я также добавил для вас возможность выбрать, сколько символов (1,2,3 и т. д.) вы хотите сопоставить, что может помочь.
С уважением,
Derek.


Konstantin is correct in what he writes and it is the way that I would also choose.
However, if for whatever reason you need to link two comboboxes together without using the 'parentcombobox' function, then I would do it like this (see attachment) which resolves the previous problem with leading zeroes, alpha strings etc (sorry about that).
I've also added the option to choose the number of character you want to match on with may be useful.
Derek.
.

Post's attachments

Attachment icon linked comboboxes2.zip 437.65 kb, 105 downloads since 2023-03-11 

Re: Список одного combobox зависит от значения другого combobox а

Derek.!
Гениально!!!!
Работает.
Я чуток подкрутил. Так как у меня всегда проверка по первым двум символам идет.

procedure Form1_ComboBox1_OnChange (Sender: TObject; var vfilter: string; );
begin
 
  vfilter := copy(form1.combobox1.text,1,2);
  form1.combobox2.dbFilter := 'substr(subpart,1,"'+inttostr(2)+'") = "'+vfilter+'"';
  form1.combobox2.dbupdate;
end;


Вот так получилось и все рулит!!!!
Низкий поклон!
Спасибо!

Re: Список одного combobox зависит от значения другого combobox а

Привет,
Вам не нужно менять скрипт — просто измените количество символов, которые вы хотите сопоставить в таблице (см. скриншот).
Derek.

Post's attachments

Attachment icon screenshot.jpg 100.97 kb, 44 downloads since 2023-03-11 

Re: Список одного combobox зависит от значения другого combobox а

Приветствую Derek.
Абсолютно согласен с вами.
Просто в моем случае все завязано на первых двух (2) символах и нет необходимости создавать дополнительную таблицу на ввод количества символов для поиска (MatchNo),
Это небольшой проект что я создаю для себя для своей работы.
Поэтому стараюсь не забивать голову форумчан лишней информацией, а стараюсь задать вопрос по конкретной проблеме.

Огромное спасибо!!!

Re: Список одного combobox зависит от значения другого combobox а

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

form1.combobox2.dbupdate;


Задача в том чтобы не кликать на выпадающий список и не выбирать вручную, а сразу по - умолчанию, автоматически ставится первая по списку запись.

Спасибо большое.

Re: Список одного combobox зависит от значения другого combobox а

Form1.combobox2.dbUpdate;
if Form1.combobox2.Items.Count > 0 then
 Form1.combobox2.ItemIndex := 0;
Визуальное программирование: блог и телеграм-канал.

Re: Список одного combobox зависит от значения другого combobox а

k245 нет слов!
Спасибо огромное. Все работает как швейцарские часы!
Благодарность от всего сердца!

20 (edited by estimation411 2023-03-17 19:04:10)

Re: Список одного combobox зависит от значения другого combobox а

Приветствую всех!
Подскажите скрипт для выделения или подсветки тех записей в таблице которым соответствует выбор из Combobox.
Таблица заполняется с использованием этого Combobox, как одного из элементов.

Спасибо огромное.

Re: Список одного combobox зависит от значения другого combobox а

Привет Estimation11,
Мне непонятно, что вам нужно.
Вы хотите фильтровать записи в таблице в зависимости от значения, выбранного в поле со списком, или вы хотите сохранить все записи в таблице и выделить те, которые соответствуют значению, выбранному в поле со списком?
Пример проекта был бы полезен.
Derek.
.
It is not clear to me what you need.
Do you want to filter records in the tablegrid depending on the value selected in the combobox or do you want to keep all the records in the tablegrid and highlight those that match the value selected in the combobox?
A sample project would be useful.

22 (edited by estimation411 2023-03-20 22:38:42)

Re: Список одного combobox зависит от значения другого combobox а

Приветствую Derek.
Я вроде разобрался.
Просто пошел другим путем.
Вместо подсветки записей в таблице по выбранному значению комбобокса я создал кнопку поиска и скрыл ее и прописал, что как только меняется значение комбобокса одновременно кликает скрытая кнопка поиска и как результат появляются лишь те записи в таблице, которые соответствуют значению комбобокса. Все работает.
Все равно , огромное спасибо.