powered by simpleCommunicator - 2.0.55     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Как реализовать выбор в поле со списком, если список большой
25 сообщений из 43, страница 1 из 2
Как реализовать выбор в поле со списком, если список большой
    #39296740
Decabrist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте.
Подскажите пожалуйста -
В табличной форме одно из полей - поле со списком связанное с таблицей в которой может быть несколько сотен записей. Выбирать значение из списка заманаешься. Фильтровать по вводимым символам тоже не выход, особенно если не знаешь что имеется в исходной таблице. Наилучшим выходом вижу выбор из вспомогательной формы в которой можно было бы вывести записи в виде какого-то структурированного списка. Но как это сделать представляю плохо -т.к. в базах данных вообще и программировании в частности не очень хорошо разбираюсь к сожалению. Видимо должна быть какая-то всплывающая форма с передачей значения из это формы по клику мышкой, или по кнопке в исходное поле. Может кто-нибудь показать пример подобного решения? Или предложить что-нибудь более подходящее?
...
Рейтинг: 0 / 0
Как реализовать выбор в поле со списком, если список большой
    #39296758
Фотография Tarasios
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для удобства вам надо разбивать информацию на "составляющие" и хранить в разных таблицах, связанных между собой с отношением "один ко многим". В форме ставите несколько полей со списком, каждый из которых берёт данные из своей таблицы с ограничением по другим полям со списком. Грубый пример: есть зал с кучей народа, одним списком. Вы сделали разбивку и теперь последовательно выбираете критерии: мужчина/женщина, старик/взрослый/ребёнок, брюнет/шатен/блондин. Таким образом выбором пары категорий вы быстро определите маленький список, в котором легко найдёте искомое. Такой тип разбивки, если не ошибаюсь, вы можете изучить в "Борее".
Если дадите пример пары записей из вашего поля, попробую подсказать критерии разбивки.
...
Рейтинг: 0 / 0
Как реализовать выбор в поле со списком, если список большой
    #39296759
Decabrist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну и вдогонку еще, что бы отдельную тему не создавать -
на форме имеется две подчиненные формы. При перемещении по записям одной подчиненной формы записи другой должны фильтроваться. Поставил на событие Текущая запись одной подформы код типа:
Код: vbnet
1.
2.
3.
4.
Private Sub Form_Current()
  Me.Parent.subMod.Form.Filter = "iEquipment = " & Me.iEquipment
  Me.Parent.subMod.Form.FilterOn = True
End Sub



Но при первой загрузке основной формы выдается ошибка чтения/записи. Если же ее игнорировать то далее все работает нормально. В чем проблема? И как ее избежать?
...
Рейтинг: 0 / 0
Как реализовать выбор в поле со списком, если список большой
    #39296763
Decabrist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо. Я понимаю о чем вы. Теорию плотно читал, в том числе и на этом форуме. Практики нет. Таблицы уже вроде как разбил и схему данных сделал. Вопрос по выбору из поля со списком которое связано с уже готовой таблицей. Ее дальше разбивать некуда.
Ну например таблица "поставщики". В форме "счета" имеется поле со списком в котором выбираются поставщики, а их много.

Ну или в том же счете есть "товары/услуги", для которых существует отдельная таблица - перечень. И там позиций еще больше чем в таблице поставщиков. Выбор в "счетах" (вернее в "составе счета") реализован так же через поле со списком.
Неудобно.
...
Рейтинг: 0 / 0
Как реализовать выбор в поле со списком, если список большой
    #39296764
Фотография Панург
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DecabristВ чем проблема? И как ее избежать?Есть старый трюк. На Главной форме добавляешь поле (невидимое), в него прописываешь в данных "=ИмяСубформыСодержащейВедущуюФорму.Form!iEquipment" , естественно используешь свои названия. Потом в свойствах у контрола подчинённая форма, который содержит ведомую форму, в "подчинённых полях" ( LinkChildFields ) указываешь " iEquipment ", а в "основные поля" ( LinkMasterFields ) имя твоего текстового поля. Всё.
...
Рейтинг: 0 / 0
Как реализовать выбор в поле со списком, если список большой
    #39296765
Decabrist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
...
Рейтинг: 0 / 0
Как реализовать выбор в поле со списком, если список большой
    #39296771
Decabrist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ПанургЕсть старый трюк.
Обалдеть. Сработало!
Спасибо!
Еще бы по основному вопросу такое простое решение.
...
Рейтинг: 0 / 0
Как реализовать выбор в поле со списком, если список большой
    #39296774
Фотография Панург
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DecabristЕще бы по основному вопросу такое простое решение. тебе же предложили вполне решение 19582336 . В любом случае нужно что-то делать со списком - разбить на блоки. А выводить это уже потом, связанные списки там будут или форма. Я как-то даже в выпадающий список дерево (TreeView) запихивал...
...
Рейтинг: 0 / 0
Как реализовать выбор в поле со списком, если список большой
    #39296782
Фотография Tarasios
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Decabrist,
смотрю образец вашего счёта, поле "Наименование". И ясно вижу, что ни разу инфа в этом поле не "Ее дальше разбивать некуда". Или мы друг друга не поняли ;) У вас кроме неудобства визуального - перегруз таблиц дублирующейся инфой.
Например, пример разбивки: тип оборудования (условно): Конденсатор; Заклёпка; Эл.двигатель.
В отдельной таблице - маркировка, один или два параметра. Вот у меня компьютерный магазин - там вообще на 4 категории разбито. В большинстве случаев - хватает три категории.
Вот визуальный пример реализации (поле "Изготовитель" раскрыто для наглядности:
А на второй картинке - образец схемы:
...
Рейтинг: 0 / 0
Как реализовать выбор в поле со списком, если список большой
    #39296783
Фотография Tarasios
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tarasios, упс, первая картинка отвалилась, кидаю заново
...
Рейтинг: 0 / 0
Как реализовать выбор в поле со списком, если список большой
    #39296785
Фотография Tarasios
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
по нескольким полям ты легко находишь нужную позицию, а уже в отчётах или где там надо она легко "сшивается" по необходимости из нескольких полей в одну строчку
...
Рейтинг: 0 / 0
Как реализовать выбор в поле со списком, если список большой
    #39296818
Фотография vmag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DecabristВыбирать значение из списка заманаешься.

На форме дополнительно чек бокс и поле фильтра
В запросе источнике записей списка добавить сам чек бокс из формы
поставить две пары условий:
Если чек бокс Да то у фильтруемого поля условие Like "*" & поле фильтра & "*"
Если чек бокс Нет то у фильтруемого поля нет условия
В событиях после обновления чек бокса и поля фильтра поставить Requery на Список
Результаты превзойдут все ожидания...

DecabristНо при первой загрузке основной формы выдается ошибка чтения/записи. Если же ее игнорировать то далее все работает нормально. В чем проблема? И как ее избежать?

Ответ в самом вопросе:
Код: vbnet
1.
2.
3.
4.
5.
6.
Private Sub Form_Current()
On Error GoTo er1
  Me.Parent.subMod.Form.Filter = "iEquipment = " & Me.iEquipment
  Me.Parent.subMod.Form.FilterOn = True
er1:
End Sub
...
Рейтинг: 0 / 0
Как реализовать выбор в поле со списком, если список большой
    #39296819
Фотография vmag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vmag,

[b] в коде зачеркнуть везде (хотел выделить жирным)
...
Рейтинг: 0 / 0
Как реализовать выбор в поле со списком, если список большой
    #39296824
Decabrist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
[quot Tarasios]Decabrist,
смотрю образец вашего счёта, поле "Наименование". И ясно вижу, что ни разу инфа в этом поле не "Ее дальше разбивать некуда". /quot]

Это бухгалтерская таблица (или того кто будет заниматься учетом прихода/расхода).
Я одно время работал с бухгалтерами и понял одно - как им ни делай они будут вносить так как написано в документе. В одну строку. И им наплевать на то что это, где это и т.п.
Кроме того таки данное поле основано на запросе, в котором поля [наименование] и [единицы измерения] суммируются.

Разделение по колонкам, так как у вас происходит дальше, на уровне технического специалиста. Вот у него уже четко все разбито по наименованиям/обозначениям/единицам измерения/характеристиками и т.п.
Давайте приведу другой пример... из того же что и выше:
...
Рейтинг: 0 / 0
Как реализовать выбор в поле со списком, если список большой
    #39296831
Decabrist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот из той же серии как это выглядит в форме с регистрацией счетов,
и как это выглядит в таблице. Вы видите что поле является суммой полей [наименование] и [город]
Выбирать отдельно город, а затем фирму поставщика - не факт что тот кто будет это делать знает в каком именно городе находится эта фирам.
Выбирать фирму - не факт что не найдется одноименных.
Поэтому сделано так.
Допустим поставщиков несколько сотен... да пусть даже десятков. И что крутить их в поле со списком до тех пор пока не найдется нужное?
...
Рейтинг: 0 / 0
Как реализовать выбор в поле со списком, если список большой
    #39296834
Decabrist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
и таблица:
...
Рейтинг: 0 / 0
Как реализовать выбор в поле со списком, если список большой
    #39296838
Decabrist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну а вот на минуточку таблица технического специалиста, как раз так как вы говорили. И это разные таблицы с бухгалтерией - потому что те внести могут абы как (как в счете указали так и будет), а у технаря все будет четко и однозначно.
...
Рейтинг: 0 / 0
Как реализовать выбор в поле со списком, если список большой
    #39296850
Decabrist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vmag
На форме дополнительно чек бокс и поле фильтра
В запросе источнике записей списка добавить сам чек бокс из формы
поставить две пары условий:
Если чек бокс Да то у фильтруемого поля условие Like "*" & поле фильтра & "*"
Если чек бокс Нет то у фильтруемого поля нет условия
В событиях после обновления чек бокса и поля фильтра поставить Requery на Список



Вариант хороший. А с всплывающей формой, в которой нашел, ткнул кнопку и оно в списке отобразилось никак?
А вдруг тут же еще и добавить новую запись надо в ту же форму? Я вот к чему подвожу.
...
Рейтинг: 0 / 0
Как реализовать выбор в поле со списком, если список большой
    #39296973
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Decabrist,
Дословно не помню, но как-то так:"если в таблице поле имеет одно и то же значение во многих записях-её следует разбить" Посмотрите как это сделает мастер анализа таблиц. Кстати об этом Вам уже говорили 19582336 ("Эл.двигатель" в поле "наименование")
...
Рейтинг: 0 / 0
Как реализовать выбор в поле со списком, если список большой
    #39297310
Фотография vmag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DecabristВариант хороший. А с всплывающей формой, в которой нашел, ткнул кнопку и оно в списке отобразилось никак?
А вдруг тут же еще и добавить новую запись надо в ту же форму? Я вот к чему подвожу.

Да всё так же, и на подводной лодке тоже будет работать, можно галочку даже не использовать, а в выражение добавить это же поле поиска, если в поле поиска NULL, то без условия отбора, а если есть значение, то его же (поле) и в условие отбора.

Просто есть вопрос и есть совет, рассказывать про всплывающие формы, параллельно работающие формы и т.д. как-то в планы не входит...
...
Рейтинг: 0 / 0
Как реализовать выбор в поле со списком, если список большой
    #39297566
Decabrist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Хорошо давайте так сформулирую конкретную задачу.
Необходимо
1. по правой кнопке мыши на поле со списком и выборе соответствующей команды меню вывести форму с таблицей, к которой привязано это поле со списком. Затем, после выбора нужной позиции во всплывшей форме мышкой, либо по кнопке на той же форме - форма должна закрыться, а выбранная позиция должна отобразится в поле со списком.

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

2. Та же задача что и в п.1 но вместо выбора надо добавить новую запись в исходную таблицу, которая затем должна отразится в поле со списком.

помимо вопроса выше, здесь добавляется новая проблема. В поле со списком новая запись отсутствует, до тех пор пока я не закрою форму, и не открою ее заново.
...
Рейтинг: 0 / 0
Как реализовать выбор в поле со списком, если список большой
    #39297574
Decabrist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
sdkuDecabrist,
Дословно не помню, но как-то так:"если в таблице поле имеет одно и то же значение во многих записях-её следует разбить" Посмотрите как это сделает мастер анализа таблиц. Кстати об этом Вам уже говорили 19582336 ("Эл.двигатель" в поле "наименование")
А кто вам сказал что это значение не вынесено в отдельную таблицу? ;)
Ну вообще да, не вынесено. Т.к. "эл.двигатель" это частный и достаточно редкий случай и видно их друг за другом несколько записей только потому что внес их туда друг за другом за один раз. Таких отдельных частных случаев хватает конечно (заклепки, провода и т.п), но я пока не вижу смысла делать для этого целую отдельную таблицу наименований.
А вот поле "группа" - к примеру как раз таки отдельная таблица.
...
Рейтинг: 0 / 0
Как реализовать выбор в поле со списком, если список большой
    #39297587
Decabrist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Decabristосновной вопрос здесь не столько вывод формы, это понятно DoCmd OpenForm сколько о том как передать значение в исходный список.

Добавлю. Я могу написать код в котором по событию (клик мышки, клик кнопки) будет меняться значение поля в конкретной форме. Через обращение CurrentProject.Allforms Но мне кажется это фиговый выход. Т.к. эту форму, как отдельную я потом не использую - она будет пытаться изменить значение поля в заданной, возможно даже закрытой на тот момент форме.
Ну не программист, извините.
...
Рейтинг: 0 / 0
Как реализовать выбор в поле со списком, если список большой
    #39298286
Фотография Tarasios
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Decabrist, думается мне, что вам будет удобнее сделать так.
В форме делаете "Поле1", куда вводится часть наименования (что помнится) товара или фирмы (смотря, какой список поле обслуживает). Рядом в форме разместите небольшой "Список", строк на 10-15. Именно элемент список, а не поле со списком. В этом списке отображается результат выборки данных по совпадающей части с значением поля "Поле1". Конструкция с Like это делает элементарно. То есть, вводите в "Поле1" буковки до тех пор, пока по всё большему совпадению в "Список" выборка данных не сократится до нескольких строчек. После чего уже не трудно тыкнуть в нужную запись и обработать её. Таким образом вы избавляетесь вообще от прокрутки (хотя Список можно снабдить вертикальным скроллом) и получаете возможность фильтрации и поиска.
Другой вариант, кардинальный. Если у вас уже фактически есть нормально заведённая база с удобной и правильной разбивкой данных по полям, то идя на поводу у бухгалтерии, вы делаете дурную и никому не нужную работу.
Бухгалтерия - это участок, который просто ОБСЛУЖИВАЕТ некое предприятие, причём ОБЯЗАНА вести свою работу по критериями и стандартам этого предприятия. И в масштабах предприятия тупо не выгодно, а порой и вредно подстраиваться под тупые хотелки каждого отдельного участка. Понятно, что бухгалтерия любой конторы - та ещё мафия, которая свято стоит на страже своих "свобод" и привычек ;) Но тут уже зависит от руководства. Если вы предоставили руководству логичный и грамотный анализ проблемы, с уже готовым решением (в данном случае - если вы объяснили руководству принципы и плюсы общей стандартизации), но руководству либо пофигу, либо он идёт на поводу бухгалтерии - то вам ничего не светит в этой конторе. Даже являясь убер-программистом, вы никогда не сможете обеспечить реализацию очередной хотелки очередной ленивой тушки и потом синхронизировать с остальными хотелками ;) Мало того, ваш эпический труд никогда (от слова вообще) не будет оценён под достоинству. А неизбежные косяки в ваших стараниях будут подаваться руководству как ваша персональная тупость и криворукость. И поверьте - все минусы перехода на другую работу в сумме дадут гораздо меньше геммора ;)
Если коротко, то простая логика выглядит так:
Если где то есть кучка принципиальных серунов, любящих гадить мимо унитаза, то варианты действий у вас такие:
1. Бегать и постоянно за ними всё подчищать, придумывая автоматизацию этого процесса ;)
2. Дать по башке этой кучке избранных, которые "так привыкли и не собираются ничего менять", заставив делать как надо и куда надо. Можно самому, если хватает умений, либо через директора.
3. Поменять серунов на нормальных, которые обязуются и могут выполнять правила предприятия
4. Уйти в другую команду, оставив руководителя с его командой избранных.

По роду своей работы, прошлой и настоящей, я очень много работаю с начальством, бухгалтерами, и остальными работниками. И стараюсь донести руководству, что автоматизация (магазинов, например), это не просто замена калькулятора на компьютер, а вообще другой подход плюс тотальный контроль на каждом участке. Сколько слёз, соплей и истерик мне довелось увидеть... (Даже когда у себя в магазине делал автоматизацию - хватило за глаза. Зато позволило выявить механизмы вороства). Что характерно: где руководство ХОЧЕТ иметь нормальный процесс и МОЖЕТ напрячь людей - резко падает кол-во непоняток, недостач, криков, скандалов и наездов на "тупого программиста, у которого программа сама что то не так делает".
А есть конторы, где каждый переучёт сопровождается перекрикиванием руководства (давай плати!) и виноватых (ничего не знаю, оно само, а у меня дети/кредит/больная мама и т.д.). И не смотря на всяческие ухищрения с моей стороны как программиста на предмет выявления и отслеживания махинаций персонала - из года в год одни и те же лица, одни и те же "аргументы" с обеих сторон, только суммы растут ;)
Как то так...
...
Рейтинг: 0 / 0
Как реализовать выбор в поле со списком, если список большой
    #39298303
Decabrist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Tarasios,

вы в 1С работали? Вы видели каким образом туда вносятся данные о товарах?
Я понимаю разные формы там могут быть наверное (сам я в 1С не работал). Но вот только что ходил в соответствующий отдел смотрел как и что туда вносится. Два поля "Наименование" и "Полное наименование". В "Полное наименование" хреначат просто фффсё. И никого не колышат мои хотелки. Это система. И она точно такая же на других предприятиях. Вы мне уволится предлагаете? ))) Кажется это самый распространенный совет на этом форуме. Я не говорю что эта система правильная, и я буду делать только так и никак иначе, я просто пытаюсь к ней приспособиться но в конечном итоге сделать так как мне надо. И я это сделаю. Нужны не отвлеченные рассуждения, а конкретные ответы на конкретный вопрос, который я задал одним сообщением выше.
...
Рейтинг: 0 / 0
25 сообщений из 43, страница 1 из 2
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Как реализовать выбор в поле со списком, если список большой
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]