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

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

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

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

Добавлен: 21.10.2020

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

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

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

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

 определяет тип блокировки записей таблицы. "Оптимистический" уровень

блокировки означает, что запись блокируется вами (другим

 будет отказано в

доступе, предполагающем возможность внесения изменений), причем только в тот мо-

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

Разновидности наборов данных

Первый аргумент, Источник, передаваемый процедуре Open, определяет вид набо-

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

Объекты Command

Command — это объект в составе класса ADO, способный содержать код, возвра-

щающий набор строк данных или выполняющий их модификацию. Объект класса

Command — один из возможных источников данных, указываемых на месте первого
параметра метода Open объекта Recordset.

Хранимые процедуры

В качестве первого аргумента метода Open может задаваться имя такого объекта

хранимой процедуры, который содержит код на языке SQL. Подробнее об использо-

вании хранимых процедур Access и соответствующих им объектов VBA см. главу

час. Применение языка SQL".

Литеральные выражения SQL

Методу Open может передаваться также символьная строка, в которой находится

выражение, написанное на языке SQL. В этом случае вы, автор, получаете самые ши-

рокие и гибкие возможности в определении конкретных задач, которые должна вы-
полнить процедура Open. О конструкциях языка SQL и способах их практического
использования речь пойдет в главе 16.

Наиболее полная информация о программировании на SQL изложена в таких

книгах, как, например,

 Sams Teach Yourself Microsoft Access in 21 Days

 и

 Sams Teach

 Microsoft Access 2002 in 24 Hours.

 Рекомендуем также посетить виртуальный

книжный магазин издательства

 Sams,

 который находится по адресу

 com — вам наверняка удастся найти книги, более подробно освещающие вопросы

программирования на языке SQL.

Строки

 листинга 15.3 можно переписать с использованием литерального вы-

ражения SQL в качестве источника данных следующим образом:

Call

 "SELECT * FROM MUSIC", Connection,

AdLockOptimistic )

Обратите внимание, что теперь таблица MUSIC представлена запросом на языке

SQL. Более предпочтительным будет выглядеть вариант предварительного объявления

именованной константы, содержащей строку выражения SQL; тогда в качестве аргу-
мента процедуре Open достаточно передать название этой константы.

Таблицы и запросы

Наиболее употребительная разновидность источников данных, указываемых при

вызове метода Open, — это таблицы и запросы. Запрос, написанный на языке SQL,

может ссылаться на данные, физически разнесенные по нескольким таблицам.

260 Часть V. Программирование и базы данных Access


background image

В двух рассмотренных выше листингах (15.2 и 15.3), а также в коротком примере с ли-

теральным выражением SQL речь шла об открытии одного и того же набора данных

(таблицы MUSIC) несколькими способами. Существует еще один — создать и использовать
обычный именованный запрос Access. Чтобы воспользоваться запросом Access в качестве
источника данных при обращении к процедуре Open, выполните следующие действия.

1. Создайте базу данных и постройте в ней таблицу

 MUSIC,

 приняв во внимание сле-

дующий перечень полей:

 ID

 ARTIST Text

 TITLE Text

FORMAT

 PUBLISHER

2. В окне базы данных Access выберите элемент Запросы (Queries) списка Объекты

(Objects).

3. Щелкните на кнопке Создать (New).
4. В диалоговом окне Создание запроса (New

 выберите Конструктор (Design

View) и щелкните на кнопке ОК.

5. На вкладке Таблицы (Tables) диалогового окна Добавление таблицы (Show Table)

дважды щелкните на MUSIC (рис. 15.4), а затем на кнопке Закрыть (Close).

 л

 Т*

 . '

Рис.

 Дважды щелкните на имени нужной таб-

лицы, чтобы добавить ее в окно определения запроса

6.

 В окне Запрос на выборку (Select Query) перейдите к списку полей таблицы MUSIC

и дважды щелкните на элементе с символом звездочки (*) (рис. 15.5).

 • •

 .

 - :' . . .

 •

 . ;'.

 !
 •

 "• ." "-

 "

 .

."  .

 или;

С D

 D

 •

Рис.

 Выбор элемента, отмеченного звездочкой, означает,

что в набор данных будут включены все столбцы таблицы

15-й час. ADODB - ваш верный помощник

261


background image

Запустите процедуру

 на выполнение. Вы увидите, что она работает

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

Добавление и изменение данных

Наиболее популярные операции обработки наборов данных связаны с добавлением

новых строк и редактированием существующих. С технической точки зрения они
схожи. Прежде всего, необходимо открыть объект Connection. Затем следует создать
объект Recordset и открыть его в режиме записи, т.е. передать процедуре
Recordset

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

ний — adOpenKeySet либо adOpenDynamic.

Чтобы добавить запись в открытый набор данных, достаточно обратиться к методу

 где ИмяОбъекта — название корректно созданного и открытого

объекта класса

 Далее следует присвоить полям новой записи соот-

ветствующие значения и вызвать метод

 позволяющий сохранить

запись в базе данных.

Задача редактирования существующих данных так же проста. Вместо вызова мето-

да AddNew напишите код, отыскивающий запись, которую необходимо изменить. По-

иск записи может быть выполнен посредством циклической конструкции формата Do

. . . Loop, в условии которой проверяется признак достижения конца набора данных

(с помощью метода EOF). Можно также привлечь выражение SQL, возвращающее не-
обходимую запись. Любой способ приемлем — правда, второй, с применением SQL,

вероятно, более эффективен.

Листинг 15.4 демонстрирует пример добавления новой записи в таблицу MUSIC.

(Если таблица вами еще не создана, выполните

 инструкции, приведенной в пре-

дыдущем разделе, "Таблицы и

Листинг 15.4. Пример добавления новой записи в набор данных

1:

2 :
3:
4 :

5:
6:

8:
9 :
10
11

14:
15:
16:
17:
18:

Sub

 )

Const Provider =

 . 0;

Const DataSource = "Data
Const ConnectString = Provider & DataSource

Dim RecordSet As New
Dim Connection As New

On Error GoTo Finally

: Call
: Call

 "MUSIC", Connection, adOpenKeyset,

AdLockOptimistic )

 = "Natalie

RecordSet(

 = "Merchant"

 "TITLE"

 =

262

Часть V. Программирование и базы данных Access


background image

19:

 "FORMAT"

 = "CD"

20: RecordSet( "PUBLISHER"

 =

21:

23:
24:
25:

27: If

 <>

 0) Then

28: MsgBox
29:

30: End If
31: Set RecordSet = Nothing

 Set Connection = Nothing

 End Sub

Принципиальные различия листингов 15.3 и 15.4 состоят в том, что

I следний содержит строки

 В строке 14 выполняется инструкция

добавления в таблицу новой записи. В строках

 изменяются значе-

ния полей новой записи — с этой целью мы используем формат обраще-
ния к свойству Fields объекта RecordSet, допускаемый по умолчанию.
Метод Update, который вызывается в строке 22, сохраняет внесенные
изменения в базе данных.

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

 листинга 15.4 демонстрируют

именно этот прием: выражения

 и Re-

 Fields

 равноценны.

Чтобы отредактировать текст существующей записи таблицы, достаточно заменить

строку 14, содержащую обращение к методу AddNew, конструкцией поиска требуемой
записи. Весь оставшийся код (строки

 в изменениях не нуждается.

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

методу AddNew в качестве параметров. Аргументом может быть как имя одного поля,

так и массив полей (первый аргумент), и массив значений, как в следующем фраг-
менте кода.

Dim Fields As Variant
Dim Values As Variant

Fields =

 "TITLE",

"FORMAT", "PUBLISHER")

Values =

 "Hill", "Breathe", "CD", "Warner

Call

 Values)

В этом фрагменте кода объявлены и инициализированы два массива, которые пе-

редаются в метод AddNew. Однако при тестировании легче найти ошибку, если значе-

ния полей присваиваются в коде по очереди.

 полей

Объект класса Recordset содержит свойство-коллекцию Fields. В одной из пре-

дыдущих глав отмечалось, что

 свойство —

 это элемент

 принадлежащий клас-

су. Свойством может быть и порция данных простого типа, и объект какого-либо
класса. Свойство Fields представляет собой объект класса Collection.

15-й час. ADODB - ваш верный помощник 263


background image

Коллекция Fields — это свойство объекта Recordset, предлагаемое по умолчанию.

Вот почему выражения

 и

равноправны. Кроме того, вам следует знать о существовании класса Field, объекты
которого входят в состав коллекции Fields.

Основными тремя свойствами объекта Field являются OriginalValue, Value и

Name. Свойство Value — это переменная типа Variant; ее используют для доступа к
значению, хранящемуся в поле. Свойство OriginalValue (типа Variant) позволяет
получить или восстановить исходное значение поля. Переменная Name дает возмож-
ность сослаться на поле по имени столбца таблицы.

Фрагмент кода, подобный приведенному в строке 17 листинга 15.4 -

RecordSet

 — означает ссылку на объект типа Field. Далее, разумеется,

вы можете воспользоваться всеми атрибутами этого объекта. Так, например, часть 17-й

строки —

 — представляет собой обращение к свойству Value указанного объ-

екта Field. Строки

 могут быть переписаны в более строгой форме:

16:

 = "Natalie

17:

 (

 = "Merchant"

18:

 ( "TITLE"

 =

19:

 ( "FORMAT"

 = "CD"

20:

 ( "PUBLISHER"

 =

Это наглядный пример обращения к вложенным объектам через интерфейс объек-

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

 строк из набора

Существует два способа удаления строк из набора данных. Один из них

основан на использовании команды DELETE языка SQL. Другой, более
прямолинейный и грубый, предполагает написание VBA-кода, который

обеспечивает переход к каждой удаляемой строке набора данных, а также
вызывает метод Delete объекта класса Recordset.

 Синтаксис обращения к методу Delete объекта

 таков:

 Call

 (

 )

При отсутствии необязательного параметра ГруппаЗаписей будет удалена только

текущая запись набора данных. Самые распространенные допустимые значения пара-

метра ГруппаЗаписей перечислены в табл. 15.2.

Таблица 15.2. Допустимые значения аргумента метода

о

О

Значение перечислимого типа

Описание

adAf

Действие по умолчанию — удаляется текущая запись

Удаляется группа записей, определенная свойством Filter
Удаляются все записи (операция равносильна команде

DELETE FROM

 языка SQL)

Удаляются все записи раздела

Метод Delete объекта Recordset почти настолько же дееспособен, как и команда

DELETE языка SQL. Варианту вызова Call ИмяОбъекта. Delete ( adAffectAll ) со-
ответствует команда DELETE FROM ИмяТаблицы. Конечно, конструкция DELETE языка
SQL более гибкая — она позволяет, например, использовать условное предложение

WHERE для выполнения фильтрации записей по любым критериям либо вложенную

команду SELECT. Подробнее о применении SQL см. главу 16.

264

Часть V. Программирование и базы данных Access