Файл: Освой самостоятельно программирование для MS Access 2002 за 24 часа [П.Киммел].pdf
ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 21.10.2020
Просмотров: 7837
Скачиваний: 25

об именах и адресах электронной почты пользователей. Строка 20 демонстрирует
пример использования команды
Put
для записи полученных данных в двоичный
файл. Команда Put более подробно рассмотрена в следующем разделе. Цикл преры-
вается при вводе символа Q в качестве имени пользователя. В строке 22 (мы не за-
были!) файл закрывается.
Если попытаться открыть двоичный файл с помощью обычного текстового редак-
тора, помимо значимых данных, мы, вероятно, увидим нагромождение служебных
символов. Картина становится более прозрачной, если обратиться к средствам старой
программы
Двоичные файлы полезны для хранения блоков структурированной информации,
которые, скажем, описываются определенными пользователем типами данных, а тек-
стовые файлы удобны в качестве хранилища произвольных текстов. Например, глава,
которую вы читаете, записана в виде текстового документа Word, а вот адресную
книгу, содержащую сведения об именах абонентов, номерах телефонов и т.п., вероят-
но, в каких-то случаях целесообразно сохранять в виде бинарного файла определен-
ной структуры.
Чтение и запись текстовых данных
Команды Line Input, Input, Print и Write предназначены для чтения и записи
текстовой информации. Выбор той или иной команды диктуется условиями конкрет-
ной задачи и структурой используемых данных. Команда Line Input применяется
для построчного чтения, input — для чтения текста с разделителями, Print — для
вывода порций текста, a W r i t e — для записи фрагментов данных в двойных кавычках
с разделителями. Ниже приведены синтаксические формулы, описывающие каждую
из названных команд.
Line Input
Input
[, Переменная2, ПеременнаяЗ,
[, Переменная2, ПеременнаяЗ,
Write #НомерФайла,
[, Переменная2, ПеременнаяЗ,
Команда Line Input требует задания номера открытого файла и символьной пе-
ременной для хранения считанной из файла строки данных. Input считывает из фай-
ла, который задан с помощью номера, поля данных, ограниченные разделителями, и
присваивает их переменным из указанного списка. Номер файла, используемый ко-
мандами Line Input и input, — это числовая переменная двойной точности, полу-
ченная от функции FreeFile. Input позволяет непосредственно считывать и при-
сваивать переменным как строки, так и данные других типов. Команды Print и
W r i t e также пользуются номером файла, возвращаемым функцией FreeFile, и пре-
доставляют возможность записи одного или нескольких значений, ограниченных раз-
делителями, в текстовый файл. Результат работы команды Write (мы применим ее в
строке 7 листинга 10.6) — это строка, которая состоит из полей, заключенных в двой-
ные кавычки и разделенных запятыми:
"Robert
Те же значения, записанные с помощью команды Print, в файле будут выглядеть так:
Robert Golieb
Обратите внимание на отсутствие каких бы то ни было разделителей, кроме
пробелов.
Часть III. Использование ресурсов Access

Применяя команды W r i t e и Input, вы сможете легко создать простую базу дан-
ных в виде текстового файла, а также приложение для ее просмотра. Несмотря на то,
что такое решение трудно назвать эффективным, в некоторых случаях оно может ока-
заться оправданным. Подобная информация может поступать из различных источни-
ков — Web-страниц, файлов конфигурации или баз данных старых форматов. Лис-
тинг 10.6 демонстрирует пример функции для создания и просмотра базы данных, со-
держащей сведения об именах пользователей и их электронных адресах.
Листинг 10.6. Пример использования команд Input и
1
2
3
4
5
6
7
8
9
10:
11:
15:
16:
17:
18:
19:
2 0 :
21:
Sub
)
Dim Handle As Double
Handle = FreeFile
For Output As
Write
"Robert
Close IHandle
Handle = FreeFile
Open
For Input As #Handle
Dim Name, Email As String
Input #1, Name, Email
& Name &
Close
End Sub
Ключ к созданию высококлассного кода — последовательность в действиях.
В качестве номера открытого файла мы, например, неоднократно исполь-
зовали переменную Handle типа Double, получающую значение от
функции FreeFile, — нам не приходилось всякий раз выдумывать новые
имена или, хуже того, пользоваться литеральными значениями. Чем боль-
шее количество элементов кода подвергается разумной унификации, тем
быстрее достигается качественный результат.
Открытые файлы — это ресурсы операционной системы. Поскольку они
ограниченны, программный код должен "заботиться" о том, чтобы все
открытые файлы в конце концов обязательно закрывались. Если в
промежутке между операциями открытия и закрытия файла происходит
ошибка, файл может остаться открытым, что вполне может привести к
повреждению данных. В главе "18-й час. Обработка ошибок во время
выполнения программы" речь пойдет о создании кода, позволяющего
избегать подобных потенциальных опасностей.
10-й час. Как использовать готовые решения
191

В строке 3 листинга 10.6 содержится объявление переменной Handle ти-
па Double, предназначенной для хранения номера открытого файла.
Этот файл запрашивается у операционной системы с помощью функции
FreeFile,
вызывается в строке 4. Полученный ресурс необходи-
мо сразу же использовать, чтобы многопоточная операционная система
не передала его другой программе или иному процессу той же програм-
мы. В строке 5 выполняется открытие текстового файла для записи, а
строка 7 содержит инструкцию сохранения в файле двух литеральных
символьных значений. В строке 9 файл закрывается. В строке
по-
мощью функции FreeFile вновь запрашивается свободный номер фай-
ла — обратите внимание, мы не стали полагаться на ранее используемый
ресурс, а затребовали новый. Строка
содержит команду открытия того
же текстового файла, но на сей раз в режиме чтения. В строке 14 объяв-
ляются две текстовые переменные — ниже, в строке 16, они используют-
ся для хранения результатов чтения данных из файла. В строке 18 полу-
ченная информация выводится на экран с помощью процедуры MsgBox,
и в строке 20 файл закрывается.
Конечно, рассмотренный пример является достаточно условным. Чтобы придать
ему практическую ценность, необходимо вынести операции записи и чтения данных в
отдельные функции и создать приемлемый интерфейс пользователя. О том, как стро-
ить понятные пользовательские интерфейсы, будет рассказано в главе "19-й час. Соз-
дание экранных форм".
Чтение и запись двоичных данных
Двоичные (бинарные) файлы находят самое широкое применение и по-
зволяют сохранять данные в виде записей. Указав размер каждой записи,
вы сможете последовательно сохранять и считывать их с помощью ко-
манд Put и Get.
листинга 10.5 содержит пример использова-
ния инструкции Put. Команда Get действует тем же образом, но приме-
няется для работы с файлами, открытыми в режиме Read или Read
Write. Синтаксис команд Put и Get описан ниже.
Put
файла, [Номер
Переменная
Get #НомерФайла,
Переменная
Команда Put требует задания номера файла (предварительно открытого с помощью
Open), необязательного номера записи и идентификатора переменной. В качестве пере-
менной может выступать объект стандартного или пользовательского типа данных — та-
кого, как, например Email (мы определяли этот тип в тексте листинга 10.5). Аргумент
НомерЗаписи задается в том случае, если вам известен индекс записи, которую необхо-
димо сохранить. Если команда Put выполняется без указания номера записи, данные
сохраняются последовательно. Если вы ссылаетесь на номера записей, то должны при-
нять дополнительные меры по обработке возможных ошибок, чтобы избежать опасности
выхода за маркер конца файла. Команда Get считывает двоичные данные в простые пе-
ременные или объекты более сложных типов. В отношении использования аргумента
НомерЗаписи действуют те же правила, которые были рассмотрены выше. Прежде чем
приступить к явному заданию номера записи для сохранения или считывания, обрати-
тесь к главе 18. Команда Get предъявляет те же требования к параметру Переменная,
Часть III. Использование ресурсов Access

что и Put. Единственное различие команд состоит в том, что для использования Get
файл должен быть открыт в режиме Read или Read Write.
С помощью рассмотренной в этом разделе пары команд вы можете создавать соб-
ственные схемы хранения и считывания данных. Впрочем, настоятельно рекомендуем
этого не делать. Применяйте средства прямого доступа к файловым данным только в
тех случаях, когда нет других альтернатив. В большинстве ситуаций достаточно обра-
титься к современным мощным, но простым инструментам управления базами дан-
ных — и вы быстрее достигнете цели.
Функции интерактивного ввода данных
Если задача, над которой вы трудитесь, предполагает активное взаимодей-
ствие с пользователем, целесообразно прибегнуть к средствам создания
форм. Вопросы проектирования и построения форм подробно освещены в
главе 19. Но в некоторых случаях, когда программе необходимо выдавать
незамысловатые сообщения и оперировать простыми элементами данных,
введенных пользователем, имеет смысл применять функции MsgBox (для
отображения сообщений) и
(для ввода информации).
Синтаксис вызова функции MsgBox таков:
Сообщение [, Кнопки] [, Заголовок] [, ФайлСправки,
)
Вызов функции MsgBox приводит к открытию модального окна. Термин
модальный
означает, что пока такое окно открыто, все другие окна приложения остаются недос-
тупными для пользователя. В качестве аргумента Сообщение может использоваться
переменная, именованная константа или литеральное значение символьного типа, со-
держащее собственно текст сообщения. Параметр Кнопки — одно из значений предо-
пределенного перечислимого типа, например
или
Полный
список допустимых значений параметра Кнопки легко найти в оперативной справоч-
ной системе, задав ключевое слово поиска
MsgBox.
Необязательная пара аргументов
ФайлСправки и НомерТемы содержит имя
справки и номер темы — число,
которое было назначено определенной теме справки при создании файла. Если оба
параметра заданы верно, нажатие клавиши <F1> после открытия окна сообщения
приведет к загрузке приложения справки и отображению указанной темы.
InputBox служит для получения информации от пользователя.
Мы неоднократно обращались к ней ранее, хотя не владели достаточной
информацией о ее возможностях. Ознакомьтесь с полным описанием
синтаксиса функции InputBox, приведенным ниже.
Сообщение [, Заголовок] [, ЗначениеПоУмолчанию]
.
[,
Абсцисса] [, Ордината] [, ФайлСправки, НомерТемы] )
Функция InputBox открывает модальное окно, содержащее две кнопки:
и
Cancel. После щелчка на кнопке ОК программа получает строку данных, введенных
пользователем в поле диалогового окна. Щелчок на кнопке Cancel приводит к воз-
врату строки нулевой длины. Символьный аргумент Сообщение уведомляет пользо-
вателя о том, какого рода данные требуются программе. Необязательный параметр
Заголовок содержит строку, которая будет отображаться в заголовке диалогового
окна. Аргумент ЗначениеПоУмолчанию позволяет задать символьную строку, кото-
10-й час. Как использовать готовые решения

пользователь сможет сразу принять
на кнопке ОК) или отредактиро-
вать. Факультативные параметры Абсцисса и Ордината дают возможность задать
декартовы координаты левого верхнего угла диалогового окна на экране. Если эти
параметры не указаны, окно располагается в центре экрана. О назначении аргумен-
тов ФайлСправки и
говорилось ранее, когда речь шла о синтаксисе вы-
зова функции
Функция MsgBox применяется для вывода окна,
сообщение об ошиб-
ке, и о возникновении особых условий. Она также регламентирует дальнейшие дейст-
вия, например:
"Ошибка деления на нуль — введенные данные
)
Функция
ожидает реакции пользователя в виде введенного символьного
значения:
Dim UserName As String
UserName =
"Введите имя пользователя",
При выполнении указанного кода открывается диалоговое окно, озаглавленное
строкой Имя, и пользователю предлагается возможность отредактировать строку
Guest, заданную по умолчанию. После щелчка на кнопке ОК переменной UserName
будет присвоено введенное значение; щелчок на кнопке Cancel приводит к очистке
содержимого переменной UserName.
Еще раз об оперативной справочной
системе
В недрах библиотек VBA таятся сотни и сотни функций, процедур, команд и объ-
ектов со своими методами и свойствами. Чтобы найти и использовать их, необходимо
сформулировать задачу, сведя ее описание к емкому существительному или глаголу.
После этого следует обратиться за помощью к файлам оперативной справочной сис-
темы Microsoft Access и Visual Basic. Откройте окно Справка Microsoft Visual Basic, пе-
рейдите на вкладку Указатель (Index) и введите одно из ключевых слов.
До сих пор мы имели дело преимущественно с функциями и процедурами. Терми-
ны
метод
и
свойство
имеют отношение к проблематике объектно-ориентированного
программирования. Методы — это функции и процедуры, а свойства — элементы
данных, служащие частью определенного класса. Более подробные сведения об ис-
пользовании классов и создании объектов вы узнаете из главы "21-й час. Основы
программирования классов".
Резюме
В арсенале программиста, выбравшего язык VBA, — сотни предопределенных
функций и процедур. В вашем распоряжении также достаточно большой объем кода,
когда-либо написанного на языках BASIC и Visual Basic. В ходе этого занятия были
рассмотрены наиболее употребительные функции обработки строк, интерактивного
ввода данных и выполнения файловых операций. Файлы оперативной справки VBA
хранят много дополнительных сведений. Коммерческие продукты, разрабатываемые
сторонними производителями, — еще один неисчерпаемый источник решений и тех-
нологий.
Часть III. Использование ресурсов Access