Каталог Статей
64071 авторов, размещено 45263 статей, сейчас на сайте пользователей: 21 Статистика
Аватар Palarm

Ускоренное создание справочников в Access

Категория:  ПО и игры  | Автор:  Palarm | Опубликовано: 12.04.2007

Многоуровневые справочники.

   Для создания подобного рода справочников потребуется немного другая структура базы данных. Ведь как уже говорилось, подобные справочники создают для облегчения выбора значения из списка с большим количеством записей, которые фильтруются по выбранному значению (параметру) в другом списке. А это значит, что потребуется связать две справочные таблицы, организовав из них составной справочник.

    В предыдущей главе предлагалось вместо создания множества однотипных справочников сделать один макет справочной формы и цеплять к нему источник данных при запуске. Но можно углубиться еще дальше. Воспользуемся идеей, которую предложил Валерий Крук – сделаем одну справочную таблицу и будем хранить в ней данные всех справочников. Для этого потребуется еще одно поле – идентификатор «справочной таблицы», чтобы определить, к какому справочнику относится данная запись. А для реализации двухуровнего справочника создадим вторую таблицу, в которой будут храниться связанные с первой таблицей записи.

Имя таблицы

Имя поля

Тип поля

СПРАВОЧНИК

id

счетчик

Name

Текстовое

Type

Длинное целое

СПРАВОЧНИК Sub

id

счетчик

id1

Длинное целое

Name

Текстовое

    При установке связей между таблицами СПРАВОЧНИК и СПРАВОЧНИК Sub установим флажок «Каскадное удаление связанных записей» - это как раз тот случай, когда такая процедура будет полезной. Ведь при удалении записи из таблицы «СПРАВОЧНИК» связанные с ней данные становятся не нужными.

    Если Вы откроете схему данных, то увидите только две связанные между собой справочные таблицы. В предыдущем примере к основной таблице «Адресат» были привязаны все справочники, и я еще подробно рассказывал о связях, флажках… Дело в том, что при данной схеме организации справочной системы мы не сможем прицепить таблицу «СПРАВОЧНИК» к какому либо полю, ведь в ней теперь хранятся все справочные данные. Да в этом и нет надобности. Если учесть, что пользователь будет работать с базой исключительно через формы, то вероятность ввода в основную таблицу записей, которых нет в справочной, сводиться практически к нулю.

    Параметры справочников хранятся в служебной таблице tSystemFormPar. В поле Tabl указан идентификатор соответствующего справочника.
Рассмотрим отличия от предыдущего варианта.

    Все глобальные переменные и константы я перенес в специальный модуль, который так и называется Constants. Хотя объявлять их можно в любом модуле, главное, чтобы они были в разделе General и начинались с ключевого слова Public, но лучше хранить их для наглядности в одном месте.

    В модуль SprawForm добавилась новая функция – fFilListBox. Она во многом похожа на fFilForm, но служит для фильтрации списка, поэтому в параметрах вместо frm As Form поставлено lst As ListBox. Кроме этого, в обеих функциях изменена строка формирования фильтра:

strFiltr = " WHERE Left([" & strFieldName & "]," & Len(strFiltr) & ") = '" & strFiltr & "'" & " and СПРАВОЧНИК.Type = " & strTableName

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

RecordSource = strSql1 & strFiltr & " " & strSql2

то для списка нужно использовать свойство RowSource

RowSource = strSql & strFiltr & " " & strSql1

    Добавилась функция удаления записей – sDeleteRecord. Пользовательская функция нужна для перехвата события удаления. Теперь посмотрим, что изменилось в модулях форм.

    В модуле формы «Справочник» добавилось условие отбора по полю Type таблицы СПРАВОЧНИК

Me.Subfrm.Form.RecordSource = strSql2 & " WHERE СПРАВОЧНИК.Type = " & strTableName & strSql3

и появилось новое – присвоение полю Type значения по умолчанию, равное текущему значению переменной strTableName

Me.Subfrm.Form!Type.DefaultValue = " & strTableName

    Ведь если этого не сделать, то запись в таблице СПРАВОЧНИК окажется не привязанной к текущему типу справочника.

    В модуле формы двухуровневого справочника «СправочникМ» видим, что формируются две пары строк – источников данных: strSql, strSql1 – для списка и strSql2, strSql3 – для табличной формы. Строки разбиты на пары потому, что между ними нужно будет вставлять условие отбора (WHERE…) Чтобы новое введенное значение в поле формы тут же отображалось в списке, служит процедура

Private Sub Fld_AfterUpdate()
    DoCmd.RunCommand acCmdSaveRecord
    Me.ListB.RowSource = strSql & " WHERE СПРАВОЧНИК.Type = " & strTableName & strSql1
End Sub

А для навигации по форме (поиску нужной записи) используем

Private Sub ListB_AfterUpdate()
Dim rs As Object
    Set rs = Me.Recordset.Clone
    rs.FindFirst "[id] = " & Str(Nz(Me![ListB], 0))
    If Not rs.EOF Then Me.Bookmark = rs.Bookmark
End Sub

    Чтобы исключить возможность ввода в табличную форму (источник - СПРАВОЧНИК Sub) записей, не связанных с основной формой (источник - СПРАВОЧНИК) служит процедура, которая выводит соответствующее сообщение при подобной попытке и блокирует ее:

Private Sub Subfrm_Enter()
    If flgDeleteRecord = False Then
    
    If IsNull([id]) Then
        
    MsgBox "Сначала нужно завести основные данные!", vbCritical, NomWers
            Fld.SetFocus
    
    End If
    End If
End Sub

    Раз на форме появилось второе поле фильтра, появилась соответствующая процедура фильтрации по этому полю

Private Sub П2_Change()
    strFiltr = Me.П2.Text
    Set idField = Me.П2
    Call fFilForm(strFiltr, strSql2, strSql3, Me.Subfrm.Form, "Name")
End Sub

    Подобный вариант организации справочной системы – с использованием общих таблиц для разных справочников, позволяет не только значительно упрощать создание справочников (для этого достаточно заполнить соответствующим образом таблицу tSystemFormPar), но так же уменьшает размер базы за счет меньшего количества форм и таблиц.

А теперь можете поэкспериментировать, создавая разного вида справочники - простые и двухуровневые.


Пример для данной статьи Вы можете скачать здесь…
Комментарии
К этой статье пока нет комментариев. Станьте первым! У нас гости не могут комментировать статьи. Пожалуйста авторизуйтесь или зарегистрируйтесь, чтобы прокомментировать.
Интересные статьи по теме
Аватар fly_e135
Настройка телефона Fly Мобильные телефоны есть почти у каждого в нашей стране,да и в мире тоже! Телефон - это сложный механизм, к которому нужно относиться бережно и тогда он будет служить долго. Прежде чем начать использов...
Категория: ПО и игры | Автор: fly_e135 | Добавлено: 25.11.2010
Аватар Excelskype
Excel – то, что нужно знать и уметь всем! Восемь самых востребованных возможностей программы Excel.Это необходимый минимум, которым должен владеть каждый, кто ежедневно использует Excel.Используй эти приемы, чтобы повысить эффективность своей...
Категория: ПО и игры | Автор: Excelskype | Добавлено: 05.04.2015
Аватар deusmaster
Расчет кубатуры круглого леса Облегчить и ускорить расчет кубатуры леса поможет программа кубатурник...
Категория: ПО и игры | Автор: deusmaster | Добавлено: 20.05.2010
Аватар Anastasya
DVD-Audio авторинг с помощью DigiOnAudio2 Pro. Часть I Методология DVD-Audio авторинга в программе DigiOnAudio2 Pro. Детально рассмотрена технология создания навигации для DVD-Audio, от инсталляции DigiOnAudio2 Pro до записи проекта на лазерный диск....
Категория: ПО и игры | Автор: Anastasya | Добавлено: 17.02.2010
Аватар dimetra2008
Безопасность в 1С Предприятие 8 В данной статье будут рассмотрены вопросы безопасности информационных систем, работающих под управлением 1С:Предприятия 8.1 в клиент-серверном варианте с использованием СУБД MS SQL Server....
Категория: ПО и игры | Автор: dimetra2008 | Добавлено: 16.03.2011
Рекомендуем
Собственный мощный VPN сервер за $5/мес. Простота настройки. Скидка для наших пользователей 25% по коду KATALOGPROMO.
Интернет должен быть свободным!
ПОПРОБОВАТЬ >>
Лучшие авторы
Аватар Yurlana
нутрициолог, косметолог. Опыт работы с БАДами и ом...

Читать

Аватар AKTM
Наши проекты были награждены:
2003 г. – 2-я пре...

Читать

Аватар Ave
Ave
Мне двадцать лет и я бородат.

Читать

Аватар Leema
Вплотную занимаюсь проектом BIRRA.RU,именно с него...

Читать

Аватар vladstraychenko
редставьте себе, что жизнь – это игра, построенная...

Читать

Свежие комментарии
Если Будут какие-то вопросы, то задавайте не стесняйтесь.

Читать

Отличный вариант если нужно дорожка домой. Если вы как и антисоциальны...

Читать

Я уже три года покупаю пластиковые фасады. делаю из них кухни на заказ...

Читать

Судя по текущей панической реакции людей на коронавирус: человек - эт...

Читать

Я пользуюсь гомеопатией, но не простой, не фикцией какой либо, а компл...

Читать

Напишите нам