PROИТ: Access: построение дерева разделов
Дано: База данных Access 2016 с таблицей, где перечислены разделы (подразделения или другие данные, которые можно представить в виде иерархии).
Задача: на Access-форме построить иерархическое дерево на базе указанной выше таблице.
Скачать пример базы в формате Access
Допустим имеется таблица подразделений вуза (tblDepartment) в формате:
intID — strDepartmentName — intParentID
Где,
intID — идентификатор подразделения,
strDepartmentName — наименование подразделения,
intParentID — идентификатор родительского подразделения.
Корневой элемент будет ссылаться в качестве «родителя» на самого себя.
Также для удобства в конструкторе таблицы в поле родителя можно задать подстановку, ссылаясь на эту же таблицу:
Текст запроса для подстановки:
SELECT tblDepartment. strDepartmentName
tblDepartment_1.strDepartmentName AS Родитель,
tblDepartment.intID
FROM tblDepartment LEFTJOIN tblDepartment AS tblDepartment_1
ON tblDepartment.intParentID = tblDepartment_1.intID
ORDERBY tblDepartment.strDepartmentName;
После этого в колонке родителя мы сможем выбирать не идентификатору, а по имени подразделения (но в колонке будет по-прежнему храниться идентификатор).
В итоге мы сможем заполнять таблицу следующим образом:
Теперь построим дерево. Для этого создаем пустую форму в режиме конструктора и выберем пункт «Элементы ActiveX»:
В списке выбираем элемент «Microsoft TreeView Control (6. 0)»
Выбранный элемент добавляем на форму в нужном месте нужного размера:
Далее переходим в режим кода Visual Basic и добавляем следующий код:
Option Compare Database
Private Sub Form_Load()
Dim strRoot
strRoot = «»
Dim rsCommon As ADODB.Recordset
Set rsCommon = New ADODB.Recordset
rsCommon.Open «SELECT DP.intID, DP.intParentID, DP.strDepartmentName FROM tblDepartment DP WHERE DP.intID = DP.intParentID ORDER BY DP.strDepartmentName»
If Not rsCommon.EOF Then TreeViewDep.Nodes.Add ,, Str(rsCommon(«intID»))& «$KEY», rsCommon(«strDepartmentName»)
strRoot = Str(rsCommon(«intID»))
rsCommon. Close
Set rsCommon = Nothing
TreeViewDep.Nodes.Item(strRoot & «$KEY»).Expanded = True
AddNode (strRoot)
End Sub
Private Sub AddNode(ByVal ParentID As String)
Set rsCommon = New ADODB.RecordsetrsCommon.Open «SELECT DP.intID, DP.intParentID, DP.strDepartmentName FROM tblDepartment DP WHERE DP.intID <> DP.intParentID AND DP.intParentID = » & ParentID & » ORDER BY DP.strDepartmentName», CurrentProject.Connection, adOpenKeyset, adLockOptimistic
Do While Not rsCommon.EOF
TreeViewDep.Nodes.Add ParentID & «$KEY», tvwChild, Str(rsCommon(«intID»))& «$KEY», rsCommon(«strDepartmentName»)
TreeViewDep. Nodes.Item(Str(rsCommon(«intID»))& «$KEY»).Expanded = True
rsCommon.MoveNext
rsCommon.Close
Set rsCommon = Nothing
End Sub
Сохраняем код и форму. Теперь можно запускать форму в режиме просмотра. Должно отобразиться дерево:
Если возникает ошибка: User-defined type not defined (на строке кода ADODB.Recordset), то в VBA в меню Tools — References нужно добавить компонент Microsoft ActiveX Data Objects:
И после этого сделать компиляцию — Debug — Compile.
Как вариант можно использовать таблицу, расположенную в базе на MS SQL Server. Для этого достаточно создать связь с таблицами. Все остальные действия по построению дерева будет аналогичны. В этом случае также возможен обход дерева на стороне MS SQL Server.
(с) Ella S.
Если Вам понравилась статья, пожалуйста, поставьте лайк, сделайте репост или оставьте комментарий. Если у Вас есть какие-либо замечания, также пишите комментарии.
Обновление снижает функциональность базы данных Access — Office
Twitter LinkedIn Facebook Адрес электронной почты
- Статья
- Чтение занимает 3 мин
-
- Применяется к:
- Access 2010, Access 2007, Access 2003
Симптомы
После применения обновления системы безопасности MS12-060 могут возникнуть проблемы с базой данных Access, если вы используете любой из стандартных элементов управления Windows, связанных с MSCOMCTL. OCX-файл, обновленный в исправлении. Проблемы могут включать в себя зависания при открытии объекта, включающего один из элементов управления, или сообщения об ошибках, указывающие на отмену событий. Примеры сообщений об ошибках могут включать (но не ограничиваются) следующими:
Error 459: Object or class does not support the set of events. 2501: <EventName> action cancelled. The expression<EventName> you entered as the event property setting produced the following error: Object of class does not support the set of events.
Причина
Обновление системы безопасности MS12–060 может привести к неправильной загрузке некоторых элементов ActiveX в уже существующих базах данных Access и при вставке элементов управления в конструкторе.
Решение
Метод 1. Примените исправление по соответствующей ссылке ниже:
Office 2010: https://support.microsoft.com/kb/2597986
Office 2003: https://support.microsoft.com/kb/2687323
Метод 2. Повторно зарегистрируйте MSCOMCTL. OCX из командной строки с повышенными привилегиями
Откройте командную строку с повышенными привилегиями.
При работе с 64-разрядной системой выполните следующие две команды:
Regsvr32 /u «C:\Windows\SysWOW64\MSCOMCTL. OCX»
Regsvr32 «C:\Windows\SysWOW64\MSCOMCTL. OCX»
При работе с 32-разрядной системой выполните следующие команды:
Regsvr32 /u «C:\Windows\System32\MSCOMCTL. OCX»
Regsvr32 «C:\Windows\System32\MSCOMCTL. OCX»
Метод 3. Обновление реестра вручную
В некоторых случаях регистрация и отмена регистрации MSCOMCTL. OCX с повышенными разрешениями будет недостаточно для устранения проблемы в базе данных. В таких ситуациях вручную удаляйте раздел реестра, связанный с MSCOMCTL. Может потребоваться OCX.
Важно!
В этот раздел, описание метода или задачи включены действия, содержащие указания по изменению параметров реестра. Однако неправильное изменение параметров реестра может привести к возникновению серьезных проблем. Поэтому следует в точности выполнять приведенные инструкции. Для дополнительной защиты создайте резервную копию реестра, прежде чем редактировать его. Так вы сможете восстановить реестр, если возникнет проблема. Дополнительные сведения о резервном копировании и восстановлении реестра см. в статье о резервном копировании и восстановлении реестра в Windows。
Закройте все программы Office.
Нажмите кнопку «Пуск», а затем выполните команду «Выполнить».
В поле «Открыть» введите «regedit» (без кавычек) и нажмите кнопку «ОК».
Перейдите к следующему разделу 2.0 и удалите его из реестра:
HKEY_CLASSES_ROOT\TypeLib\{831FDD16-0C5C-11D2-A9FC-0000F8754DA1}\2.0
Выполните шаги 1–3 из метода 1 выше.
Метод 4. Выполнение пакетного файла для автоматического обновления системы
ПРИМЕЧАНИЕ. Перед выполнением этих действий рекомендуется создать резервную копию реестра.
Создайте текстовый файл, скопируйте и вставьте в него следующее:
reg delete hkcr\typelib\{831FDD16-0C5C-11D2-A9FC-0000F8754DA1}\2. 0 /f
Если существует %systemroot%\SysWOW64\cscript.exe goto 64
%systemroot%\system32\regsvr32 /u mscomctl.ocx
%systemroot%\system32\regsvr32 mscomctl.ocx
Выход
:64
%systemroot%\sysWOW64\regsvr32 /u mscomctl.ocx
%systemroot%\sysWOW64\regsvr32 mscomctl.ocx
Выход
Сохраните файл.
Измените расширение файла с .TXT на .BAT.
Запустите .BAT, щелкнув его правой кнопкой мыши и выбрав «Запуск от имени администратора» (пользователи XP могут просто дважды щелкнуть файл).
ПРИМЕЧАНИЕ. Вы можете удалить строку удаления reg из пакетного файла, если обнаружили, что вам не нужно удалять указанный выше раздел реестра, чтобы приложение было работать.
Элементы управления, связанные с MSCOMCTL. OCX перечислены в диалоговом окне «Вставка элемента управления ActiveX» следующим образом:
Элемент управления Microsoft ImageComboBox 6.0 (SP6)
Элемент управления Microsoft ImageList 6. 0 (SP6)
Элемент управления Microsoft ListView 6.0 (SP6)
Элемент управления Microsoft ProgressBar 6.0 (SP6)
Microsoft Slider Control 6.0 (SP6)
Элемент управления Microsoft StatusBar 6.0 (SP6)
Элемент управления Microsoft TabStrip 6.0 (SP6)
Элемент управления 6.0 (SP6) на панели инструментов Майкрософт
Элемент управления Microsoft TreeView 6.0 (SP6)
Примечание. Номер версии и уровень пакета обновления могут быть не «6.0 (SP6)».
Проблемы также возникают в других продуктах Office после добавления исправления, хотя симптомы могут отличаться от тех, которые видны в Access. Удаление раздела реестра, как указано выше, может не потребоваться для устранения проблем в таких случаях.
Дополнительные сведения об обновлении системы безопасности см. в следующих статьях базы знаний:
MS12-060: описание обновления системы безопасности для Office 2010: 14 августа 2012 г.
MS12-060: описание обновления системы безопасности для веб-компонентов Office 2003 и Office 2003: 14 августа 2012 г.
Дерево MSForms (все VBA)
Контент
- Введение
- MAC Офис и Совместимость с 64-битным офисом!
- Благодарности
- Авторское право и лицензирование
- Отказ от ответственности
- Пожертвования
- Скачать
- «Про» Дерево и элементы управления ListGrid VBA
- Содержание
- Прочие элементы управления
Введение
Если вы когда-либо использовали элемент управления Treeview из «Дополнительных элементов управления» раздел, то вы знаете, что это универсальный элемент управления, чтобы показать иерархически организованные данные. Есть несколько проблем с этим элементом управления Treeview:
- Ошибки компиляции из-за разницы в том, как библиотеки элементов управления зарегистрированы в 32-битной Windows System32 и 64-битной Windows SysWOW64 папки. Если вы распространяете файл, который был сохранен в 64-битной Windows, содержащий один из «Общих элементов управления Microsoft Windows 6. 0» (The Treeview control является одним из них) и со ссылкой, установленной на «mscomctl.ocx», у людей, использующих 32-битную Windows, почти наверняка будут проблемы. В в лучшем случае это может повлечь за собой удаление как контроля, так и ссылки и заменив оба, но в худшем случае Excel пользователя может рухнуть при попытке чтобы загрузить файл и запустить приложение.
- Стандартный элемент управления Treeview, как и все не встроенные элементы управления ActiveX, нельзя использовать в 64-разрядных версиях Office.
Особенно второй пункт убедил меня разработать заказной «Элемент управления» Treeview, который использует только собственные элементы управления форм Office. Несколько недель после того, как я начал строить это, я обманул Питера Торнтона помочь мне с этим.
На приведенном ниже снимке экрана показаны как наш новый Treeview (слева), так и окно Windows. один (справа) бок о бок в простейшем режиме отображения (читайте дальше, там еще более красивые скриншоты внизу страницы):
Два древовидных представления, слева: дерево VBA, справа: дерево общих элементов управления
На следующих страницах я покажу, что может делать наше древовидное представление, и объясню как использовать его в своем собственном проекте VBA.
MAC Office и 64-разрядная версия Совместимость с офисом!
Наш Treeview работает во всех версиях Excel, Access и Word; из офиса с 2007 по 2019 и 365, для Windows и Mac, 32-битные и 64-битные. Это также работает в некоторых более ранних версиях, хотя вам нужно будет адаптировать демо, сделанные для 2007 и позже.
Скриншот Windows:
Демонстрация Treeview в Windows Excel
Скриншот Mac:
Скриншот древовидного представления в Mac Excel 2011
Благодарности
Была разработана основная инфраструктура и структура кода этого древовидного управления мной. Однако без помощи моего друга и коллеги (бывшего) MVP Excel Питера Торнтона, многие функции не были бы доступны сейчас. За это я искренне спасибо Питер!
Кроме того, доступ к MVP Бен Клотье был добр достаточно, чтобы внести необходимые коррективы, чтобы включить древовидное представление в Форма доступа
Также: Fellow Excel MVP Рон Де Брюин удостоверился, что древовидное представление также работает в MAC Office 2011, спасибо, Рон!
Авторское право и лицензирование
Весь код в древовидной структуре (c) JKP Application Development Services и Питер Торнтон (авторы). Это остается нашей единственной интеллектуальной собственностью.
Тем не менее, мы предлагаем вам это дерево бесплатно. Вы получаете неограниченный лицензия для использования в любом проекте VBA, который вам нравится. Вы можете изменить любую часть кода по желанию.
Мы просим вас:
- Сохраняйте наши комментарии.
- Не удаляйте наши имена, URL-адреса или адреса электронной почты из кода.
- Присылайте нам свои похвалы и комментарии.
- Присылайте нам любые функциональные дополнения, которые вы вносите в древовидную структуру.
И, пожалуйста, укажите источник древовидной структуры (включая ссылку на этот страницу) в файле справки, руководстве и/или на экране «О программе».
Нам всегда интересно посмотреть, как люди реализовали VBA Treeview. Поэтому, пожалуйста, не стесняйтесь присылать скриншот с кратким описанием или соответствующим подробности.
Отказ от ответственности
Вы используете этот элемент управления на свой страх и риск: авторы не несут никакой ответственности независимо от любых убытков, которые могут возникнуть из-за использования нашего дерева.
Пожертвования
Много-много часов было потрачено на разработку этого дерева. Хотя мы разработали это для использования в наших собственных проектах, мы отдаем его бесплатно!
Тем не менее, мы были бы очень рады, если бы вы действительно выразили свое оценка в более «осязаемой» форме. Итак, вот кнопка пожертвования PayPal в вашем распоряжении:
Загрузить
Книга Excel содержит большую часть документации (на вкладки рабочей книги), поэтому я рекомендую вам хотя бы скачать Excel версия. Версия Access содержит инструкции на главной форме (щелкните значок «Как мне…?» кнопку) о том, как реализовать древовидную структуру в ваших собственных проектах.
Загрузите образец рабочей книги Excel в виде дерева (включая документацию) (сборка 026.5, 10 января 2023 г., скачано 46 411 раз)
Загрузите образец документа Word в виде дерева (сборка 026.5, 10 января 2023 г., скачано 15,143 раза)
Загрузите образец базы данных Access в виде дерева (сборка 026. 5, 10 января). 2023, загружено 37,947 раз)
Элементы управления VBA Treeview и ListGrid Pro
Если вашему проекту требуется больше функций и/или более высокая производительность, чем наше бесплатное древовидное представление, или если вам нужен элемент управления listgrid, вы пришли к тоже правильное место.
Профессиональная версия древовидного управления имеет исключительную производительность. Даже с десятками тысяч узлов он будет загружаться быстро и останется высоким. отзывчивый. Он также имеет несколько новых функций, включая перетаскивание. Сроки эксперименты показали, что профессиональная версия нашего древовидного представления превосходит общие элементы управления в виде дерева.
Наш новый ListGrid сочетает в себе большую часть функций ActiveX Listview и элементы управления Flexgrid со многими дополнительными полезными функциями. Это результат обширного бета-тестирования некоторыми из наших пользователей treeview, спасибо, ребята!
Скриншот демо ниже дает представление лишь о некоторых его возможностях.
Pro Treeview и ListGrid доступны для 32/64-разрядных версий Excel и Access. Версия Excel также будет работать на Mac, одна или две функции отключены. для Mac, но мы работаем над этим. В отличие от нашего бесплатного древовидного представления, они самостоятельны. содержащиеся в их собственных файлах и предназначенные для работы как настоящие элементы управления.
Для получения более подробной информации и если вы заинтересованы в пробной лицензии, чтобы попробовать любой из эти «элементы управления», пожалуйста, свяжитесь с нами:
Pro Деревообзор запрос
Pro Listgrid запрос
Обратите внимание, что профессиональные версии являются платными версиями. Доступные цены по запросу по ссылкам выше (файлы загрузки выше содержат документ Word, в котором также содержится более подробная информация об элементах управления Pro).
Содержание
- Особенности
- Как использовать
- Примеры
Прочие элементы управления
Другим часто используемым элементом управления является календарь. Этот контроль имеет дополнительная проблема заключается в том, что он устарел с Office 2010 (где мы предполагается использовать элемент управления выбора даты). Создана команда Frankens альтернатива all-vba, использующая методы, очень похожие на то, что мы сделали здесь.
Рон де Брюин создал Выбор даты управление для MAC Excel.
Обзор элемента управления TreeView — Windows Forms .NET Framework
Редактировать
Твиттер LinkedIn Фейсбук Электронная почта
- Статья
- 2 минуты на чтение
С помощью элемента управления Windows Forms TreeView можно отображать для пользователей иерархию узлов, подобно тому, как файлы и папки отображаются на левой панели функции проводника Windows в операционной системе Windows. Каждый узел в древовидном представлении может содержать другие узлы, называемые 9.0170 дочерних узлов . Вы можете отображать родительские узлы или узлы, содержащие дочерние узлы, в развернутом или свернутом виде. Вы также можете отобразить древовидное представление с флажками рядом с узлами, задав для свойства CheckBoxes древовидного представления значение true
. Затем вы можете программно выбрать или очистить узлы, задав для свойства Checked узла значение true
или false
.
Ключевые свойства
Ключевыми свойствами элемента управления TreeView являются узлы и выбранный узел. Свойство Nodes содержит список узлов верхнего уровня в древовидном представлении. Свойство SelectedNode устанавливает текущий выбранный узел. Вы можете отображать значки рядом с узлами. Элемент управления использует изображения из списка ImageList, указанного в свойстве ImageList древовидного представления. Свойство ImageIndex задает изображение по умолчанию для узлов в древовидном представлении.