|
|
|
| есть таблица, скажем с 50 полями.
как в зависимости от значения комбобокса ("все" ; "даты"; "контакты" и тп.) на главной форме
показать в подчиненной табличной форме только поля из выбранной группы?
например если Cbo=1;"Даты" , то поля подчиненной формы - ID; date1;date2;InsertDate;BeginDte и тд.
или тоже в общем случае, как поменять recordsoucre подчиненной формы? | |
|
| |
|
|
|
| Вот тут Lukas делал пример
http://hiprog.com/forum/read.php?id_forum=1&id_theme=6291&page=1 | |
|
| |
|
|
|
| спасибо , но речь идет не о фильтрации строк, а столбцов таблицы.
допустим подформа привязана к таблице "заказы", в которой скажем 50 полей:
id, номерЗаказа, датаЗаказа; датаВвода; кодКлиента; типЗаказа; КлассЗаказа; датаСдачиПоДог; датаФактическая и так 50 полей.
на главной форме лежит комбо, где можно выбрать вариант отображения полей подчиненной формы
например "основной" - тогда в подчиненной показаны скажем поля id; датаЗаказа икодКлиента
если "даты" - по id; Дата Заказа; ДатаВВода; ДатаСдачи и тп.
если "категории" - то id; Типзаказа; КлассЗаказа
если "все" - то все 50 полей
или еще так
если в комбе выбрано "поставщики" - в подчиненной показаны поля таблицы поставщики
если "заказы" - то поля таблицы заказы
если "клиенты" - то поля таблицы клиенты
так вот как это сделать, помогите, пожалуйста. | |
|
| |
|
|
|
| 1. Если объект контрола "подчиненная форма" - форма в режиме таблицы или запрос, то легко.
В комбо два столбца - ключ и имя шаблона.
В процедуре после обновления комбо - скрытие/показ столбцов в объекте контрола "подчиненная форма", в зависимости от шаблона.
2. Можно "заготовить" много запросов" (по одному для каждого шаблона),
и по обновлении значения комбо просто менять запрос - объект контрола "подчиненная форма".
Но модель данных вызывает подозрение. (50 полей в одной табличке - многовато) | |
|
| |
|
|
|
| Блин - с офисом какой-то косяк два раза делал пример и два раза слетал модуль формы
попробую объяснить на словах
и так контрол подчиненная форма в качестве объекта источника может иметь не только форму а еще и запрос
(Свойство SourceObject)
нужно настроить это ручками
запрос само собой выводится в табличной форме
далее разваливаем SQL текст на составляющие и видим - все что написано после слова select это и есть отображаемые столбцы в запросе все что после слова From это из какой таблицы или запроса эти столбцы показывать
теперь настраиваем событие комбобокса - после обновления
в зависимости от значения комбобокса некой переменной (текстовой) присваиваем кусок текста с необходимыми для отображения столбцами
далее меняем sql запроса
вот таким кодом
CurrentDb.QueryDefs("Запрос1").SQL = "SELECT Таблица1.Материал, Таблица1.Счетчик, Таблица1.Дата FROM Таблица1 ORDER BY Таблица1.Дата;"
(я не зря отправлял вас к примеру Lukas - там это очень хорошо показано)
ну и последнее что осталось это обновить SourceObject
ну например так
me![имя контрола подчиненной формы].SourceObject=me![имя контрола подчиненной формы].SourceObject | |
|
| |
|
|
|
| У этого метода есть три тормоза:
1. Парсинг + склейка строк
2. Изменение свойства SQL сохраненного запроса приводит к необходимости оптимизации и компилирования запроса при первом вызове.
3. Каждый раз при изменении комбо приходится создавать новый набор данных.
То, что я предлагал в п. 1. выше, лишено этих тормозов. | |
|
| |
|
|
|
| Спасибо,
правильно ли я понял?
по п.1 Делаю форму со всеми полями. задаю им всем .Visible = false
затем при открытии формы и смене combobox "вид отображения" - присваиваю visible= true тем полям, что мне нужно.
Вопрос, если мне надо задать Visible = 0/-1 для ВСЕХ полей, можно ли изменить свойство visible групповой операцией, написав что-то типа
For Each ...Next? как обозвать одним выражением все поля формы или надо перечислять по именно?
по п.2 я так понял что вы предлагаете создать скажем 5 запросов с разными полями из одной таблицы, в соответствии с "видом отображения". Но я не пойму как потом заставить форму отображать поля то одного запроса, то другого?
ACCESS 2007 | |
|
| |
|
20 Кб. |
|
| .Visible = false в табличной форме не катит.
ColumnHidden можно.
Упрощенный пример по п.1. => | |
|
| |
|
|
|
| БЕСКОНЕЧНО ПРИЗНАТЕЛЕН ЗА ПОМОЩЬ | |
|
| |