(495) 925-0049, ITShop интернет-магазин 229-0436, Учебный Центр 925-0049
  Главная страница Карта сайта Контакты
Поиск
Вход
Регистрация
Рассылки сайта
 
 
 
 
 

Справочники. Часть 2.

Источник: Leader

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

Ссылка таблицы на саму себя (Пример1. Вариант1)

    Это самый простой способ организации справочника. Создаем форму «Адресат», цепляем к ней источник - таблицу «Адресат». Создаем поле со списком, источник которого - запрос к полю «Улица» из этой же таблицы. Запрос обязательно должен быть сгруппирован и в условии отбора необходимо исключить пустые стоки (Адресат.Улица = Is Not Null). Для обновления списка можно на свойство формы «После обновления» повесить Улица.Requery. Свойство «Ограничиться списком» должно быть «Нет». Иначе нельзя будет добавлять новые данные.

    Достоинства: простота реализации, не нужны справочные таблицы, весь программный код - одной строчкой.

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

    Впрочем, пробелы можно победить например так:

    Trim([Улица])

    а за неправильность ввода бить по рукам. К тому же, если в список заводятся например номера домов в виде чисел, то этот способ в принципе заслуживает внимания. Чтобы отличить число от текста можно воспользоваться например такой процедурой:

If Val(Дом) = 0 Then
    MsgBox "Не правильный формат данных!", vbCritical, "администратор"
    Дом = Null
End If

    Но в нашем примере я завел для номеров домов тип поля «Текст» - ведь номер может быть например 1/2 или кор. 3. Поэтому, с  домами разберемся по другому.

Добавление отсутствующего значение в список значений (Пример1. Вариант2)

    Для реализации этого способа мы используем в качестве источника данных списка - «Список значений». Основа этого способа - перехват события списка «Отсутствие в списке». Вот пример процедуры:

Private Sub Дом_NotInList(NewData As String, Response As Integer)
Dim ctl As Control    ' Возвращает объект Control, указывающий на поле со списком
    Set ctl = Me!Дом  ' Приглашение подтвердить ввод нового значения
    If MsgBox("Значение отсутствует в списке. Добавить?", vbOKCancel) = vbOK Then
    ' Значение аргумента "Response" определяет добавление в список
        Response = acDataErrAdded
    ' Добавляет значение аргумента "NewData" в источник строк
        ctl.RowSource = ctl.RowSource & ";" & NewData
    Else
    ' При нажатии кнопки "Отмена" подавляет вывод
    ' сообщения об ошибке и отменяет изменения
        Response = acDataErrContinue
        ctl.Undo
    End If
End Sub

    Испытаем процедуру: раскроем сначала список, посмотрим какие там номера и введем такой, которого там нет. При переходе на новую запись или другой элемент формы появится сообщение с предложением завести новое значение списка. Скажем «Да» - значение заведется, скажем нет - сотрется.

    Достоинства: не нужны справочные таблицы.

    Недостатки: новые данные в списке, увы, не сохраняются. То есть, если в список добавилось новое значение, то при закрытии формы оно исчезнет. Все потому, что список значений можно заполнять только в конструкторе форм (в примере список не заполняется, а просто контролу временно "подсовывается" новый источник строк). Однако такой способ может оказаться полезным, когда именно это и требуется: например в списке присутствуют стандартные значения, но требуется ввести не стандартное, причем не один раз, и чтобы все разы одинаково, а в справочную таблицу заносить новые данные по каким либо причинам не следует. Ситуация довольно странная, но при работе с базами данных случается и не такое.

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

Ссылки по теме

Файлы для загрузки


 Распечатать »
 Правила публикации »
  Написать редактору 
 Рекомендовать » Дата публикации: 05.03.2008 
 

Магазин программного обеспечения   WWW.ITSHOP.RU
Microsoft Office для дома и учебы 2019 (лицензия ESD)
Microsoft Office 365 Персональный 32-bit/x64. 1 ПК/MAC + 1 Планшет + 1 Телефон. Все языки. Подписка на 1 год.
Microsoft 365 Business Standard (corporate)
Microsoft Windows Professional 10, Электронный ключ
Microsoft 365 Business Basic (corporate)
 
Другие предложения...
 
Курсы обучения   WWW.ITSHOP.RU
 
Другие предложения...
 
Магазин сертификационных экзаменов   WWW.ITSHOP.RU
 
Другие предложения...
 
3D Принтеры | 3D Печать   WWW.ITSHOP.RU
 
Другие предложения...
 
Новости по теме
 
Рассылки Subscribe.ru
Информационные технологии: CASE, RAD, ERP, OLAP
Безопасность компьютерных сетей и защита информации
Новости ITShop.ru - ПО, книги, документация, курсы обучения
Программирование на Microsoft Access
CASE-технологии
Мастерская программиста
Работа в Windows и новости компании Microsoft
 
Статьи по теме
 
Новинки каталога Download
 
Исходники
 
Документация
 
 



    
rambler's top100 Rambler's Top100