2017-02-14 20 views
0

Мне нужно настроить и управлять многоступенчатой ​​структурой контура уровня для управления требованиями в Microsoft Access 2013.Реализовать структуру очертить многоуровневую

  • контур должен работать так же, как слово наброски, где каждая запись может иметь только 1 родитель, но может иметь 1 или более братьев и сестер (порядок братьев и сестер имеет значение) и 0 для многих детей.
  • Необходимо поддерживать как можно больше уровней контуров, текущие данные превышают 15 уровней, но при необходимости уменьшаются.
  • должны быть в состоянии определить, имеет ли запись детей, имеет родных братьев и их родителей.
  • должен иметь возможность удалять всех детей записи при удалении записи.
  • необходимо иметь возможность добавлять новые записи либо после записи, либо после записи в структуре контура
  • необходимо изменить нумерацию контура при добавлении, удалении, копировании и перемещениях в структуре контура.

Текущий подход - это таблица, которая содержит уникальный идентификатор, 15 числовых полей для каждого отдельного уровня # контура # и использование своего рода числовых полей для упорядочивания в контурный порядок.

работает на несколько вопрос, связанный с этой ситуацией:

  1. является ли это лучшим структура данных подход, или я должен двигаться очертить данные в отдельную таблицу?
  2. Учитывая, что я в запросе с сортировкой порядка контура, могу ли я написать функцию VBA в качестве вычисленного столбца, чтобы определить родителя записи, если у него есть братья и сестры, и если у него есть дети.
  3. Возможно ли практическое выполнение выбора sql в vba для запроса одной и той же таблицы/запроса. Я получаю родительский учет, дочерние элементы, братья и сестры, в качестве вычисленного столбца?
  4. можно использовать триггеры данных для поддержки любого управления этой структурой структуры.

Пример структуры контура: 1 1.1 1.1.1 1.1.2 1.1.2.1 1.1.2.2 1.1.3 2 2.1 2.2 2.3 2.3.1 2.3.1.1 2.3.1.1.1

ответ

0

Это не будет тривиальна в Access. Для максимальной гибкости в количестве уровней я бы не использовал отдельные поля для номеров уровней, но вместо этого имел бы таблицу саморегуляции с идентификаторами столбцов, NodeNumber, OutlineNumber, ParentID (NodeNumber был бы единственным числом, указывающим, данный родитель - 1, 2, 3 - и OutlineNumber будет полной ссылкой для этой записи - 1.2.1, 1.2.2, 1.2.3). Вы должны использовать ParentID для идентификации родителя записи; запрашивать все записи с тем же ParentID, чтобы найти братьев и сестер; записи запроса, где идентификатор ParentID = текущая запись для поиска детей. Вам нужно будет написать серьезный код VBA для управления вставками, обновлениями и удалениями, и определенно не позволяйте людям добавлять данные вручную в таблицу. К сожалению, Access не имеет триггеров данных.

[EDIT] Видимо, я ошибаюсь! Доступ имеет эквивалент функциональности «триггер» SQL-Server под названием data macro, но я никогда не использовал его. Может быть, это может вам помочь?

+0

Спасибо за информацию, я согласен, что это далеко не тривиально. Я видел подход, подобный тому, что вы описали, используемого в инструменте с открытым исходным кодом, который мы также используем. К сожалению, этот инструмент имеет репутацию для поврежденных структур структуры, на самом деле мне уже пришлось найти и исправить 2 ошибки с его кодом, связанным с этим.Это не делает недействительной концепцию, но иллюстрирует, насколько сложно управлять этим типом структуры. К сожалению, ограничения, с которыми я работаю в рамках этого проекта, заставили нас не пытаться управлять структурой структуры, но оставлять это в руках пользователей. – Warden