Файл: Освой самостоятельно программирование для MS Access 2002 за 24 часа [П.Киммел].pdf

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 21.10.2020

Просмотров: 7944

Скачиваний: 25

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
background image

6: P = InStr(

 P +

 1,

 vbTextCompare )

7: If (P = 0) Then Exit Do
8:

 & SEARCH_FOR &

 найдено на

 & P

 Loop

10: End Sub

В порядке напоминания отметим: строка 5 содержит заголовок беско-

нечного цикла, а в строке 7 осуществляется принудительный выход из
него в случае отрицательного результата поиска (т.е. цикл прерывается).

В цикле производится поиск без учета регистра алфавитных символов (в

 качестве опции сравнения выбрано значение vbTextCompare). Строка

"трав" будет найдена дважды — на позициях 10 и 20, и эти числа будут

отображены в окнах сообщений, открываемых в строке 8.

Динамическое заполнение строк

Функции String и Space позволяют динамически заполнять строковые перемен-

ные и при необходимости очищать их. Функция string заносит

 в

 переменную за-

данный символ и повторяет операцию указанное количество раз. Space можно счи-
тать частным случаем функции String — она присваивает переменной строку пробе-
лов определенной длины.

Если необходимо заполнить переменную набором одинаковых произвольных сим-

волов, применяйте функцию String. Чтобы присвоить переменной строку пробелов

длины п, можно воспользоваться одним из

 n,

 ) либо

Space ( п ) — с одинаковым результатом.

Форматирование данных

Как самые простые, так и наиболее сложные операции форматирования
могут быть легко выполнены с использованием функции

 и набо-

ра специальных символов форматирования — например

 &, <, или >.

Синтаксис функции Format таков:

 Строка,

 )

Функция Format требует задания переменной или литерального значения типа

string и строки, описывающей формат преобразования. Строка формата может со-

держать любые литеральные символы в сочетании со специальными знаками. В
табл. 10.2 перечислены наиболее употребительные специальные символы форматиро-

вания и приведено их описание.

Символы @ и  играют роль шаблонов для представления любого единственного

символа. Если строка формата содержит знак @ или

 он заменяется символом пре-

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

 а команда > равносильна функции Ucase$. Лис-

тинг 10.4 представляет несколько простых примеров форматирования строк; их легко

проверить с помощью средств окна Immediate.

 час. Как

 использовать готовые решения


background image

Таблица 10.2. Специальные символы форматирования

Символ

Описание

@
&

Шаблон единственного символа

Шаблон единственного символа
Преобразование к нижнему регистру

Преобразование к верхнему регистру

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

Листинг 10.4. Примеры форматирования строк

1: Sub

 )

2: MsgBox Ucase$ ( "test" ) =

 "test",

 )

 MsgBox

 "TEST" ) =

 "TEST",

 )

4 : MsgBox

 )

 End Sub

При выполнении строки 2 откроется окно сообщения, содержащее слово
True, поскольку левая и правая части логического выражения сравнения
аналогичны. Окно, вызываемое в строке 3, также будет отображать слово
True. Результат выполнения строки 4 — выражение
Безусловно, это самые простые примеры. Хитроумные комбинации лите-

ральных символов и специальных знаков форматирования могут привес-
ти к

 любопытным результатам. Ваше творчество ограничено толь-

ко способностью к воображению и, естественно, требованиями конкрет-
ной задачи. Единственное общее полезное правило состоит в том, что

заниматься форматированием имеет смысл после того, как сделано самое
главное — программа правильно решает задачу.

Функции Date и Time

Существует две разновидности функций Date и Time. Date, например, возвращает

текущую дату в виде значения типа Date, а функция Date$ служит для представления
даты в виде символьной строки. Функции Time и

 возвращают значения теку-

щего времени. Величины типа Date хранятся в виде чисел двойной точности.

Если в окне Immediate редактора Microsoft Visual Basic ввести команду Print Date,

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

(например, введя эту команду 28 июня 2001 г., вы получите

 Команда

Print Time выводит на экран текущее значение времени — скажем,

 Ко-

манда Print Now позволяет увидеть одновременно и дату, и время

15:55:51).

Дата и время сохраняются в виде единого числа типа Double: дате соответствует

целая часть числа, а времени — дробная. Чтобы просмотреть внутреннее представле-
ние даты/времени, введите в окне Immediate команду Print Now / 1, под которой
подразумевается неявное преобразование величины в число двойной точности. Дате
28.06.2001 и времени 15:55:51 соответствует число

 (Целая

часть равна количеству дней, прошедших с 1 января 1900 года.)

186

Часть III. Использование ресурсов Access


background image

Следующий код позволяет выделить значение даты и значение времени из внут-

реннего представления даты и времени.

Dim DatePart As Double
Dim

 As Double

DatePart =

TimePart = Now -

В 22.22, 7 марта 2001 года значение DatePart составляет 36957, а значение

TimePart — 0.933206. Полное значение — это число дней, прошедших с 1 января

1900 года.

Отрицательное значение даты свидетельствует о том, что используется дата до 1 января

1900 года. Время представляется в виде дробной части от 24 часов. Дробная часть, рав-

ная 0, соответствует полуночи, а 0,5 — полудню. 0,75 — это три четверти суток, или 18.00.

Дата и время, вероятно, второй по значимости (после строк) тип данных, исполь-

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

Операции файлового ввода-вывода

Вся информация хранится в файлах двоичного и текстового форматов. Пакетные и

 — это простейшие примеры файлов текстового формата. Всем вам знако-

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

Для выполнения операций файлового ввода-вывода в программах на языке VBA

применяются команды и функции Open, Close, FreeFile, Line Input, Input, Print,
Write, Get и Put. Open осуществляет открытие файла, обеспечивая заданный уровень

доступа — для чтения, записи или для чтения/записи. Close выполняет закрытие файла.

Для обращения к открытым файлам применяются специальные дескрипторы-номера.

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

 FreeFile гарантирует, что вы-

бранный номер файла не применяется другим процессом. Line Input обеспечивает
возможность считывания строки текстового файла. Команды Write и Print позволяют
записывать информацию в текстовый файл, причем Write заключает очередную пор-
цию данных в двойные кавычки, a Print — нет. Get и Put предназначены, соответст-
венно, для выполнения операций чтения и записи двоичных данных.

Мы рассмотрим названные команды и функции по группам: вначале Open и Close

совместно с FreeFile, затем Line Input, Input, Print, Write И, наконец, Get и Put.

Команды Open и Close

Команда Open описывается довольно сложным синтаксическим выражением — о

ней речь пойдет ниже. Но зато Close довольно проста:
Close

 — это переменная для хранения числа двойной точности, которое

возвращается функцией FreeFile, получающей свободный ресурс от операционной
системы.

 час. Как использовать готовые решения


background image

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

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

Если файл все-таки должен оставаться открытым во время выполнения

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

см. главу "21-й час. Основы программирования классов").

I

о

Т

А

Команда открытия файлов, Open, более сложна. С ее помощью можно от-

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

 возврат каретки - перевод

строки.

 В двоичном режиме объем блока данных диктуется вашими по-

требностями и может быть произвольным. Текстовый файл легко открыва-
ется и отображается с помощью любой программы-редактора, но двоичный
файл в режиме просмотра будет выглядеть, как "каша" из беспорядочно
расположенных символов. Приведем синтаксис команды Open:
Open

 [For Режим] [Access Доступ] [Блокировка] As

ИмяФайла — это символьная переменная или константа, содержащая имя файла

(и, возможно, путь к нему). Аргумент Режим указывает, будет ли файл открыт для за-
писи, чтения или одновременно записи и чтения, а также предписывает, каким обра-
зом трактовать данные — как текстовые или двоичные. В качестве значения Режим
может применяться одно из служебных слов — Append, Binary, Input, Output или
Random. Append означает, что файл открывается в режиме записи и указатель поло-

жения устанавливается в конец файла. Слово Binary достаточно красноречиво —
файл открывается как бинарный

 input соответствует режиму чтения тек-

стового файла, Output предполагает возможность записи в текстовый файл, a Random
позволяет совмещать операции чтения и записи текста без закрытия файла и его по-
вторного открытия. Если параметр Режим не задан, по умолчанию выбирается значе-
ние Random. Аргумент Доступ задается только в том случае, если режим отмечен слу-

жебным словом Binary, и допускает значения Read,  W r i t e или Read Write, которые

не нуждаются в дополнительных пояснениях. Необязательный параметр Блокировка
позволяет указать один из признаков блокировки для обеспечения возможности рабо-
ты с файлом в многопользовательском режиме — Shared, Lock Read, Lock  W r i t e и
Lock Read Write.

НомерФайла — это целое число в интервале от 1 до

 Наиболее удачная тактика

связана с вызовом функции FreeFile, которая запрашивает у операционной системы
свободный ресурс и возвращает

 в виде числа. После этого число-номер следует

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

188

Часть III. Использование ресурсов Access


background image

или записываемых данных. Если вы будете работать только с одним символом, укажи-
те Len=l. Довольно полезной оказывается конструкция

 по-

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

Листинг 10.5. Примеры открытия/закрытия текстовых и бинарных файлов

1

2
3
4
5

6

7
8
9
10:

11:

14:
15:
16:

18:
19:

20:
21:

23:

Type Email

Name As String
Email As String

End Type

Sub

 )

Dim Handle As Double

Handle = FreeFile
Open

 For Output As

Close #Handle

Handle = FreeFile
Open

 For Binary Access Write As ttHandle

Dim Mail As Email

Do While (1 = 1)

 InputBox ( "Введите имя

"Добавление имени",

 )

If

 =

 Then Exit Do

 = InputBox ( "Введите адрес

"Добавление адреса",

 )

Put #1,

 Mail

Loop
Close ttHandle

End Sub

Анализ

 строках

 определяется новый тип, Email. Подробнее о пользова-

 типах см. главу

 час. От сложного к простому: создание

собственных типов данных". В строке 7 объявляется переменная Handle

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

файла. Строка 8 содержит обращение к функции FreeFile, получающей
от операционной системы свободный файловый ресурс. В строке 9 вы-

полняется команда открытия файла

 test.txt

 в режиме записи текста, а в

строке 10 файл закрывается. Хотя никакой практической ценности по-

добный код не представляет, он служит для демонстрации приемов от-

крытия и закрытия текстовых файлов.

Строка 12 содержит повторный вызов функции FreeFile и оператор присваива-

ния возвращенного ею результата переменной Handle. В строке 13 выполняется
операция открытия файла

 в режиме записи двоичных данных. В строке 14

находится объявление объекта Mail ранее построенного пользовательского типа
Email. Строки 16-21 задают бесконечный цикл вида Do  W h i l e . . . Loop, предна-
значенный для интерактивного (с помощью функции InputBox) ввода информации

10-й час. Как использовать готовые решения

189