ПРАКТИЧЕСКАЯ РАБОТА №7. ПРОГРАММИРОВАНИЕ В БАЗАХ ДАННЫХ.
Задача 1. Использование стандартных функций.
Решим следующую задачу на использование стандартных функций, в частности на функции для работы с файлами.
Пусть необходимо данные пользовательской формы сохранять в определенный текстовый файл. Также должна быть возможность открытия текстового файла с сохраненными критериями и выполнять отбор записей в форме в соответствии с этими критериями.
Также решим эту задачу путем создания пользовательской панели инструментов и меню.
Решение.
Перейдите на вкладку Модули. Создайте новый модуль.
Создадим две процедуры, одна из которых будет сохранять данные из формы, например Расход. А вторая процедура будет извлекать информацию из текстового файла, и применять в соответствии с этой информацией фильтр для отображения записей в форме.
Для создания первой процедуры (или функции – в нашем случае создание функции будет предпочтительнее, так как потом у нас будет возможность использовать ее для создания макроса) введите ниже объявление вида:
Function SaveFileTextMy()
End Function
Для работы с файлами будем использовать стандартные функции Открытия, Закрытия, Чтения и Записи.
Открытие и закрытие файла
Работа с файлом начинается только после его открытия или создания посредством процедуры Open.
Синтаксис процедуры Open следующий:
Open имяФайла For способДоступа [Access доступ] [ограничение] As
[#]номерФайла [Len=длинаЗаписи]
Параметр имяФайла — это строка, содержащая имя открываемого файлам путь к нему. Если указание пути отсутствует, то по умолчанию считается, что файл находится в текущей папке приложения, например «Мои документы». Если указанный файл не существует, то он создается.
После ключевого слова For идет параметр способДоступа, определяющий способ доступа к файлу. Его значением могут быть только следующие константы: Input, Output, Append, Random, Binary.
Следующий необязательный параметр доступ ограничивает набор операций, разрешенных над файлом. Данный параметр может принимать следующие значения:
§ Read (только чтение),
§ Write (только запись),
§ Read Write (и чтение и запись).
Необязательный параметр ограничение определяет набор операций над открываемым файлом, доступный для других процессов. Данный параметр может принимать следующие значения:
§ Shared (без ограничений),
§ Lock Read (блокировка чтения),
§ Lock Write (блокировка записи),
§ Lock Read Write (блокировка и чтения, и записи).
Следующий параметр номерФайла — это целое число от 1 до 511, однозначно идентифицирующее файл для других процедур и функций. Для каждой операции открытия этот номер должен быть отличен от уже используемых номеров. Узнать очередной свободный номер можно посредством функции FreeFile.
Необязательный параметр длинаЗаписи — это число не более 32767, задающее длину одной записи в байтах для произвольного доступа; размер буфера для последовательного доступа; параметр игнорируется для бинарного доступа.
После открытия файла и работы с ним необходимо его закрыть. Для закрытия файла используются две функции Close и Reset.
Синтаксис процедуры Close следующий:
Close [ [#] номерФайла] [, [#] номерФайла]...
Параметр номерФайла — это номер открытого файла. После его закрытия этот номер можно повторно использовать в процедуре Open. Если этих параметров нет, то закрываются все открытые файлы. Аналогично действует безаргументная функция Reset.
Таким образом, добавим в нашу процедуру код для создания текстового файла с именем FileText.txt.
Open "С:\Мои документы\ FileText.txt " For Output As #1
Close #1
Замечание. Путь к файлу создайте самостоятельно в зависимости от наличия локальных дисков и открытых для использования студентами папок. Например, путь может быть таким
"X:\Users\ МТ-451\Иванов\FileText.txt "
Перейдем теперь непосредственно к работе над данными файла, т. е. к чтению и записи. Вначале мы рассмотрим процедуры ввода/вывода для последовательного доступа к файлу.
Последовательный доступ к файлу
Запись информации в файл осуществляется двумя процедурами Print и Write, в зависимости от последующего использования этих данных. Если данные будут использоваться в дальнейшем только для форматированного вывода на экран, то используется процедура Print, если, наоборот, данные будут в последующем считываться, рекомендуется использование процедуры Write.
Синтаксис процедуры Print:
Print #номерФайла, [списокВывода]
Параметр номерФайла — это номер файла, открытого со способами доступа: Append или Output.
Параметр списокВывода — это выражение или список выражений следующего вида:
[{Spc(n) | Tab[(n)]}] [выражение] [позицияСимвола]
Где Spc(n) задает количество вставляемых пробелов, a Tab(n) задает номер столбца, в котором будет начинаться текст, выражение — это строковое или числовое выражение, параметр позицияСимвола задает точку вхождения следующего за выражением символа.
Синтаксис процедуры Write:
Write #номерФайла, [списокВывода]
Здесь смысл параметра номерФайла тот же, а списокВывода — это одно или несколько выражений, разделенных пробелами, запятыми или точками с запятой.
Для некоторых значений (таких как Null, True и т. д.) есть ряд соглашений, однозначно определяющих форму их вывода. Например, значение Null выводится строкой символов #Null#.
Отличие между Print и Write в том, что последний оператор при записи вставляет запятые между соседними значениями и заключает строковые выражения в кавычки.
В нашем случае необходимо записать данные в текстовый файл из формы Расход, а именно значения всех ее полей в текущей записи. Для этого добавьте следующий код:
Dim K1 As String
Dim K2 As String
Dim K3 As String
Dim K4 As String
Dim K5 As String
K1 = Forms![Расход]![Код_расхода].Value
K2 = Forms![Расход]![Код_клиента].Value
K3 = Forms![Расход]![Дата_накладной].Value
K4 = Forms![Расход]![Идентифик№клиента].Value
K5 = Forms![Расход]![ФИОклиента].Value
Open " С:\Мои документы\ FileText.txt " For Output As #1
Write #1, K1, K2, K3, K4, K5
Close #1
Работа с процедурой SaveFileTextMy() закончена, сохраните ее. Выполнить мы ее пока не можем, так как ее нужно прикреплять либо к макросу, либо к обработчику события.
Создайте ниже под первой процедурой новую процедуру для чтения данных из текстового файла и применения фильтра для отбора записей.