Довідники. Частина 2., MS Office, Програмні керівництва, статті

Зазвичай довідкові таблиці служать джерелами даних для списків або полів зі списками. Але перш ніж перейти до створення форм – довідників, розглянемо спочатку варіанти організації цих списків без використання довідкових таблиць (див. форму Приклад 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


Випробуємо процедуру: розкриємо спочатку список, подивимося які там номери і введемо такий, якого там немає. При переході на нову запис або інший елемент форми з’явиться повідомлення з пропозицією завести нове значення списку. Скажімо «Так» – значення заведеться, скажімо немає – зітреться.


Переваги: не потрібні довідкові таблиці.


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


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

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*