Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Access 2007

.pdf
Скачиваний:
115
Добавлен:
11.05.2015
Размер:
23.5 Mб
Скачать

10. Перейдите снова в Режим таблицы и щелкните мышью кнопку Да, когда программа Access предложит сохранить изменения. Теперь ваша маска ввода подготовлена.

Примечание

Программа Access использует информацию маски ввода для управления способом ввода данных в таблицу. Но маску можно перехитрить и ввести данные по-другому. Вы могли бы создать форму (как описано в части IV) и отключить маску. Маска не обеспечивает стопроцентной защиты от некорректных данных, если вам нужна полная гарантия, вместо маски нужно применять правило верификации (validation rule).

Создание собственной маски

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

Создать маску очень легко, но придется потратить немного времени, прежде чем вы добьетесь желаемого результата. У вас есть два основных варианта:

наберите или отредактируете маску непосредственно в поле свойства Маска ввода;

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

Влюбой маске есть три типа символов:

заполнители указывают вам, куда вводить символ;

специальные символы сообщают программе Access о способе интерпретации части маски;

литералы и любые другие символы служат элементами оформления, которое облегчает трактовку значения.

Впредыдущем примере маска номера телефона — !(999) 000-000. Символы 9 и 0 — заполнители: они указывают, куда вводить цифры номера телефона. Скобки, пробел и дефис — просто средства форматирования — литералы. И всего один специальный символ — восклицательный знак. Он сообщает Access о том, что символы должны вводиться в маску слева направо, стандартный и единственный имеющий смысл в случае телефонного номера вариант.

Для того чтобы разложить все по полочкам, обратите внимание на следующие таблицы, В табл. 4.2 приведены все заполнители, которые можно использовать в масках ввода. В табл. 4.3 перечислены другие специальные символы. Все остальное автоматически относится к литералам.

Таблица 4.2. Символы-заполнители для масок ввода

Символ

Описание

0

Обязательная цифра (от 0 до 9)

9

Необязательная цифра (от 0 до 9)

#

Необязательная цифра, знак плюс (+) или знак минус (—)

151

Таблица 4.2. (окончание)

Симво

Описание

L

Обязательная буква

 

 

?

Необязательная буква

 

 

А

Обязательные буква или цифра

а

Необязательные буква или цифра

 

 

&

Обязательный символ любого типа (включая буквы, цифры, знаки

 

пунктуации и т. д.)

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

Таблица 4.3. Специальные символы для масок ввода

Символ

Описание

!

Обозначает направление заполнения маски слева направо при вводе.

 

Это направление выбрано по умолчанию, поэтому данный символ не

 

требуется (но во встроенные маски он включен)

 

 

<

Преобразует все следующие за ним символы в строчные

>

Преобразует все следующие за ним символы в прописные

\

Указывает на то, что следующий символ надо интерпретировать как

 

литерал. Например, у символа # специальное назначение в масках.

 

Поэтому если вы хотите обычный символ # включить в маску, следует

 

ввести \#. Иногда этот символ применяется перед заполнителем, даже

 

когда он не нужен. Вы можете встретить маску телефонного номера,

 

содержащую последовательность \- вместо просто знака -. Оба эти

 

варианта равнозначны

 

 

Пароль

Создает поле пароля. Любой символ, который вы вводите в поле,

(Password)

хранится как символ, но отображается как звездочка (*). С помощью

 

варианта можно вставить в маску и что-то другое

 

 

Далее приведено несколько примеров масок, чтобы помочь вам взяться за дело.

(000) 000-000. В телефонный номер обязательно должны быть включены цифры междугороднего кода. Эта маска отличается от маски телефонного номера предлагаемой Мастером создания масок. В последней первые три 0 заменены 9, что делает междугородний код необязательным.

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

L0L 0L0. Британский или канадский почтовый код, который формируется из шести символов с чередованием букв и цифр, например, M6S ЗН2.

99:00:00 >LL. Маска для ввода времени в поле типа Дата/время. Она формируется из двух цифр для часов и двух цифр для минут. Последние два символа (благодаря наличию символа >) всегда отображаются как прописные и предназначены для обозначения половины суток AM или РМ. (Технически эта маска не препятствует вводу в эти позиции других символов. Но если вы введете время, такое как 12:30 GM, программа Access

152

пожалуется на то, что не может преобразовать ваше значение в тип данных Дата/время, как того требует поле.)

■099.099.099.099. IP-адрес, идентифицирующий компьютер в сети. Он записан как четыре значения, разделенные точками. В каждой части адреса должна быть, как минимум, одна цифра, а как максимум — три. Такой шаблон в маске отображается комбинацией 099 (одна обязательная цифра, за которой следуют две необязательные).

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

Маски могут заканчиваться двумя необязательными элементами, разделенными точкой с запятой (;).

Вторая составляющая маски — число, сообщающее программе Access, должна ли она сохранять литеральные символы маски в записи БД. (Это последний вопрос, который задает Мастер создания масок.) Если этот фрагмент маски пропустить или использовать цифру 1, Access сохраняет только символы, которые вводит пользователь. Если же вы примените цифру 0, программа сохранит весь текст вместе с литералами.

В третьей составляющей маски содержится символ-заполнитель. Если этот компонент маски пропустить, программа Access применяет знакомый знак подчеркивания.

Далее приведена маска, в которую включены оба дополнительных компонента: (000) 000-000;1;#

Во второй части стоит 1, а в третей — #. Маска предназначена для ввода телефонных номеров

исохранения их в БД вместе с литералами маски (в данном случае двумя скобками, пробелом

идефисом), в ней вместо знака подчеркивания в качестве заполнителя используется знак номера

(#).

Рис. 4.13. Для добавления вашей собственной маски используйте кнопки переходов между записями (расположенные у нижнего края этого окна) для перехода в конец. Это окно можно использовать и для изменения маски. Например, встроенная маска телефонного номера не требует обязательного включения междугороднего кода. Если это свобода, которой вы не хотите пользоваться, замените маску более строгой версией (000) 000-0000

153

Практические занятия для опытных пользователей. Вставка вашей маски в список масок программы

Иногда удается создать маску, которая невероятно полезна, и хочется ее использовать в разных таблицах вашей БД (а может быть, и в разных БД). Несмотря па то, что можно скопировать маску в каждое поле, которое нуждается в ней, у программы Access есть более удачное средство — можно хранить вашу маску в списке масок программы. В этом случае маска будет появляться, как только вы запустите Мастер создания масок, рядом с другими стандартными масками ввода программы Access.

Для вставки маски в список перейдите к свойству поля Маска ввода (любого поля) и щелкните мышью кнопку со скругленными углами для запуска Мастера создания масок. Затем щелкните мышью кнопку Список (Edit List), раскрывающую удобное окно, в котором можно редактировать маски, предоставляемые Access, и вставить собственную (рис. 4.13).

Правила верификации или условия на значения

Маски ввода — замечательное средство, но они применяются лишь с информацией нескольких определенных типов, обычно с тестом фиксированной длины, имеющим единственный неизменный шаблон. Для создания действительно "пуленепробиваемой" таблицы следует применять более сложные ограничения, такие как гарантия попадания числа в определенный диапазон, проверка еще не наступивших дат или первой буквы текста. Правила верификации или условия на значения могут помочь вам сформировать все эти ограничения, используя всю мощь языка SQL (Structured Query Language, язык структурированных запросов).

Примечание

Более полное введение в язык SQL начнется с главы 6. К счастью, для написания правила верификации вам понадобится лишь частичка SQL. Ключевая составляющая правила — выражение проверки правильности данных (validation expression) вы увидите несколько практических примеров таких выражений, которые можно сразу поместить в ваши таблицы.

Суть правила верификации проста. Вы задаете ограничение, сообщающее программе Access, какие значения разрешены в поле, а какие нельзя считать правильными. Когда кто-нибудь добавляет новую запись или редактирует имеющуюся, Access проверяет, удовлетворяют ли данные вашим условиям на значения. Если нет, программа выводит сообщение об ошибке и заставляет вас откорректировать ошибочные данные и попробовать еще раз.

Применение условия на значение поля

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

154

Для вставки вашего условия на значение выполните следующие действия.

1.В Конструкторе выберите поле, к которому хотите применить условие.

Данные всех типов, кроме Поле MEMO, Счетчик и Объект OLE, поддерживают условие на значение. В данном примере правило верификации обрабатывает числовые данные

(Числового или Денежного типа).

2.В свойстве поля Условие на значение (Validation Rule) введите проверочное выражение (рис. 4.14).

Выражение представляет собой фрагмент на языке SQL, выполняющий проверку введенных вами данных. Программа Access проверяет данные на значение, когда вы ввели порцию данных и собираетесь переходить к другому полю или другой записи. Например, условие >0

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

Рис. 4.14. В данном примере свойство Условие на значение препятствует вводу недопустимых цен, а свойство Сообщение об ошибке содержит текст сообщения

3.Введите текст сообщения в свойство поля Сообщение об ошибке (Validation Text).

Если вы введете значение, не прошедшее проверку, программа Access отвергнет его и выведет этот текст сообщения об ошибке в диалоговом окне. Если вы не предложите никакого текста, программа отобразит условие на значение для данного поля (которое вы ввели в пункте 2), что вызывает у простых смертных нечто большее, чем легкое недоумение.

4.Щелкните правой кнопкой мыши заголовок вкладки и выберите Режим таблицы.

Если в вашей таблице есть записи, программа Access дает вам возможность проверить их на соответствие заданному правилу верификации. Вам решать — выполнить такую проверку или полностью пропустить ее.

155

После перехода в Режим таблицы вы готовы к тестированию вашего условия на значение (рис. 4.15).

Рис. 4.15. В данном примере условие на значение >0 препятствует вводу отрицательных чисел в поле Price. Когда вы вводите отрицательное число, Access выводит окно сообщения с текстом об ошибке, который вы задали ("You didn’t get this for free, did you?" — "Вы ведь не получили ее даром, не так ли?"). После щелчка мышью по кнопке ОК вы возвращаетесь в поле, которое остается в режиме редактирования. У вас есть возможность изменить значение на положительное или нажать клавишу <Esc> для отказа от вставки или редактирования записи

Примечание

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

Запись условия на значение поля

Как видите, применять условие на значение к полю достаточно легко. Но формирование правила требует больших умственных усилий. Для получения желаемого результата вы должны сделать первый шаг в порой причудливый мир языка SQL.

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

156

Примечание

Программа Access применяет правило верификации, только если в поле есть данные. Если поле остается пустым, программа принимает его без всякой проверки. Если вам не нравится такой подход, задайте в свойстве Обязательное поле значение Да, чтобы добиться обязательного заполнения поля, как описано в разд. "Запрет незаполненных полей" ранее в этой главе.

Проверка допустимости числовых значений

Для числовых данных самый распространенный вариант проверки — принадлежность введенного значения определенному диапазону. Другими словами, вы проверяете, больше или меньше введенное число другого значения. Ваши инструменты в этом случае — знаки операций сравнения < и >. В табл. 4.4 приведено несколько часто используемых примеров.

Таблица 4.4. Условия на значение для чисел

Сравнение

Пример условия

Описание

Меньше чем

<100

Значение должно быть меньше 100

 

 

 

Больше чем

>0

Значение должно быть больше 0

Не равно

< >42

Значение может быть любым, но не равным 42

 

 

 

Меньше или

<=100

Значение должно быть не больше 100

равно

 

 

 

 

 

Больше или

 

Значение должно быть не меньше 0

равно

 

 

 

 

 

Равно

=42

Значение должно быть 42. (Много ли смысла в

 

 

необходимости ввода этого значения кем-то?)

Между

Between 0 and 100

Значение должно быть 0,100 или любое

 

 

промежуточное значение

 

 

 

Проверка допустимости дат

Как и в случае числовых данных, проверка допустимости дат, как правило, включает проверку принадлежности даты определенному диапазону. Ваша задача — убедиться в том, что у вашей даты формат, подходящий для условия на значение. Если вы используете условие >Jan 30, 2007 (> 30 Янв, 2007), программа Access приходит в крайнее замешательство, т. к. не понимает, что текст (Jan 30, 2 007) предназначается для представления даты. Точно так же, если вы проверяете условие >1/30/07, Access предполагает, что числа справа от знака сравнения — часть выражения с последовательными операциями деления.

Для решения этой проблемы используйте универсальную синтаксическую форму представления дат программы Access, которая выглядит следующим образом: #1/30/2007#

В универсальную синтаксическую запись для представления дат компоненты включаются в порядке месяц/день/год и обрамляются с обеих сторон символами #. С помощью этого синтаксиса вы можете использовать условие, такое как >#1/30/2007#, требующее, чтобы

157

вводимая дата была больше (наступала позже), чем January 30, 2007 (30 января 2007 January 31, 2007 отвечает данному требованию, а любая дата в 2006 г. — нет.

Универсальная синтаксическая запись может включать и время, например: #1/30/2007 5:30РМ#

Примечание

При сравнении двух дат программа Access принимает во внимание сведения о времени. Дата #1/30/2007# не содержит данных о времени, поэтому она интерпретируется как наступившая в самую первую секунду суток. В результате Access считает, что значение #1/30/2007 8:00 АМ# больше, поскольку наступает на 8 часов позже.

Теперь, зная об универсальной синтаксической записи для дат, вы можете использовать любые операции сравнения, которые применяются для сравнения чисел. Можно применять и следующие удобные функции для получения информации о текущих дате и времени:

Date ( ) — вычисляет текущую дату (без какой-либо информации о времени, поэтому она вычисляется как первая секунда текущего дня);

Now ( ) — вычисляет текущий момент времени, включая дату и время.

Примечание

Функция — это встроенная процедура, выполняющая какую -либо задачу, например считывание текущей даты с компьютерных часов. В разд. "Функции для обработки дат" главы 7 вы познакомитесь со многими функциями обработки дат, которые позволят вам выполнить более сложные задачи, например, определять день недели для конкретной даты.

В табл. 4.5 приведено несколько примеров.

Таблица 4.5. Условия на значения для дат

Сравнение

Пример условия

 

Описание

Меньше чем

<#1/30/2007#

 

Дата до 30 января 2007 г.

 

 

 

 

Больше чем

>#1/30/2007 5:30

РМ#

Любая дата после 30 января 2007 г., или

 

 

 

30 января 2007 г. после 17:30

 

 

 

 

Меньше или равна

<=#1/30/2007#

 

Дата до 30 января 2007 г. или первая

 

 

 

секунда 30 января 2007 г.

Больше или равна

>=#1/30/2007#

 

30 января 2007 г. или любая более позд-

 

 

 

няя дата

Больше текущей

>Date()

 

Сегодня или более поздняя дата

даты

 

 

 

 

 

 

 

Меньше текущей

<Date()

 

Вчера или более ранняя дата

даты

 

 

 

Больше текущей

>Now()

 

Сегодня после текущего времени или

даты (и времени)

 

 

любая дата в будущем

 

 

 

 

Меньше текущей

<Now ()

 

Сегодня до настоящего момента или

даты (и времени)

 

 

любая дата в прошлом

 

 

 

 

158

Проверка допустимости текста

В случае текста условие на значение позволяет задать начальный или конечный символ текста или наличие определенных символов в строке. Все эти задачи решаются с помощью оператора Like, сравнивающего введенный текст с образцом.

Следующее условие требует начинать поле с буквы "R": Like "R*"

Звездочка обозначает отсутствие символов или присутствие нескольких символов. Таким образом, полное условие заставляет программу Access проверять, начинается ли строка с буквы "R" (или "r"), за которой могут следовать символы или нет.

Очень похожее условие можно применять для проверки завершающих символов фрагмента текста:

Like "*ed"

Это условие считает корректными значения talked, walked и 34z%($)#ed и не пропускает значения talking, walkable или 34z%($)#.

Не столь распространенный прием — использование нескольких звездочек. В следующем выражении требуется наличие букв "а" и "b" (именно в таком порядке, но не обязательно сразу друг за другом) в любом месте строки текста:

Like "*а*b*"

Наряду со звездочкой в операторе Like могут использоваться и некоторые другие символы. Можно применять ?, соответствующий единичному символу, что очень удобно, если известна длина текста или позиция определенной буквы в тексте. Далее приведено условие на значение для восьмисимвольного кода изделия, заканчивающегося 0ZB:

Like "?????0ZB"

У символа # аналогичная роль, но он представляет цифру. Таким образом, следующее правило верификации определяет код изделия, заканчивающийся комбинацией символов 0ZB, которой предшествует пять цифр:

Like "#####0ZB"

И наконец, вы можете ограничить значение любого символа набором определенных букв или символов. Для этого нужно заключить допустимые символы в квадратные скобки.

Предположим, что ваша компания использует восьмисимвольный код изделия, который

всегда начинается с "А" или "Е". Далее приведено необходимое условие на значение: Like "[АЕ]???????"

Обратите внимание на то, что фрагмент [АЕ] представляет один символ, который может принимать значение А или Е. Если вы хотите разрешить символы А, В, С, D, следует написать в условии [ABCD] или воспользоваться удобной сокращенной формой [A-D], означающей разрешение любого символа от А до D, включая А и D.

Далее приведено условие на значение, разрешающее ввод семибуквенного слова и запрещающего цифры и другие символы. Оно формируется семикратным повторением кода [A- Z] (который разрешает любую букву).

Like [A-Z] [A-Z] [A-Z] [A-Z] [A-Z] [A-Z] [A-Z]

159

Как видите, условия на текстовые значения не всегда приятны для глаз. Они не только могут разрастаться до неимоверных размеров, но и не могут задать многих ограничений. Например, невозможно задать допустимое изменение длины текста между заданными максимумом и минимумом. Невозможно также различать строчные и прописные буквы.

Примечание

Множество подобных ограничений можно обойти, применяя некоторые функции, предоставляемые программой Access. В разд. "Текстовые функции" главы 7 вы узнаете, как с помощью функций вырезать фрагменты текста, проверять длину строки, использовать прописные буквы в тексте и многое другое.

Комбинирование условий на значения

Независимо от типа данных вы можете комбинировать ваши условия двумя способами. Используя ключевое слово And, можно создать правило верификации, содержащее два условия. Этот прием очень полезен, т. к. у поля может быть только одно условие на значение.

Для использования ключевого слова And просто запишите два правила верификации и вставьте между ними слово And. Неважно, какое правило вы укажете первым. Далее приведено условие на значение даты, которая должна была наступить до текущей даты, но после 1 января 2000 г.:

<Date( ) And >#l/l/2000#

Можно также использовать ключевое слово Or для принятия значения, удовлетворяющего одному из условий. В следующем правиле разрешены числа, большие 1000 или меньшие1000:

>1000 Or < -1000

Создание условия на значение для таблицы

Условия на значения всегда применяются к отдельному полю. Но проектировщики БД часто нуждаются в средствах сравнения значений разных полей. Предположим, что у вас есть таблица Orders (заказы), в которой регистрируются покупки в вашем магазине по продаже фирменных носков с монограммой. В таблице Orders вы используете два поля: DateOrdered (дата заказа) и DateShipped (дата доставки). Для того чтобы все было как следует, необходимо, чтобы дата из поля DateOrdered была более ранней, чем дата из поля DateShipped. Помимо всего прочего, как доставить изделие, прежде чем кто-то его закажет?

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

Далее приведен алгоритм создания условия на значение для таблицы.

1. В Конструкторе выберите на ленте Работа с таблицами | Конструктор Показать или скрыть Страница свойств (Table Tools | Design → Show/Hide → Property Sheet).

Справа в окне программы появляется страница с дополнительными параметрами (рис. 4.16).

160

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]