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

Access 2007

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

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

1.Откройте запрос в Конструкторе.

2.Щелкните правой кнопкой мыши поле, в которое вы хотите вставить выражение, и выберите команду Построить (Build).

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

Условие отбора.

После выбора команды Построить на экране появляется окно Построителя выражений, отображающее текущее содержимое поля (рис. 7.3).

Рис. 7.3. Построитель выражений состоит из текстового поля в верхней части окна, в котором можноредактировать выражение, кнопок быстрой вставки знаков обычных операций (таких как +, -, / и *, если почему-либо вы не можете их найти на клавиатуре), и трехпанельного обозревателя в нижней части окна, который поможет найти нужные поля и функции

3.Вставьте или отредактируйте выражение.

УПостроителя выражений есть два ускоряющих приема работы, которые вы, может быть, захотите испробовать. Можно вставлять имя без ввода с клавиатуры (рис. 7.4) и можно найти функцию с помощью обзора (рис. 7.5).

Примечание

Построитель выражений — универсальное средство создания выражений в вычисляемых полях и условиях отбора. Некоторые параметры имеют смысл только в одном из его назначений. Логические операторы, такие как символ равенства (=), And, Or, Not и Like, удобны для задания условий фильтрации (см. разд. "Построение условий отбора" главы 6), но бесполезны в вычисляемых полях.

251

Рис. 7.4. Для вставки имени поля щелкните дважды кнопкой мыши папку Таблицы в самом левом списке. Затем щелкните мышью вложенную папку, соответствующую нужной вам таблице. И, наконец, дважды щелкните кнопкой мыши имя поля в среднем списке для добавления его в ваше выражение. Этот прием рекомендуется только тем, кто любит щелкать кнопкой мыши

Рис. 7.5. Для поиска функции начните с двойного щелчка кнопкой мыши папки Функции в левом списке. Затем выберите вложенную папку Встроенные функции. (Другие варианты отображают любые пользовательские функции, которые вы добавили в вашу БД с помощью пользовательского кода VBA.) Далее выберите категорию функции в среднем списке. В правом списке показаны все функции в выбранной категории. Вы можете дважды щелкнуть кнопкой мыши функцию для вставки ее в выражение

252

Примечание

Когда вы вставляете имена полей в Построителе выражений, они записываются в более длинном формате с обязательным указанием имени таблицы. Вы увидите [Products] ! [Price] вместо просто [Price]. He волнуйтесь — для программы Access это одно и то же.

4. Щелкните мышью кнопку ОК.

Программа Access скопирует ваше новое выражение в ячейку Поле или Условие отбора.

Примечание

Когда в Построителе выражений вставляется функция, программа добавляет заполнители (например, <number> и <precision>), на место которых нужно ввести аргументы. Замените этот текст нужными вам значениями.

Рис. 7.6. В справке функции Round () описываются ее назначение и два параметра. Второй параметр — количество знаков в дробной части — заключен в квадратные скобки, что означает необязательное значение. Пропустите его, и программа Access округлит значение до ближайшего целого числа. Слева приведен перечень функций, который позволяет просмотреть любую другую функцию Access и прочесть ее описание

253

Большинство специалистов Access считают Построитель выражений слишком тяжеловесным, чтобы использовать его в работе. Но несмотря на то, что это не самое эффективное средство написания выражений, построитель предоставляет прекрасный способ знакомства с новыми загадочными функциями, благодаря своей справке для встроенных функций. Если вы нашли функцию, которая кажется многообещающей, но хотите получить дополнительную информацию, выберите ее в списке и щелкните мышью кнопку Справка (Help). Вы будете вознаграждены кратким резюме, объясняющим назначение функции и описывающим ее параметры, которые нужно задать, как показано на рис. 7.6.

Форматирование чисел

Format ( ) — интересная математическая функция, преобразующая числа в текст. Она интересна, потому что создаваемый текст можно отформатировать несколькими способами, управляя, таким образом, представлением чисел.

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

SalePrice: [Price] * 0.95

Даже если у поля Price не Денежный тип, вычисленные значения в поле SalePrice (продажная цена) выводятся как обычные числа (без знака валюты, разделителя тысяч и т. д.). Вы увидите значение 43.2 вместо желаемого $43.20.

Решить эту проблему можно, применив функцию Format ( ) для задания денежного формата вывода:

SalePrice: Format([Price] / 0.95, "Currency")

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

Хитрость применения функции Format () состоит в выборе текста, задаваемого в качестве второго аргумента для получения желаемого результата. В табл. 7.2. приведены возможные варианты.

Таблица 7.2. Варианты форматирования

Формат

Описание

Пример

Денежный

Выводит число с двумя знаками в дробной части,

$1 433.20

 

разделителями для тысяч и знаком валюты

 

Фиксированный

Отображает число с двумя десятичными знаками

1433.20

 

 

 

Основной

Выводит на экран число с двумя десятичными знаками

1 433.20

 

и разделителями тысяч

 

 

 

 

Процентный

Отображает процентное значение (число, умноженное

143320.00%

 

на 100, и со знаком процента). Выводит две цифры

 

 

справа от десятичной точки

 

 

 

 

Экспоненциальный

Отображает число в научной нотации с двумя деся-

1.43Е+03

 

тичными знаками

 

 

 

 

254

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

Формат

Описание

Пример

Да/нет

Отображает Нет, если число равно 0, и Да, если число

Да

 

отлично от 0. Можно использовать аналогичные

 

 

типы формата Истина/Ложь и Вкл/Выкл

 

 

 

 

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

Истинные педанты не будут довольны вариантами, перечисленными в табл. 7.2. Им нужен полный контроль количества десятичных знаков в числе. Один из возможных вариантов — использовать функции FormatCurrency( ), FormatPercent ( ) и FormatNumber ( ) (в зависимости от необходимости вывода значения как денежного, процентного или обычного числового). В этих функциях в качестве первого аргумента задается число, которое нужно отформатировать, а в качестве второго — число десятичных знаков, которое нужно сохранить.

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

Дополнительные математические функции

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

Таблица 7.3. Функции для числовых данных

Функция

Описание

Пример

Результат

Sqr ( )

Извлекает квадратный корень

Sqr(9)

3

 

 

 

 

Abs()

Возвращает положительное значение

Abs(-6)

6

 

(отрицательные числа становятся положитель-

 

 

 

ными)

 

 

 

 

 

 

Round ()

Округляет число до заданного числа десятичных

Round(8.89, 1)

3.9

 

знаков

 

 

 

 

 

 

Fix ( )

Возвращает целую часть числа, отбрасывая

Fix(8 . 89)

8

 

любую дробную часть

 

 

Int( )

То же что функция Fix (), но отрицательные

Int( - 8 . 89)

-9

 

числа округляются до ближайшего меньшего

 

 

 

целого числа, а не большего

 

 

 

 

 

 

255

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

Функц

Описание

Пример

Результ

Rnd( )

Генерирует случайное

Int

Случа

 

дробное число в диапазоне

((6)

йное

Val ( )

Преобразует числовые

Val

315

 

данные в текстовом поле в

("315

 

 

настоящее число так, что

Crossl

 

Forma

Преобразует число в

Format(

$243.60

t( )

форматированную тексто-

243 .6 ,

 

Малоизвестная или недооцененная возможность. Использование случайных чисел для сортировки в случайном порядке

Функцией Rnd ( ) пользуются редко — в конце концов, кому нужны столбцы, заполненные искусственно сгенерированными данными? Однако инициативные гуру Access предложили одно интригующее применение для функции Rnd ( ). Они применяют ее для сортировки таблицы, таким образом, чтобы записи выводились в случайном порядке.

По существу вы добавляете вычисляемое поле, содержащее случайное число. Можно использовать в поле выражение, такое как Random: Rnd ( ). Если посмотреть результаты вашего запроса, то можно увидеть случайное значение в диапазоне от 0 до 1 (например, 0.7045, 0.2344 и т. д.) рядом с каждой записью.

Теперь вернитесь в Конструктор и сбросьте флажок Вывод на экран для того, чтобы поле Random не выводилось на лист данных. Далее выберите порядок в ячейке Сортировка по возрастанию или по убыванию (что на самом деле не имеет значения) и снова выполните запрос. Ву-а-ля! Каждое выполнение запроса выводит на экран записи в разном порядке, в соответствии со случайными числами, которые программа Access генерирует на лету.

Текстовые функции

Все функции, которые вы видели до этого момента, работали с числовыми данными. Но с текстом тоже можно делать многое. В целом есть три способа обработки текста.

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

Извлечение подстроки из текстовой строки. Может быть, вам потребуется первое слово из заголовка или первые 100 символов в описании.

Замена строчных букв прописными и наоборот. Возможно, вы захотите отобразить строчные буквы прописными или наоборот.

256

В табл. 7.4 перечислены функции, наиболее часто применяемые для обработки текста.

Таблица 7.4. Функции для работы с текстом

Функция

Описание

Пример

 

Результат

UCase( )

Выводит текст прописными буквами

UCase("Hi There")

HI THERE

 

 

 

 

LCase( )

Выводит тест строчными буквами

LCase("Hi There")

hi there

 

 

 

 

 

Left ( )

Выводит заданное вами число символов,

Left("Hi There",

2)

Hi

 

начиная от левого края строки

 

 

 

Right 0

Выводит заданное вами число символов,

Right ("Hi There", 5)

There

 

начиная от правого края строки

 

 

 

 

 

 

 

 

Mid ( )

Выводит часть строки, начиная с заданной

Mid ("Hi There",

4, 2)

Th

 

позиции, и заданное число символов

 

 

 

 

 

 

 

 

Trim ( )

Удаляет пробелы с обеих сторон (или

Trim(" Hi There

")

Hi There

 

используйте LTrim ( ) и RTrim( ) для

 

 

 

 

 

 

 

 

Len ( )

Подсчитывает количество символов в

Len("Hi There")

 

8

 

текстовой строке

 

 

 

С помощью этих функций вы можете создать вычисляемое поле, которое отображает фрагмент длинной текстовой строки или изменяет вид отображения (строчные или прописные буквы). Применение этих функций в условиях отбора не столь очевидно. Можно создать условие фильтрации, задающее совпадение с частью текстовой строки, а не со всей строкой. Далее приведен пример условия отбора, выбирающего записи, начинающиеся с "Choco": Left([ProductName], 5) = "Choco"

На рис. 7.7 показано, как ввести это условие отбора.

Функция Len ( ) — особый случай. Она проверяет текстовое значение и возвращает числовую информацию (в данном случае количество символов в строке, включая все пробелы, буквы, цифры и специальные символы). Эта функция не слишком полезна в простых вычисляемых выражениях, т. к. вас редко будет интересовать количество букв в текстовой строке. Но она позволяет создавать интересные условия отбора, включая, например, такое, которое отбирает все записи с полем Description короче 15 символов.

Len{Description) < 15

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

Функции обработки строк созданы с ориентацией на символы. Они умеют подсчитывать символы, но не понимают, что такое слово пли предложение.

257

Единственный способ обойти это ограничение — применить функцию Instr ( ), которая ищет один или несколько символов в текстовой строке. (Название Instr ( ) — это сокращение от "in string", поскольку вы ищите конкретные символы внутри текстовой строки.) Для поиска символов "he" с строке "Hi There" нужно применить функцию Instr ( ) следующим образом: Instr("Hi There", "he")

Результат равен 5, потому что текст "he" начинается с пятой символьной позиции. Если программа Access не находит совпадения, функция Instr ( ) возвращает 0. Если же есть множественные совпадения, Instr () возвращает позицию первого.

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

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

FirstWordProduct:

Left([ProductName], Instr([ProductName], " " - 1 ) )

Это выражение переводится следующим образом: "Найди позицию первого пробела, вычти единицу и извлеки все символы слева от пробела". Вычислите это поле для значения Banana Cream Fudge и вы получите вырезанный текст Banana, что выглядит как впечатляющий яркий трюк.

Рис. 7.7. Функции Left ( ), Right ( ) и Mid ( ) действуют во многом аналогично ключевому слову Like, помогая найти совпадения кусочков длинной текстовой строки

258

Функции для обработки дат

Вы уже видели, как можно использовать операции сложения и вычитания при работе с датами

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

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

Вот условие для выбора просроченных проектов: =<Date ( )

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

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

DatePart("m", [DatePlaced])=DatePart("m", Date())

And DatePart("yyyy", [DatePlaced])=DatePart("yyyy", Date ())

Это довольно длинное выражение на самом деле представляет собой комбинацию двух условий, соединенных ключевым словом And. Первое условие сравнивает номер месяца текущей даты с датой, хранящейся в поле DatePlaced:

DatePart("m", [DatePlaced])=DatePart ("m", Date( ))

Приведенное выражение устанавливает, что у обеих дат один и тот же календарный месяц, но вы должны также убедиться в том, что год у них тоже совпадает:

DatePart("yyyy", [DatePlaced])=DatePart("yyyy", Date ( ))

Сложность применения функции DatePart ( ) (и некоторых других функций для дат) заключается в понимании идеи компонентов, составляющих дату. Применяя символ m в функции DatePart ( ), вы получите номер месяца, а используя текст уууу, извлечете четерехсимвольный номер года. В табл. 7.5 приведены все возможные варианты.

Таблица 7.5. Компоненты даты

Компонент

Описание

Значение на 20 февраля, 2006 г. 1:30 РМ

уууу

Год в четырехсимвольном формате

2006

 

 

 

q

Квартал от 1 до 4

1

 

 

 

т

Месяц от 1 до 12

2

 

 

 

у

День в году, от 1 до 365 (обычно)

51

 

 

 

d

День в месяце от 1 до 31

20

w

День недели, от 1 до 7

2

259

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

Компонент

Описание

Значение на 20 февраля, 2006 г. 1:30 РМ

ww

Неделя в году, от 1 до 52

8

 

 

 

h

Час, от 1 до 24

13

 

 

 

n

Минута, от 1 до 60

30

 

 

 

s

Секунда, от 1 до 60

0

 

 

 

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

Используя функции для дат, всегда следует помнить о датах, содержащих информацию о времени. (Напоминаю, все даты могут содержать данные о времени суток. Но, выбирая подходящий формат для поля с датами, вы сообщаете программе Access о том, нужно ли отображать временной компонент даты и разрешать пользователям вводить его, как объясняется в разд. "Дата/время " главы 2. Чаще всего вы будете пользоваться форматом, скрывающим любую информацию о времени суток.)

Проблема: функция Date ( ) возвращает текущую дату со значением времени суток, равным 0. Другими словами, если текущая дата — 4 июля 2008 г., то функция Date ( ) возвращает первую секунду 4 июля 2008 г. — момент, когда часы показывают полночь (12:00 a.m.)

Если вы не храните значения времени суток, эта проблема не важна, поскольку у всех ваших дат время суток равно 0. Но что произойдет, если вы используете Полный формат даты (см. табл. 2.3) в поле DueDate, разрешающий пользователям вводить и дату, и время. Теперь у условия отбора =<Date ( ) несколько иной смысл — вы сообщаете Access о необходимости отобрать, как совпадающие, все поля с датами, наступившими до первой секунды текущего дня. Это условие не выберет запись со сроком платежа, назначенным на 16:00 текущего дня.

В данной ситуации, возможно, нужно изменить условие отбора на следующее: <(Date()+l)

Date () +1 — это завтра. Другими словами, это условие отбирает любые записи со сроком платежа, истекшим до первой секунды завтрашнего дня.

Между прочим, у программы Access есть функция Now (), возвращающая текущую дату и время. Таким образом, следующее условие фильтрации отбирает все записи, соответствующие текущему моменту (текущего дня) или любому моменту времени во все предшествующие дни:

=<Now( )

Компоненты дат применяются в нескольких функциях обработки дат, включая функции DatePart ( ), DateAdd ( ) и DateDiff ( ). В табл. 7.6 приведены эти и дополнительные полезные функции, относящиеся к датам.

260

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