901 / 291 / 50
Регистрация: 02.12.2014
Сообщений: 1,229
1

Насколько сложно (или действительно невозможно?.) сделать связанные списки в ТАБЛИЧНОЙ форме?

28.11.2015, 21:13. Показов 1589. Ответов 24
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем добрый день)
Опять я в своих изысканиях наткнулся на, по всей видимости, одну из больных тем Access.
Здесь на форуме я уже видел подобные темы, но попытаюсь поднять ее еще раз.
Итак, дано:
1. ТАБЛИЧНАЯ форма
2. в ней поля со списками "Регион" и "Подразделение".
И само собой, что я хочу вроде бы совершенно логичной вещи: чтобы при выборе в первом списке определенного региона - во втором появлялись только подразделения, относящиеся к выбранному региону.
И само собой, если указываю в источнике строк подразделения условием отбора - значение поля "Регион", то получаю большинство ПУСТЫХ строк, т.к. форма табличная и по сути элемент "Регион" - один, и соответственно, в источнике строк для Подразделения выбрались только подразделения первого региона, а если в других строках получаем пустые значения, т.к. они не входят в перечень источника строк. Написал немного путанно, но, думаю, те, кто сталкивались - понимают, о чем речь.

Так вот, я даже сочинил очередную, как мне показалось, прикольную идею: посадил на событие "Получение фокуса" поля "Подразделение" процедуру, которая заменяет источник строк на отфильтрованный по региону, а на событие "Потеря фокуса" - снова ставит источником строк ПОЛНЫЙ список подразделений. И таким образом решил вроде бы задачу, в имеющихся данных все поля стали отображаться правильно, при клике на выпадающем списке подразделения отображались только подразделения нужного региона...
НО. Рано радовался, само собой. Вся эта механика замечательно работала при просмотре уже имеющихся данных, а вот при попытке ввести новые - тут-то и начались козни... Ввожу первую строку, регион, подразделение - все нормально. Ввожу вторую строку, другой регион, кликаю и выбираю подразделение - а оно мне выдает сообщение, которое я заскринил на картинке ниже. И тут уже тупик, нужно аварийно закрывать форму...

Я понимаю, что я топчусь по старым, избитым многими поколениями граблям, но хотелось бы все-таки уяснить для себя вопрос, вынесенный в заголовок темы: создание связанных списков в табличной форме НЕВОЗМОЖНО или же "довольно сложно", как сказал в одной из просмотренных мной тем уважаемый mobile ? Все-таки "довольно сложно" - внушает хоть какую-то надежду)
Миниатюры
Насколько сложно (или действительно невозможно?.) сделать связанные списки в ТАБЛИЧНОЙ форме?  
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.11.2015, 21:13
Ответы с готовыми решениями:

Как сделать в форме связанные списки?
Здравствуйте! Есть форма Посещения. Хочу сделать так, чтобы выбирали специализацию врача, а в...

Насколько сложно сделать таблицу?
Подскажите можно ли сделать вот такую таблицу, насколько это сложно?

Насколько сложно сделать такой сайт
Привет , есть такой сайт (не реклама, просто дизайн нрав ) насколько сложно его сделать ? он...

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

24
Эксперт MS Access
17480 / 7244 / 1650
Регистрация: 21.06.2012
Сообщений: 13,838
28.11.2015, 21:37 2
Лучший ответ Сообщение было отмечено Kkarn как решение

Решение

Если Вы о "мерцании" в уже введенных записях, то пример борьбы здесь Повторные значения
1
901 / 291 / 50
Регистрация: 02.12.2014
Сообщений: 1,229
29.11.2015, 19:16  [ТС] 3
ltv_1953, хм, скорее всего да, это что-то похожее... я так понял, в данном примере найден выход в том, что при входе в поле происходит сортировка элементов в связаном поле, и нужные элементы подтягиваются на верх списка?.. Вариант красивый, спасибо, возьму на заметку.
0
Эксперт MS Access
17480 / 7244 / 1650
Регистрация: 21.06.2012
Сообщений: 13,838
29.11.2015, 19:19 4
И еще запрещен ввод "неправильных" элементов.
1
шапоклякистка 8-го дня
3678 / 2238 / 391
Регистрация: 26.06.2015
Сообщений: 4,647
Записей в блоге: 1
29.11.2015, 20:54 5
Версия Access какая?

У меня 2007. В таблице используется подстановка, на форме у поля со списком своейства:

"Наследовать список значений" = да
"Только значения источника строк" = нет

Во всех строках отображаются все значения, даже если из списка их программно убрать (см картинку).

Судя по всему, это первый выявленный плюс полей подставновки в таблицах, да?
Миниатюры
Насколько сложно (или действительно невозможно?.) сделать связанные списки в ТАБЛИЧНОЙ форме?  
0
Эксперт MS Access
7391 / 4528 / 295
Регистрация: 12.08.2011
Сообщений: 13,992
30.11.2015, 10:33 6
Цитата Сообщение от texnik-san Посмотреть сообщение
Во всех строках отображаются все значения, даже если из списка их программно убрать (см картинку).
Судя по всему, это первый выявленный плюс полей подставновки в таблицах, да?
Нет, поля подстановки тут не при чём. Вы же свойства выставляете у поля на форме, а не в таблице.
0
шапоклякистка 8-го дня
3678 / 2238 / 391
Регистрация: 26.06.2015
Сообщений: 4,647
Записей в блоге: 1
30.11.2015, 11:02 7
Поля подставновки "при чем" к свойству "наледовать список значений" - он наследуется как раз из того списка, который указан в поле подстановки. Именно оттуда берутся текстовые значения для тех чисел, которые отсутствуют в строка поля на форме.
0
Эксперт MS Access
7391 / 4528 / 295
Регистрация: 12.08.2011
Сообщений: 13,992
30.11.2015, 13:03 8
вообще не вижу темы для подобных споров, учите теорию реляционных СУБД. Что касается реализации связанных списков в табличной форме, то её дали ранее.
0
901 / 291 / 50
Регистрация: 02.12.2014
Сообщений: 1,229
22.12.2015, 14:26  [ТС] 9
А я опять неожиданно вернулся в данную тему...
Смотрите, я сделал так, как советовали выше, то есть сделал в поле "Подразделение" смену источника строк при входе и выходе из него, и все работает замечательно. НО.
Как выяснилось, при этом в данной табличной форме перестал работать встроенный фильтр по подразделению, то есть по нажатию на кнопку встроенного фильтра получаю сообщение "Слишком мало параметров. Требуется 1". Картинку прилагаю. И по нажатию на Ок в данном сообщении - открывается встроенный фильтр, но без значений (второй скрин).
Я, в принципе, понимаю, что так происходит как раз таки от всех этих манипуляций с источником строк в данном поле, но можно ли это как-то исправить?..
Миниатюры
Насколько сложно (или действительно невозможно?.) сделать связанные списки в ТАБЛИЧНОЙ форме?   Насколько сложно (или действительно невозможно?.) сделать связанные списки в ТАБЛИЧНОЙ форме?  
0
шапоклякистка 8-го дня
3678 / 2238 / 391
Регистрация: 26.06.2015
Сообщений: 4,647
Записей в блоге: 1
22.12.2015, 14:49 10
Нам не картика нужна, а ваша база. Или вы автомеханку фото машины присылаете, чтобы он вам сказал, что у вас стучит?
0
901 / 291 / 50
Регистрация: 02.12.2014
Сообщений: 1,229
22.12.2015, 15:08  [ТС] 11
texnik-san, Как всегда, весь "Конкорд" будет сложно выслать, там много всего ненужного и всяких там "секретных данных")) Разве что это мне нужно соорудить работающий пример этой ерунды... Ок, я попробую. В принципе, он есть в той базе, по примеру которой я делал у себя. То есть пример есть по ссылкам выше... Думал, может тот, кто советовал, по памяти что подскажет, если сам сталкивался с таким вот "побочным эффектом"...
0
901 / 291 / 50
Регистрация: 02.12.2014
Сообщений: 1,229
22.12.2015, 15:20  [ТС] 12
Собственно, вот работающий пример того, о чем я говорю. В нем как раз точно так же наблюдается неработоспособность встроенного фильтра...
Вложения
Тип файла: 7z Связанные_Списки_Без_Мерцания22.7z (66.8 Кб, 13 просмотров)
0
шапоклякистка 8-го дня
3678 / 2238 / 391
Регистрация: 26.06.2015
Сообщений: 4,647
Записей в блоге: 1
22.12.2015, 15:29 13
Цитата Сообщение от Kkarn Посмотреть сообщение
Думал, может тот, кто советовал, по памяти что подскажет, если сам сталкивался с таким вот "побочным эффектом"...
А они как в цитате Толстого о счастливый и несчатсливых семействах: работают у всех одинаково, а вот НЕ работают - у всех по-разному )))

Добавлено через 8 минут
А причина в том, что вы в качестве источника строк присваиваете запрос, который в свою очередь ссылается на запрос Товары_Фирмы_Список, который в своем тексте содержит ссылку на поле Фирма_Код формы Товары_Выборка_Свободное_Поле.

SQL
1
WHERE Фирма_Код<>[Forms]![Товары_Выборка_Свободное_Поле]![Фирма_Код];
А форма закрыта. Вы уж если программно ставите такой источник строк - так уж и потрудитесь нужную форму открыть и нужному полю значение присвоить.

А вообще запросы со ссылкой на поле формы - это фу, кинь каку.
1
Эксперт MS Access
26804 / 14483 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
22.12.2015, 15:56 14
Поставил texnik-san спасибку за Толстого. Но через 8 минут записано в непререкаемом тоне весьма спорное утверждение.
Цитата Сообщение от texnik-san Посмотреть сообщение
А вообще запросы со ссылкой на поле формы - это фу, кинь каку.
И моя спасибка никак к нему не относится.

Я встречался с базами, где все запросы сгенерированны в ВБА с конкретными значениями условий вместо ссылок на поля форм. И было настоящим мучением искать логику в запросах. Совершенно было неясно откуда ноги растут. Сохраненный запрос со ссылкой на форму, или, что более универсально со ссылкой на публичную функцию, задающую значение поля формы гораздо более прозрачны для понимания.
0
шапоклякистка 8-го дня
3678 / 2238 / 391
Регистрация: 26.06.2015
Сообщений: 4,647
Записей в блоге: 1
22.12.2015, 16:17 15
Цитата Сообщение от mobile Посмотреть сообщение
или, что более универсально со ссылкой на публичную функцию, задающую значение поля формы
О, а вот этот вариант уже ближе к жизни.

Добавлено через 4 минуты
Но вообще, вот в данном конкретом случае использования запроса в качестве источника строк поля со списком, менящимся в зависимости от каких-либо условий, - на мой вкус вовсе не нужен сохраненный запрос, а нужен динамический программно генерируемый текст SQL.
0
901 / 291 / 50
Регистрация: 02.12.2014
Сообщений: 1,229
22.12.2015, 16:18  [ТС] 16
mobile, Как-то я потерялся, извиняюсь... А можно вот на этом конкретном примере показать, как исправить источник строк так, чтобы оно и работало (при смене значения в главном поле менялся источник строк подчиненного) - и в то же время чтобы работал встроенный фильтр табличной формы?.. Пока это как-то выше моего понимания...
0
шапоклякистка 8-го дня
3678 / 2238 / 391
Регистрация: 26.06.2015
Сообщений: 4,647
Записей в блоге: 1
22.12.2015, 17:17 17
Kkarn, я боюсь, проблема будет с тем, что встроенный фильтр будет отображать не все значения, а только соответствующие источнику строк для первой строки формы.
0
901 / 291 / 50
Регистрация: 02.12.2014
Сообщений: 1,229
22.12.2015, 17:30  [ТС] 18
texnik-san, Да вот я тоже боюсь чего-то подобного)... Черт, опять очередной затык, решаемый полумерами, намечается... А так красиво работали связанные списки. Надо ж было обнаружить эту засаду с фильтром... Эх.
0
Эксперт MS Access
26804 / 14483 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
22.12.2015, 17:32 19
Цитата Сообщение от Kkarn Посмотреть сообщение
как исправить источник строк так, чтобы оно и работало (при смене значения в главном поле менялся источник строк подчиненного) - и в то же время чтобы работал встроенный фильтр табличной формы?
В документации Microsoft не нашел ничего даже похожего. Это не значит, конечно, что доков нет. Но искать их затруднительно.
Тем не менее предположу, что Ваше желание невыполнимо. Насколько я понимаю, встроенный фильтр с галочками работает на основе лукапа к запросу-источнику поля со списком, выводя текстовые значения на основе кодов. А в случае смены источника в одной из записей получается неоднозначное решение как комбинация несовместимых источников. Поэтому акс вскидывает ручки в позе "здаюся" и сообщает первую попавшуюся белиберду типа "Слишком мало параметров". Словом, либо встроенный фильтр, либо пользовательский.

Есть, конечно решение на основе апи, где при входе в поле комбобокс подменяется специальной диалоговой формой, размера точно как поле формы. Как-то давно даже делал такое. Там основная трудность (собственно для чего апи), чтобы попасть диалоговой формой точно в поле табличной формы. Но что-то никак не могу найти эту базенку. Куда-то задевал... Если найду, выложу. Но честно говоря, решение не лучшее. Очень много подводных камней.
1
шапоклякистка 8-го дня
3678 / 2238 / 391
Регистрация: 26.06.2015
Сообщений: 4,647
Записей в блоге: 1
22.12.2015, 17:42 20
Попробуйте поиграться с вот таким вриантом. Тут лишние элементы списка не удаляются из него, а сдвигаются вниз, и в дополнительном стобце в списке знаками "+" и "-" обозначено, какие элементы "правильные", а какие нет.

Отчеркивать неправильные элементы чертой не получается, т.к. union делает неработающим встроенный фильтр.
Вложения
Тип файла: rar Иерархия.rar (35.5 Кб, 12 просмотров)
0
22.12.2015, 17:42
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.12.2015, 17:42
Помогаю со студенческими работами здесь

Насколько сложно будет сделать лабораторную на C++/CLI, если знаешь C#?
Мне надо сделать лабу, на WinForm и С++(.Net) я знаю только C#, на сколько большая будет разница...

Не получается сделать связанные выпадающие списки
Как правильно сделать связанные выпадающие списки? Что-то не работает. Может кто подскажет в чём...

Как сделать связанные выпадающие списки mysql + ajax ?
Как сделать связанные выпадающие списки mysql + ajax ?

Копирование данных из ячейки одной Табличной Части на форме в такую же ячейку другой Табличной части на этой же форме
Всех с Новым годом и грядущим Рождеством пособите начинающему: затык такой - НА форме есть две...

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

Действительно ли сложно реализовать на C++ отправку запроса в базу данных?
Дорогие форумчане, мои знакомые имели неудачный опыт сотрудничества с программистами на...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru