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

Получение информации о структуре таблицы
Вы уже научились создавать
с помощью инструментов Access и средств
программного кода. Но наша таблица CONTACTS пока пуста. Прежде чем приступить к
ее наполнению, мы еще раз вспомним о том, как открывать и закрывать соединение с
базой данных и объект набора данных.
Знания о способах создания соединения и открытия набора данных вам просто
необходимы. Эти операции должны предшествовать любым действиям с базами дан-
ных. Листинг 6.3 содержит пример кода, иллюстрирующего приемы создания соеди-
нения с базой данных, открытия/закрытия набора данных и отображения информа-
ции о структуре таблицы.
Листинг 6.3. Пример открытия таблицы и отображения данных о ее структуре
1: Sub
)
Const DatabasePath =
3:
Yourself Access 2002" +
4:
Const
+
6:
Data source =
+ DatabasePath
1: Dim Connection As New
Dim Catalog As New
Dim
As New
4: Dim Field As Field
5:
ProviderStr
6: Set
= Connection
7:
"CONTACTS",
adOpenKeyset
8:
For Each Field In
10:
&
&
&
&
11: Next
12:
Set RecordSet = Nothing
14: Set Catalog = Nothing
15:
16: Set Connection = Nothing
Sub
Обратите внимание: процедура названа подходящим именем, DisplayFields, по-
скольку предназначена для отображения сведений о структуре таблицы на экране
(строка 1). Строки 2-6 содержат объявления объектов стандартных классов
(Connection, Catalog, RecordSet и Field), разработанных Microsoft. (Более под-
робные сведения о них вы сможете почерпнуть из нескольких последующих глав на-
шей книги и файлов оперативной справочной системы Access.)
Строка 12 открывает соединение с базой данных. Набирайте этот код в том виде, в
каком он приведен, за исключением фрагмента Data Source = — здесь необходимо
ввести путь к каталогу, в котором находится ваш собственный экземпляр файла
tacts.mdb. Строка 13 может быть применена вами без каких-либо изменений при
открытии этой и любой другой таблицы. Строка 14 содержит инструкцию непосредст-
б-й час. Управление базами данных
115

венного открытия таблицы. Чтобы применить код строки 14 для открытия другой таб-
лицы, достаточно заменить наименование "CONTACTS" требуемым. Выполнение ко-
манды Refresh, содержащейся в строке 15, гарантирует получение актуальных дан-
ных. (Не забывайте, что с той же таблицей одновременно могут работать и другие
программы.)
Строки 16-18 содержат циклическую конструкцию For Each — мы говорили о ней
на прошлом занятии, "5-й час. Программирование управляющих структур". Команда
в строке 17 выводит на экран данные о наименовании поля, его типе (в виде целого
числа) и размере. Чтобы увидеть результаты, обратитесь к средствам окна Immediate
(пример вывода данных показан на рис. 6.7). В оставшихся строках кода (19-24) вы-
полняются операции очистки и удаления объектов данных программы. Объекты набо-
ра данных и соединения закрываются командами Close. Инструкции присваивания
предопределенного значения Nothing осуществляют возврат выделенных переменным
фрагментов памяти в общую область (или, как еще говорят,
пул)
динамически распре-
деляемой памяти. (Подробнее о назначении Nothing и приемах его использования
см. в системе оперативной справки Access.)
ДО
£
•
в
т
О
-
1
1
;
'
.
'
*
- " +
Catalog Ал Nev
Set
-
Set
-
. . . ' • ' ' '
S,
FIRST NAME, 202,
LAST NAME, 202, 12
- _
i
Immediate позволяет увидеть информацию о полях таблицы, которая
хранится в виде коллекции, принадлежащей объекту
Для корректной работы процедуры листинга 6.3 необходимо, чтобы база
данных имела по крайней мере одну запись. На самом деле
приведенный код, помещая данные о структуре таблицы в окне
Immediate, не должен требовать наличия самих записей, тем не менее в
Access 2002 с пустой таблицей он работать не будет.
116
Часть II. Основы конструирования программ

Столкнувшись с любой задачей управления базой данных, вы неизбежно обрати-
тесь к фрагментам кода, представленного в листинге 6.3. Впрочем, частота и целесо-
образность использования тех или иных команд зависят от многих факторов. Напри-
мер, операции открытия и закрытия таблицы обычно выполняются при каждом об-
ращении к ней, но базу данных достаточно открыть один раз, в начале программы, а
закрывать имеет смысл в самом конце сеанса работы.
В следующем разделе мы рассмотрим пример заполнения таблицы данными, вво-
димыми пользователем.
Циклический ввод данных в таблицу
С целью решения задачи ввода данных в таблицу целесообразно воспользоваться
циклической конструкцией. Ниже мы рассмотрим пример, использующий цикл на
основе выражений For . . . Next. Чтобы упростить изложение, будем применять са-
мые очевидные средства ввода данных. О более сложных инструментах организации
графического интерфейса пользователя вы узнаете, прочитав главу
час. Созда-
ние экранных форм".
Ознакомившись с текстом листинга 6.3, вы изучили приемы создания соединения
с базой данных, открытия таблицы и получения данных о ее структуре. Чтобы напол-
нить таблицу данными, программа должна содержать инструкции вставки записи и
сохранения информации, введенной пользователем, в памяти, а затем в таблице. Лис-
тинг 6.4 представляет исправленный вариант предыдущей процедуры, демонстрирую-
щий способы ввода данных в таблицу и сохранения их.
Листинг 6.4. Пример процедуры ввода данных в таблицу
1:
2:
3 :
4:
5:
6:
7:
8:
9:
10
11
12
13
14
15
16
17
18
19
20
22
23
24
25
26
Sub
)
Const DatabasePath =
Yourself Access 2002" +
Const
+
Data source =
+ DatabasePath
Dim Connection As New
Dim Catalog As New
: Dim RecordSet As New
: Dim Field As Field
ProviderStr
: Set
= Connection
:
"CONTACTS",
:
adLockOptimistic
:
: Dim Temp As String
: Do While (1)
:
: For Each Field In
: If
<> "ID") Then
=
значение поля
&
&
: If (Temp =
Then Exit For
6-й час. Управление базами данных
117

27:
= Temp
28: End If
29: Next
30:
31: If (Temp =
Then
32: Exit Do
33: Else
34:
End If
Loop
37:
38: Set RecordSet = Nothing
39: Set Catalog = Nothing
40:
41: Set Connection = Nothing
Sub
Если при работе программы листинга 6.4 щелкнуть на кнопке ОК,
введенные данные будут сохранены в поле. По щелчку на кнопке
Отмена (Cancel) в поле сохранится пустая строка. Для выхода из цикла
необходимо нажать клавишу <Q>.
Многое из того, что представлено в тексте листинга 6.4, вы уже видели. Строки 1-12
выполняют операции создания соединения с базой данных и открытия таблицы. Глав-
ное в процедуре содержится во внешнем цикле Do While . . . Loop (расположенном в
строках 20-36) и внутреннем цикле For
. Next (строки 22-29).
Инструкция Do While строки 20 открывает бесконечный цикл. Литерал 1 равно-
значен логическому значению True, и поэтому подобный цикл, не предусматриваю-
щий возможности естественного завершения, должен содержать команду принуди-
тельного прерывания. Она существует — это директива Exit Do, размещенная в
строке 32. Внешний цикл, Do W h i l e . . . Loop, контролирует операции добавления
новой записи в таблицу и ее обновления после выполнения внутреннего цикла. Внут-
ренний цикл обеспечивает возможность и прохождения по всем полям новой записи
(кроме поля "ID", заполняемого Access автоматически), и сохранения в них значений,
введенных пользователем. В качестве средства ввода используется уже
извест-
ная функция
Temp — это символьная переменная для хранения результата
ввода. С целью обеспечения возможности принудительного выхода из внутреннего и
внешнего циклов используются условные выражения If (Temp = "Q") Then Exit,
т.е. единственный символ "Q", введенный пользователем в диалоговом окне, тракту-
ется программой как сигнал прерывания
В конце процедуры расположены команды закрытия набора данных, каталога и
соединения (именно в таком, обратном, порядке), а также освобождения памяти, от-
веденной под объекты.
Код листинга 6.4 вы сможете использовать при работе с любым набором данных —
планируете ли вы
ввод информации, форматировать значения полей
или выполнять вычисления. Операции открытия/закрытия таблиц и циклического
прохождения по записям данных относятся к разряду самых употребительных и уни-
версальных.
Часть II. Основы конструирования программ

Динамический поиск информации
в таблице
Циклические конструкции могут быть использованы также для поиска информа-
ции в таблице. В предыдущем разделе в качестве критерия прерывания цикла приме-
нялось условное выражение If (Temp =
Then. Подобная конструкция приме-
нима и для решения задач анализа данных.
Посредством внесения незначительных изменений мы превратили процедуру
putData, приведенную выше в тексте листинга 6.4, в новую процедуру, FindData,
предназначенную для поиска данных в таблице (листинг 6.5).
Листинг 6.5. Пример процедуры поиска данных в таблице
1:
2:
3:
4:
5:
6:
7 :
8:
9:
10
3 :
4:
5:
6:
7 :
8:
9:
11
12
13
14
15
16
17
18
20
21
22
23
Sub FindData ( )
Dim Connection As New
Dim Catalog As New
Dim RecordSet As New
Dim Field As Field
Const DatabasePath =
Yourself Access 2002" +
:
&
Source" & DatabasePath
Set
= Connection
"CONTACTS",
adOpenDynamic,
Dim Temp As String
Do While
= False)
Temp = InputBox ( "Введите искомые данные
"Поиск данных")
: If (Temp = "Q") Then Exit Do
: For Each Field In
: If
Like Temp) Then
:
"Найдено:
&
&
в
&
"ID"
Exit For
: End If
:
: Loop
:
: Set RecordSet = Nothing
: Set Catalog = Nothing
6-й час. Управление базами данных
119