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

на главную - закладки

Жанры

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!"

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

Матабар

Клеванский Кирилл Сергеевич
1. Матабар
Фантастика:
фэнтези
5.00
рейтинг книги
Матабар

Сильнейший Столп Империи. Книга 1

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

Цикл "Идеальный мир для Лекаря". Компиляция. Книги 1-30

Сапфир Олег
Лекарь
Фантастика:
боевая фантастика
юмористическое фэнтези
аниме
фэнтези
5.00
рейтинг книги
Цикл Идеальный мир для Лекаря. Компиляция. Книги 1-30

Абордажник

Султанов Дмитрий Игоревич
Вселенная EVE Online
Фантастика:
боевая фантастика
космическая фантастика
8.05
рейтинг книги
Абордажник

Бастард

Майерс Александр
1. Династия
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Бастард

Дважды одаренный. Том II

Тарс Элиан
2. Дважды одаренный
Фантастика:
городское фэнтези
альтернативная история
аниме
5.00
рейтинг книги
Дважды одаренный. Том II

Кодекс Охотника. Книга XXII

Винокуров Юрий
22. Кодекс Охотника
Фантастика:
фэнтези
попаданцы
5.00
рейтинг книги
Кодекс Охотника. Книга XXII

Глава рода

Шелег Дмитрий Витальевич
5. Живой лёд
Фантастика:
боевая фантастика
6.55
рейтинг книги
Глава рода

Геном хищника. Книга пятая

Гарцевич Евгений Александрович
5. Я - Легенда!
Фантастика:
рпг
фэнтези
попаданцы
6.00
рейтинг книги
Геном хищника. Книга пятая

Конец детства (сборник)

Кларк Артур Чарльз
Фантастика:
научная фантастика
7.00
рейтинг книги
Конец детства (сборник)

Гранд империи

Земляной Андрей Борисович
3. Страж
Фантастика:
фэнтези
попаданцы
альтернативная история
5.60
рейтинг книги
Гранд империи

Гримуар темного лорда VI

Грехов Тимофей
6. Гримуар темного лорда
Фантастика:
попаданцы
аниме
фэнтези
5.25
рейтинг книги
Гримуар темного лорда VI

Эпоха Опустошителя. Том IX

Павлов Вел
9. Вечное Ристалище
Фантастика:
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Эпоха Опустошителя. Том IX

Я не князь. Книга XIII

Дрейк Сириус
13. Дорогой барон!
Фантастика:
юмористическое фэнтези
попаданцы
аниме
5.00
рейтинг книги
Я не князь. Книга XIII