Программирование >>  Проектирование интерфейса пользователя 

1 ... 77 78 79 [ 80 ] 81 82 83 ... 153


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

вас к цели - выбирайте самый удобный и эффективный.

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

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

новых строк и редактированием существующих. С технической точки зрения они

схожи. Прежде всего, необходимо открыть объект Connection. Затем следует создать

объект Recordset и открыть его в режиме записи, т.е. передать процедуре Recordset еп в качестве аргумента ТипКурсора одно из предопределенных значений - adOpenKeySet либо adOpenDynamic.

Чтобы добавить запись в открытый набор данных, достаточно обратиться к методу ИмяОбъекта. AddNew, где ИмяОбъекта - название корректно созданного и открытого объекта класса Далее следует присвоить полям новой записи соот-

ветствующие значения и вызвать метод позволяющий сохранить

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

Задача редактирования существующих данных так же проста. Вместо вызова метода AddNew напишите код, отыскивающий запись, которую необходимо изменить. Поиск записи может быть выполнен посредством циклической конструкции формата Do . . . Loop, в условии которой проверяется признак достижения конца набора данных (с помощью метода EOF). Можно также привлечь выражение SQL, возвращающее необходимую запись. Любой способ приемлем - правда, второй, с применением SQL, вероятно, более эффективен.

Листинг 15.4 демонстрирует пример добавления новой записи в таблицу MUSIC. (Если таблица вами еще не создана, выполните п. 1 инструкции, приведенной в предыдущем разделе, Таблицы и

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

1: 2: 3: 4: 5: 6: 7: 8: 9: 10:

11 :

12 :

Sub DemoADODB( )

Const Provider = Provider=Microsoft.Jet.OLEDB.4. О ;

Const PataSource = Pata Source=C:\Data\Hourl5.mdb

Const ConnectString = Provider & DataSource

Pim RecordSet As New ADODB.Recordset Bim Connection As New ADODB.Connection

On Error GoTo Finally Call

Call RecordSet.Open( MUSIC , Connection,

adOpenKeyset,

AdLockOptimistic )

13: 14: 15: 16: 17: 18:

RecordSet.AddNew

RecordSet( FIRST NAME ).Value = Natalie RecordSet( LAST NAME ).Value = Merchant RecordSet( TITLE ).Value = TIGERLILLY



19: 20: 21: 22:

23 :

24 : 25: 26: 27: 28:

32: 33:

RecordSet ( FORMAT alue = CD RecordSet( PUBLISHER ).Value = Elektra

RecordSet.Update RecordSet.Close Connection.Close

Finally:

If (Err.Number о 0) Then

MsgBox Err.Description Err.Clear

End If

Set RecordSet = Nothing Set Connection = Nothing End Sub

Принципиальные различия листингов 15.3 и 15.4 состоят в том, что noil следний содержит строки 14-22. В строке 14 выполняется инструкция добавления в таблицу новой записи. В строках 16-20 изменяются значения полей новой записи - с этой целью мы используем формат обращения к свойству Fields объекта RecordSet, допускаемый по умолчанию. Метод Update, который вызывается в строке 22, сохраняет внесенные изменения в базе данных.


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

cordSet. Fields ца) .Value равноценны.

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

Наименования полей строки и присваиваемые им значения могут быть переданы методу AddNew в качестве параметров. Аргументом может быть как имя одного поля, так и массив полей (первый аргумент), и массив значений, как в следующем фрагменте кода.

Dim Fields As Variant Dim Values As Variant

Eieids = Array( FIRST NAME , LAST NAME , TITLE , EORMAT , PUBLISHER )

Values = Array( Faith , Hill , Breathe , CD , Warner Bros. ) Caii Recordset.AddNew(Fields, Values)

В этом фрагменте кода объявлены и инициализированы два массива, которые передаются в метод AddNew. Однако при тестировании легче найти ошибку, если значения полей присваиваются в коде по очереди.

Редактирование полей

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



Коллекция Fields - это свойство объекта Recordset, предлагаемое по умолчанию. Вот почему выражение МИмяСтолбца) и RecordSet.Fields(ИмяСтолбца) равноправны. Кроме того, вам следует знать о существовании класса Field, объекты которого входят в состав коллекции Fields.

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

Фрагмент кода, подобный приведенному в строке 17 листинга 15.4 -RecordSet ( artist ), - означает ссылку на объект типа Field. Далее, разумеется, вы можете воспользоваться всеми атрибутами этого объекта. Так, например, часть 17-й строки - .Value - представляет собой обращение к свойству Value указанного объекта Field. Строки 16-20 могут бытъ переписаны в более строгой форме:

16: RecordSet. Fields ( FIRST NAME ).Value = Natalie 17: RecordSet. Fields ( LAST NAME ). Value = Merchant 18: RecordSet.Fields ( TITLE ).Value = TIGERLILLY 19: RecordSet. Fields ( FORMAT ). Value = CD 20: RecordSet.Fields ( PUBLISHER ).Value = Elektra

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

Удаление строк из набора данных

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

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

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

вызывает метод Delete объекта класса Recordset. ▼ Синтаксис обращения к методу Delete объекта ADODB. Recordset таков:

А Cal та. Delete мЗаписей] )

При отсутствии необязательного параметра ГруппаЗаписей будет удалена только текущая запись набора данных. Самые распространенные допустимые значения параметра ГруппаЗаписей перечислены в табл. 15.2.

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

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

Описание

adAffectCurrent adAffectGroup adAffectAll

adAf fectAllChapters

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

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

Удаляются все записи (операция равносильна команде DELETE FROM ИмяТаблицы языка SQL)

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

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



1 ... 77 78 79 [ 80 ] 81 82 83 ... 153

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика