Практические занятия для опытных пользователей. Улучшенные числовые форматы
Улучшенные числовые форматы
Истинные педанты не будут довольны вариантами, перечисленными в табл. 7.2. Им нужен полный контроль количества десятичных знаков в числе. Один из возможных вариантов — использовать функции FormatCurrency( ), FormatPercent ( ) и FormatNumber ( ) (в зависимости от необходимости вывода значения как денежного, процентного или обычного числового). В этих функциях в качестве первого аргумента задается число, которое нужно отформатировать, а в качестве второго — число десятичных знаков, которое нужно сохранить.
Для более полного контроля можно определить собственный формат, точно описывающий то, что вы хотите получить, и затем применить его в функции Format (). В данной книге не рассматриваются пользовательские числовые форматы, по вы можете посмотреть дополнительную информацию в справочной системе программы Access (см. рис. 7.6).
Дополнительные математические функции
Математическим функциям в программе Access не уделяется должного внимания, потому что потребность в них возникает крайне редко. Вы уже видели функции Round ( ) и Format ( ) — самые полезные в этой категории — но есть еще несколько других (табл. 7.3), к которым знатоки Access обращаются время от времени в вычисляемых полях.
Таблица 7.3. Функции для числовых данных
Функция | Описание | Пример | Результат |
Sqr ( ) | Извлекает квадратный корень | Sqr(9) | |
Abs() | Возвращает положительное значение (отрицательные числа становятся положительными) | Abs(-6) | |
Round () | Округляет число до заданного числа десятичных знаков | Round(8.89, 1) | 3.9 |
Fix ( ) | Возвращает целую часть числа, отбрасывая любую дробную часть | Fix(8.89) | |
Int( ) | То же что функция Fix(), но отрицательные числа округляются до ближайшего меньшего целого числа, а не большего | Int(-8.89) | -9 |
Таблица 7.3. (окончание)
Функция | Описание | Пример | Результат |
Rnd( ) | Генерирует случайное дробное число в диапазоне от 0 до 1 | Int ((6) * Rnd + 1) | Случайное целое от 1 до 6 |
Val ( ) | Преобразует числовые данные в текстовом поле в настоящее число так, что вы можете использовать его в вычислении. Останавливается, как только находит нецифровой символ, и возвращает 0, если не найдено ни одной цифры | Val ("315 Crossland St") | |
Format( ) | Преобразует число в форматированную текстовую строку в соответствии с выбранными вами параметрами | Format(243.6 , Currency) | $243.60 |
Малоизвестная или недооцененная возможность.
Использование случайных чисел для сортировки в случайном порядке
Функцией Rnd ( ) пользуются редко — в конце концов, кому нужны столбцы, заполненные искусственно сгенерированными данными? Однако инициативные гуру Access предложили одно интригующее применение для функции Rnd ( ). Они применяют ее для сортировки таблицы, таким образом, чтобы записи выводились в случайном порядке.
По существу вы добавляете вычисляемое поле, содержащее случайное число. Можно использовать вполе выражение, такое как Random: Rnd ( ). Если посмотреть результаты вашего запроса, то можно увидеть случайное значение в диапазоне от 0 до 1 (например, 0.7045, 0.2344 и т. д.) рядом с каждой записью.
Теперь вернитесь в Конструктор и сбросьте флажок Вывод на экрандля того, чтобы поле Randomне выводилось на лист данных. Далее выберите порядок в ячейке Сортировкапо возрастанию или по убыванию (что на самом деле не имеет значения) и снова выполните запрос. Ву-а-ля! Каждое выполнение запроса выводит на экран записи в разном порядке, в соответствии со случайными числами, которые программа Access генерирует на лету.
Текстовые функции
Все функции, которые вы видели до этого момента, работали с числовыми данными. Но с текстом тоже можно делать многое. В целом есть три способа обработки текста.
■ Слияние текста. Вы можете соединить несколько текстовых полей в одном. Для этого способа не нужна функция — достаточно оператора &, описанного в разд. "Выражения с текстовыми значениями "ранее в этой главе.
§Извлечение подстроки из текстовой строки. Может быть, вам потребуется первое слово из заголовка или первые 100 символов в описании.
■ Замена строчных букв прописными и наоборот. Возможно, вы захотите отобразить строчные буквы прописными или наоборот.
В табл. 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 ( ) | Удаляет пробелы с обеих сторон (или используйте LTrim ( ) и RTrim( ) для удаления пробелов только в начале или в конце строки) | Trim(" Hi There ") | Hi There |
Len ( ) | Подсчитывает количество символов в текстовой строке | Len("Hi There") |
С помощью этих функций вы можете создать вычисляемое поле, которое отображает фрагмент длинной текстовой строки или изменяет вид отображения (строчные или прописные буквы). Применение этих функций в условиях отбора не столь очевидно. Можно создать условие фильтрации, задающее совпадение с частью текстовой строки, а не со всей строкой. Далее приведен пример условия отбора, выбирающего записи, начинающиеся с "Choco": Left([ProductName], 5) = "Choco"
На рис. 7.7 показано, как ввести это условие отбора.
Функция Len ( ) — особый случай. Она проверяет текстовое значение и возвращает числовую информацию (в данном случае количество символов в строке, включая все пробелы, буквы, цифры и специальные символы). Эта функция не слишком полезна в простых вычисляемых выражениях, т. к. вас редко будет интересовать количество букв в текстовой строке. Но она позволяет создавать интересные условия отбора, включая, например, такое, которое отбирает все записи с полем Description короче 15 символов.
Len{Description) < 15