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

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

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

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

Добавлен: 21.10.2020

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

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

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

об именах и адресах электронной почты пользователей. Строка 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, ПеременнаяЗ,

Print

 [, Переменная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


background image

Применяя команды  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 &

 & Email

Close
End Sub

Ключ к созданию высококлассного кода — последовательность в действиях.
В качестве номера открытого файла мы, например, неоднократно исполь-

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

шее количество элементов кода подвергается разумной унификации, тем

быстрее достигается качественный результат.

Открытые файлы — это ресурсы операционной системы. Поскольку они

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

открытые файлы в конце концов обязательно закрывались. Если в

промежутке между операциями открытия и закрытия файла происходит

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

повреждению данных. В главе "18-й час. Обработка ошибок во время

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

избегать подобных потенциальных опасностей.

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

191


background image

В строке 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


background image

что и Put. Единственное различие команд состоит в том, что для использования Get
файл должен быть открыт в режиме Read или Read Write.

С помощью рассмотренной в этом разделе пары команд вы можете создавать соб-

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

Функции интерактивного ввода данных

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

незамысловатые сообщения и оперировать простыми элементами данных,
введенных пользователем, имеет смысл применять функции MsgBox (для
отображения сообщений) и

 (для ввода информации).

 Синтаксис вызова функции MsgBox таков:

 Сообщение [, Кнопки] [, Заголовок] [, ФайлСправки,

 )

Вызов функции MsgBox приводит к открытию модального окна. Термин

 модальный

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

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

 или

 Полный

список допустимых значений параметра Кнопки легко найти в оперативной справоч-
ной системе, задав ключевое слово поиска

 MsgBox.

 Необязательная пара аргументов

ФайлСправки и НомерТемы содержит имя

 справки и номер темы — число,

которое было назначено определенной теме справки при создании файла. Если оба
параметра заданы верно, нажатие клавиши <F1> после открытия окна сообщения
приведет к загрузке приложения справки и отображению указанной темы.

 InputBox служит для получения информации от пользователя.

Мы неоднократно обращались к ней ранее, хотя не владели достаточной

 информацией о ее возможностях. Ознакомьтесь с полным описанием

 синтаксиса функции InputBox, приведенным ниже.

 Сообщение [, Заголовок] [, ЗначениеПоУмолчанию]

.

 [,

 Абсцисса] [, Ордината] [, ФайлСправки, НомерТемы] )

Функция InputBox открывает модальное окно, содержащее две кнопки:

 и

Cancel. После щелчка на кнопке ОК программа получает строку данных, введенных
пользователем в поле диалогового окна. Щелчок на кнопке Cancel приводит к воз-
врату строки нулевой длины. Символьный аргумент Сообщение уведомляет пользо-
вателя о том, какого рода данные требуются программе. Необязательный параметр
Заголовок содержит строку, которая будет отображаться в заголовке диалогового
окна. Аргумент ЗначениеПоУмолчанию позволяет задать символьную строку, кото-

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


background image

 пользователь сможет сразу принять

 на кнопке ОК) или отредактиро-

вать. Факультативные параметры Абсцисса и Ордината дают возможность задать
декартовы координаты левого верхнего угла диалогового окна на экране. Если эти
параметры не указаны, окно располагается в центре экрана. О назначении аргумен-
тов ФайлСправки и

 говорилось ранее, когда речь шла о синтаксисе вы-

зова функции

Функция 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