Чтение онлайн

на главную

Жанры

VBA для чайников

Каммингс Стив

Шрифт:

Таблица 17.1. Типы курсоров, доступные для объекта Recordset

Тип курсора

Константа-значение свойства CursorType

Определение

Forward-only

adOpenForwardOnly

Разрешает перемещение между элементами объекта только в одном направлении, или на определенное количество записей, или к последней записи. Изменения, внесенные другими пользователями, не появляются до тех пор, пока набор записей не будет закрыт, а затем снова открыт. Этот тип курсора обеспечивает максимальное быстродействие, но только в том случае, если

вам необходимо перемещаться по записям всего один раз

Static

adOpenStatic

Фиксированный набор записей, который не может быть обновлен и не отражает изменения, внесенные другими пользователями, до тех пор, пока он не будет закрыт, а затем снова открыт. Этот вариант подходит для поиска данных и создания отчетов, обеспечивая более высокую скорость, чем варианты Keyset и Dynamic

Keyset

adOpenKeyset

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

Dynamic

adOpenDynamic

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

Свойство Cursor Location объекта Recordset позволяет вам определить, будет ли курсор находиться на компьютере пользователя (компьютере клиента) или на сервере. Для этого присвойте ему значение adUseClient или adUseServer соответственно. Вообще, используйте курсоры на стороне клиента при работе с базами данных SQL Server и другими

сетевыми базами данных, а курсоры на сервере - при работе с базами данных Jet. Вы можете определить расположение курсора по умолчанию для всех наборов записей подключения с помощью свойства Cursor Type объекта Connection. блокирование

Свойство LockType объекта Recordset определяет, как именно должна вести себя программа в том случае, если два или больше пользователей пытаются одновременно изменить одну и ту же запись. По умолчанию значение этого свойства равно adLockPessimistic, что предотвращает внесение изменений. Если вы хотите иметь возможность изменять набор записей, вы должны присвоить свойству LockType одно из значений, приведенных в табл. 17.2.

Таблица 17.2. Параметры блокировки для объектов Recordset

Тип блокировки

Константа-значение свойства LockType

Определение

No lock (Блокировка отсутствует)

adLockOptimistic

Несколько пользователей могут одновременно изменять одну и ту же запись, однако при этом получают уведомление о том, что внесенные ими изменения могут конфликтовать с изменениями, внесенными другими пользователями (записи блокируются только при выполнении метода UpDate). Этот вариант хорошо подходит для баз данных, с которыми работает только один пользователь, а также многопользовательских баз данных, в которых всегда правильными и полными считаются сведения, добавленные самыми последними

Batch update

(Пакетное обновление)

adLockBatchOptimistic

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

Read only (all records)

(Только чтение (все записи))

adLockReadOnly

Все записи блокируются в то время, когда набор записей открыт; изменять их не может ни один пользователь, Однако доступ к записям разрешен

Read only

(edited records) (Только

чтение (изменяемые записи))

adLockPessimistic

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

Проверка записей

Если при создании объекта Recordset с помощью VBA не возникло никаких проблем, вашим первым действием должна быть проверка того, что полученный набор вообще содержит какие-то данные. Если это так, сообщите пользователю о том, что для работы недоступна ни одна запись. Прием заключается в проверке значений свойств BOF (Beginning Of File - Метка начала файла) и EOF (End Of File- конец файла). Если значения обоих свойств равны True, набор записей пуст. Лучший способ организации подобной проверки- использование логического оператора And, который возвращает значение True только в том случае, если оба логических выражения равны True, как показано в приведенном ниже примере:

If rstY.30F and rstY.EOF Then

MsgВох "Записи в этом наборе отсутствуют!"

End If

ADO позволяет вам перемещаться по набору записей достаточно легко. Например, для перемещения к первой записи в наборе используется метод MoveFirst, для перемещения к последней записи в наборе- метод MoveLast, а для перемещения к следующей -1ли предыдущей записи в наборе- метод MoveNext или MovePr evi ous соответственно. Метод Move позволяет вам перемещаться на определенное количество записей в наборе вперед или назад. Например, инструкция rstZ.Move -3 перемещает на три записи назад.

Если вы точно знаете, что захотите вернуться к определенной записи в дальнейшем, создайте для этой записи закладку. При работе с записью присвойте переменной значение свойства Bookmark объекта Recordset, как показано ниже:

varBookmark1 = rstA.Bookmark

После этого вы можете вернуться к этой закладке в дальнейшем, просто обратив инструкции:

rstA.Bookmark = varBookmark1

Метод Seek, а также четыре метода Find ( FindFist, FindLat, FindNext и FindPrevious ) позволяют вам отследить определенную запись, базируясь на ее содержимом. Поскольку метод Seek обнаруживает целевую запись, используя индексный номер, он работает намного быстрее, чем методы Find, однако, прежде чем вы сможете его использовать, содержимое базы данных должно быть проиндексировано.

Используйте метод AddNew для занесения новой записи в набор или перехода к новой записи. Если вы уже создали новый объект Recordset под названием rstIng, все, что вам необходимо для добавления новой записи, - это инструкция rst.Ing. После этого вы можете приступать к заполнению полей записи (подробности в разделе '"Изменение данных поля" дальше в настоящей главе). Однако, если хотите, можете указать значения полей сразу при создании новой записи. Метод -AddXew позволяет вам указывать поля и их значения, как показано ниже:

With rstIng

Array ( "Имя", "Возраст", "Пол"; .

Array("Анна", 42, "Ж")

End With

Как видно из этого примера, вы передаете аргументы методу AddNew в виде пары массивов, первый из которых содержит имена полей, а второй - их значения. В этом примере я использовал функцию Array VBA для создания на ходу массива, содержащего строковые значения. Вместо этого вы можете использовать переменные, представляющие массивы, которые вы создали раньше. В любом случае подобный прием для обеспечения значений полей массивов в момент создания новой записи означает, что вам не нужно вводить отдельную строку кода для каждого поля.

Для удаления текущей записи предназначен метод Delete.

Работа с текущим значением определенного поля с помощью программного кода так же проста, как и считывание значения свойства Value этого поля. Укажите поле по имени или по его индексному номеру, как показано в приведенных ниже примерах. Обратите внимание на то, что свойство Value является свойством по умолчанию, поэтому указывать его в коде не обязательно:

If rstYGate.Fields ("Service visits").Value >10

MsgBox "This unitneeds a major over haul!"

Поделиться:
Популярные книги

Проиграем?

Юнина Наталья
Любовные романы:
современные любовные романы
6.33
рейтинг книги
Проиграем?

Измена. Не прощу

Леманн Анастасия
1. Измены
Любовные романы:
современные любовные романы
4.00
рейтинг книги
Измена. Не прощу

Кодекс Крови. Книга IХ

Борзых М.
9. РОС: Кодекс Крови
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Кодекс Крови. Книга IХ

Стеллар. Заклинатель

Прокофьев Роман Юрьевич
3. Стеллар
Фантастика:
боевая фантастика
8.40
рейтинг книги
Стеллар. Заклинатель

Сумеречный стрелок

Карелин Сергей Витальевич
1. Сумеречный стрелок
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Сумеречный стрелок

Кремлевские звезды

Ромов Дмитрий
6. Цеховик
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Кремлевские звезды

Курсант: Назад в СССР 4

Дамиров Рафаэль
4. Курсант
Фантастика:
попаданцы
альтернативная история
7.76
рейтинг книги
Курсант: Назад в СССР 4

Камень. Книга 4

Минин Станислав
4. Камень
Фантастика:
боевая фантастика
7.77
рейтинг книги
Камень. Книга 4

Сердце Дракона. нейросеть в мире боевых искусств (главы 1-650)

Клеванский Кирилл Сергеевич
Фантастика:
фэнтези
героическая фантастика
боевая фантастика
7.51
рейтинг книги
Сердце Дракона. нейросеть в мире боевых искусств (главы 1-650)

Действуй, дядя Доктор!

Юнина Наталья
Любовные романы:
короткие любовные романы
6.83
рейтинг книги
Действуй, дядя Доктор!

Убийца

Бубела Олег Николаевич
3. Совсем не герой
Фантастика:
фэнтези
попаданцы
9.26
рейтинг книги
Убийца

(Бес) Предел

Юнина Наталья
Любовные романы:
современные любовные романы
6.75
рейтинг книги
(Бес) Предел

Неудержимый. Книга XII

Боярский Андрей
12. Неудержимый
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Неудержимый. Книга XII

Ваше Сиятельство 8

Моури Эрли
8. Ваше Сиятельство
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Ваше Сиятельство 8