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

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

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

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

Добавлен: 21.10.2020

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

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

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

Получение информации о структуре таблицы

Вы уже научились создавать

 с помощью инструментов 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


background image

венного открытия таблицы. Чтобы применить код строки 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. Основы конструирования программ


background image

Столкнувшись с любой задачей управления базой данных, вы неизбежно обрати-

тесь к фрагментам кода, представленного в листинге 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


background image

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. Основы конструирования программ


background image

Динамический поиск информации

в таблице

Циклические конструкции могут быть использованы также для поиска информа-

ции в таблице. В предыдущем разделе в качестве критерия прерывания цикла приме-
нялось условное выражение 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