901 / 291 / 50
Регистрация: 02.12.2014
Сообщений: 1,229
|
|
1 | |
Насколько сложно (или действительно невозможно?.) сделать связанные списки в ТАБЛИЧНОЙ форме?28.11.2015, 21:13. Показов 1589. Ответов 24
Метки нет (Все метки)
Всем добрый день)
Опять я в своих изысканиях наткнулся на, по всей видимости, одну из больных тем Access. Здесь на форуме я уже видел подобные темы, но попытаюсь поднять ее еще раз. Итак, дано: 1. ТАБЛИЧНАЯ форма 2. в ней поля со списками "Регион" и "Подразделение". И само собой, что я хочу вроде бы совершенно логичной вещи: чтобы при выборе в первом списке определенного региона - во втором появлялись только подразделения, относящиеся к выбранному региону. И само собой, если указываю в источнике строк подразделения условием отбора - значение поля "Регион", то получаю большинство ПУСТЫХ строк, т.к. форма табличная и по сути элемент "Регион" - один, и соответственно, в источнике строк для Подразделения выбрались только подразделения первого региона, а если в других строках получаем пустые значения, т.к. они не входят в перечень источника строк. Написал немного путанно, но, думаю, те, кто сталкивались - понимают, о чем речь. Так вот, я даже сочинил очередную, как мне показалось, прикольную идею: посадил на событие "Получение фокуса" поля "Подразделение" процедуру, которая заменяет источник строк на отфильтрованный по региону, а на событие "Потеря фокуса" - снова ставит источником строк ПОЛНЫЙ список подразделений. И таким образом решил вроде бы задачу, в имеющихся данных все поля стали отображаться правильно, при клике на выпадающем списке подразделения отображались только подразделения нужного региона... НО. Рано радовался, само собой. Вся эта механика замечательно работала при просмотре уже имеющихся данных, а вот при попытке ввести новые - тут-то и начались козни... Ввожу первую строку, регион, подразделение - все нормально. Ввожу вторую строку, другой регион, кликаю и выбираю подразделение - а оно мне выдает сообщение, которое я заскринил на картинке ниже. И тут уже тупик, нужно аварийно закрывать форму... Я понимаю, что я топчусь по старым, избитым многими поколениями граблям, но хотелось бы все-таки уяснить для себя вопрос, вынесенный в заголовок темы: создание связанных списков в табличной форме НЕВОЗМОЖНО или же "довольно сложно", как сказал в одной из просмотренных мной тем уважаемый mobile ? Все-таки "довольно сложно" - внушает хоть какую-то надежду)
0
|
28.11.2015, 21:13 | |
Ответы с готовыми решениями:
24
Как сделать в форме связанные списки? Насколько сложно сделать таблицу? Насколько сложно сделать такой сайт Связанные списки на форме |
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
|
17480 / 7244 / 1650
Регистрация: 21.06.2012
Сообщений: 13,838
|
|
29.11.2015, 19:19 | 4 |
И еще запрещен ввод "неправильных" элементов.
1
|
шапоклякистка 8-го дня
|
|
29.11.2015, 20:54 | 5 |
Версия Access какая?
У меня 2007. В таблице используется подстановка, на форме у поля со списком своейства: "Наследовать список значений" = да "Только значения источника строк" = нет Во всех строках отображаются все значения, даже если из списка их программно убрать (см картинку). Судя по всему, это первый выявленный плюс полей подставновки в таблицах, да?
0
|
7391 / 4528 / 295
Регистрация: 12.08.2011
Сообщений: 13,992
|
|
30.11.2015, 10:33 | 6 |
Нет, поля подстановки тут не при чём. Вы же свойства выставляете у поля на форме, а не в таблице.
0
|
шапоклякистка 8-го дня
|
|
30.11.2015, 11:02 | 7 |
Поля подставновки "при чем" к свойству "наледовать список значений" - он наследуется как раз из того списка, который указан в поле подстановки. Именно оттуда берутся текстовые значения для тех чисел, которые отсутствуют в строка поля на форме.
0
|
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
|
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 |
Собственно, вот работающий пример того, о чем я говорю. В нем как раз точно так же наблюдается неработоспособность встроенного фильтра...
0
|
шапоклякистка 8-го дня
|
||||||
22.12.2015, 15:29 | 13 | |||||
А они как в цитате Толстого о счастливый и несчатсливых семействах: работают у всех одинаково, а вот НЕ работают - у всех по-разному )))
Добавлено через 8 минут А причина в том, что вы в качестве источника строк присваиваете запрос, который в свою очередь ссылается на запрос Товары_Фирмы_Список, который в своем тексте содержит ссылку на поле Фирма_Код формы Товары_Выборка_Свободное_Поле.
А вообще запросы со ссылкой на поле формы - это фу, кинь каку.
1
|
26804 / 14483 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
|
|
22.12.2015, 15:56 | 14 |
Поставил texnik-san спасибку за Толстого. Но через 8 минут записано в непререкаемом тоне весьма спорное утверждение.
И моя спасибка никак к нему не относится. Я встречался с базами, где все запросы сгенерированны в ВБА с конкретными значениями условий вместо ссылок на поля форм. И было настоящим мучением искать логику в запросах. Совершенно было неясно откуда ноги растут. Сохраненный запрос со ссылкой на форму, или, что более универсально со ссылкой на публичную функцию, задающую значение поля формы гораздо более прозрачны для понимания.
0
|
шапоклякистка 8-го дня
|
|
22.12.2015, 16:17 | 15 |
О, а вот этот вариант уже ближе к жизни.
Добавлено через 4 минуты Но вообще, вот в данном конкретом случае использования запроса в качестве источника строк поля со списком, менящимся в зависимости от каких-либо условий, - на мой вкус вовсе не нужен сохраненный запрос, а нужен динамический программно генерируемый текст SQL.
0
|
901 / 291 / 50
Регистрация: 02.12.2014
Сообщений: 1,229
|
|
22.12.2015, 16:18 [ТС] | 16 |
mobile, Как-то я потерялся, извиняюсь... А можно вот на этом конкретном примере показать, как исправить источник строк так, чтобы оно и работало (при смене значения в главном поле менялся источник строк подчиненного) - и в то же время чтобы работал встроенный фильтр табличной формы?.. Пока это как-то выше моего понимания...
0
|
901 / 291 / 50
Регистрация: 02.12.2014
Сообщений: 1,229
|
|
22.12.2015, 17:30 [ТС] | 18 |
texnik-san, Да вот я тоже боюсь чего-то подобного)... Черт, опять очередной затык, решаемый полумерами, намечается... А так красиво работали связанные списки. Надо ж было обнаружить эту засаду с фильтром... Эх.
0
|
26804 / 14483 / 3192
Регистрация: 28.04.2012
Сообщений: 15,782
|
|
22.12.2015, 17:32 | 19 |
В документации Microsoft не нашел ничего даже похожего. Это не значит, конечно, что доков нет. Но искать их затруднительно.
Тем не менее предположу, что Ваше желание невыполнимо. Насколько я понимаю, встроенный фильтр с галочками работает на основе лукапа к запросу-источнику поля со списком, выводя текстовые значения на основе кодов. А в случае смены источника в одной из записей получается неоднозначное решение как комбинация несовместимых источников. Поэтому акс вскидывает ручки в позе "здаюся" и сообщает первую попавшуюся белиберду типа "Слишком мало параметров". Словом, либо встроенный фильтр, либо пользовательский. Есть, конечно решение на основе апи, где при входе в поле комбобокс подменяется специальной диалоговой формой, размера точно как поле формы. Как-то давно даже делал такое. Там основная трудность (собственно для чего апи), чтобы попасть диалоговой формой точно в поле табличной формы. Но что-то никак не могу найти эту базенку. Куда-то задевал... Если найду, выложу. Но честно говоря, решение не лучшее. Очень много подводных камней.
1
|
шапоклякистка 8-го дня
|
|
22.12.2015, 17:42 | 20 |
Попробуйте поиграться с вот таким вриантом. Тут лишние элементы списка не удаляются из него, а сдвигаются вниз, и в дополнительном стобце в списке знаками "+" и "-" обозначено, какие элементы "правильные", а какие нет.
Отчеркивать неправильные элементы чертой не получается, т.к. union делает неработающим встроенный фильтр.
0
|
22.12.2015, 17:42 | |
22.12.2015, 17:42 | |
Помогаю со студенческими работами здесь
20
Насколько сложно будет сделать лабораторную на C++/CLI, если знаешь C#? Не получается сделать связанные выпадающие списки Как сделать связанные выпадающие списки mysql + ajax ? Копирование данных из ячейки одной Табличной Части на форме в такую же ячейку другой Табличной части на этой же форме Насколько действительно необходимо заземление компьютера? Действительно ли сложно реализовать на C++ отправку запроса в базу данных? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |