Rambler's Top100
Форум: MS ACCESSVBVBA MS OfficeMS SQL server
Новые сообщения: 0000

Форум: MS ACCESS

Вопросы связанные с MS ACCESS

Обновить визитку
Участники «Online»
Все участники

 
 

Доброго времени суток, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: изменение подформы по значению комбобокса
 
 автор: divino74   (19.09.2010 в 14:04)   личное сообщение
 
 

есть таблица, скажем с 50 полями.
как в зависимости от значения комбобокса ("все" ; "даты"; "контакты" и тп.) на главной форме
показать в подчиненной табличной форме только поля из выбранной группы?
например если Cbo=1;"Даты" , то поля подчиненной формы - ID; date1;date2;InsertDate;BeginDte и тд.

или тоже в общем случае, как поменять recordsoucre подчиненной формы?

  Ответить  
 
 автор: snipe   (19.09.2010 в 14:26)   личное сообщение
 
 

Вот тут Lukas делал пример

http://hiprog.com/forum/read.php?id_forum=1&id_theme=6291&page=1

  Ответить  
 
 автор: divino74   (19.09.2010 в 15:04)   личное сообщение
 
 

спасибо , но речь идет не о фильтрации строк, а столбцов таблицы.

допустим подформа привязана к таблице "заказы", в которой скажем 50 полей:
id, номерЗаказа, датаЗаказа; датаВвода; кодКлиента; типЗаказа; КлассЗаказа; датаСдачиПоДог; датаФактическая и так 50 полей.

на главной форме лежит комбо, где можно выбрать вариант отображения полей подчиненной формы
например "основной" - тогда в подчиненной показаны скажем поля id; датаЗаказа икодКлиента
если "даты" - по id; Дата Заказа; ДатаВВода; ДатаСдачи и тп.
если "категории" - то id; Типзаказа; КлассЗаказа
если "все" - то все 50 полей

или еще так

если в комбе выбрано "поставщики" - в подчиненной показаны поля таблицы поставщики
если "заказы" - то поля таблицы заказы
если "клиенты" - то поля таблицы клиенты

так вот как это сделать, помогите, пожалуйста.

  Ответить  
 
 автор: Lukas   (19.09.2010 в 16:34)   личное сообщение
 
 

1. Если объект контрола "подчиненная форма" - форма в режиме таблицы или запрос, то легко.
В комбо два столбца - ключ и имя шаблона.
В процедуре после обновления комбо - скрытие/показ столбцов в объекте контрола "подчиненная форма", в зависимости от шаблона.

2. Можно "заготовить" много запросов" (по одному для каждого шаблона),
и по обновлении значения комбо просто менять запрос - объект контрола "подчиненная форма".

Но модель данных вызывает подозрение. (50 полей в одной табличке - многовато)

  Ответить  
 
 автор: snipe   (19.09.2010 в 19:49)   личное сообщение
 
 

Блин - с офисом какой-то косяк два раза делал пример и два раза слетал модуль формы
попробую объяснить на словах

и так контрол подчиненная форма в качестве объекта источника может иметь не только форму а еще и запрос
(Свойство SourceObject)
нужно настроить это ручками
запрос само собой выводится в табличной форме

далее разваливаем SQL текст на составляющие и видим - все что написано после слова select это и есть отображаемые столбцы в запросе все что после слова From это из какой таблицы или запроса эти столбцы показывать

теперь настраиваем событие комбобокса - после обновления
в зависимости от значения комбобокса некой переменной (текстовой) присваиваем кусок текста с необходимыми для отображения столбцами
далее меняем sql запроса
вот таким кодом
CurrentDb.QueryDefs("Запрос1").SQL = "SELECT Таблица1.Материал, Таблица1.Счетчик, Таблица1.Дата FROM Таблица1 ORDER BY Таблица1.Дата;"
(я не зря отправлял вас к примеру Lukas - там это очень хорошо показано)

ну и последнее что осталось это обновить SourceObject
ну например так
me![имя контрола подчиненной формы].SourceObject=me![имя контрола подчиненной формы].SourceObject

  Ответить  
 
 автор: Lukas   (19.09.2010 в 20:48)   личное сообщение
 
 

У этого метода есть три тормоза:
1. Парсинг + склейка строк
2. Изменение свойства SQL сохраненного запроса приводит к необходимости оптимизации и компилирования запроса при первом вызове.
3. Каждый раз при изменении комбо приходится создавать новый набор данных.

То, что я предлагал в п. 1. выше, лишено этих тормозов.

  Ответить  
 
 автор: divino74   (20.09.2010 в 13:09)   личное сообщение
 
 

Спасибо,

правильно ли я понял?
по п.1 Делаю форму со всеми полями. задаю им всем .Visible = false
затем при открытии формы и смене combobox "вид отображения" - присваиваю visible= true тем полям, что мне нужно.
Вопрос, если мне надо задать Visible = 0/-1 для ВСЕХ полей, можно ли изменить свойство visible групповой операцией, написав что-то типа
For Each ...Next? как обозвать одним выражением все поля формы или надо перечислять по именно?

по п.2 я так понял что вы предлагаете создать скажем 5 запросов с разными полями из одной таблицы, в соответствии с "видом отображения". Но я не пойму как потом заставить форму отображать поля то одного запроса, то другого?

ACCESS 2007

  Ответить  
 
 автор: Lukas   (20.09.2010 в 14:36)   личное сообщение
20 Кб.
 
 

.Visible = false в табличной форме не катит.
ColumnHidden можно.
Упрощенный пример по п.1. =>

  Ответить  
 
 автор: divino74   (20.09.2010 в 14:54)   личное сообщение
 
 

БЕСКОНЕЧНО ПРИЗНАТЕЛЕН ЗА ПОМОЩЬ

  Ответить  
HiProg.com - Технологии программирования
Rambler's Top100 TopList