« Поставить закладку » « Сделать стартовой »

« Форумы » « Блоги » « Статьи » « Новости » « Файлы » « Realcoding IRC » « Site map » « Поиск »


Главная Главная
Анонсы Анонсы
Форумы Форумы
Каталог Каталог
Поиск Поиск
Опросы Опросы
Книжный магазин Книжный магазин
Реклама на сайте
Публикации Публикации
Партнеры Партнеры
Карта Карта сайта
Рассылки Рассылки
RSS экспорт
Настройки Настройки
О нас пишут О нас пишут
Контакты Контакты
Гостевая книга Гостевая книга


ПнВтСрЧтПтСбВс
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31  
    Популярное
Отладка программы

Функция AccessResource

Расширенное программирование Facelets

Комбинирование в представлении локальных и удаленных данных

Инструментальные палитры

Коллекция параметров

Функция GetModuleHandle

ГЛАВА 17. Взаимодействие с неуправляемым кодом

Новое в CSS 3: анимация, трансформация, переменные

Математические функции




    Архив файлов



    Сообщества

    Документация

    Кто на сайте
Вы не зарегистрированы.
Имя:

Пароль:

Запомнить

Регистрация позволит Вам пользоваться дополнительными сервисами.
Сейчас на сайте:
Гостей: 137
Пользователей: 0

Статьи:: Базы данных :: Access :: Методы и обьекты MS Access



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

Методы и обьекты MS Access



Использование помощника в Microsoft Access
Для использования в Microsoft Access объектов Microsoft Office, включая помощника, необходимо сна-чала установить ссылку на объектную библиотеку Microsoft Office. Находясь в режиме конструктора мо-дуля, выберите в меню Сервис команду Ссылки и установите флажок Microsoft Office 8.0 Object Library.
Если эта ссылка не установлена, при попытке использования объектов из объектной библиотеки Microsoft Office будет выдано сообщение об ошибке компиляции «Не описан определяемый пользова-телем тип».
Примечание. В автономно выполняемой версии Microsoft Access помощник недоступен.
Общие сведения о помощнике (Microsoft Access)
Для использования в Microsoft Access объектов Microsoft Office необходимо сначала установить ссылку на объектную библиотеку Microsoft Office. Находясь в режиме конструктора модуля, выберите в меню Сервис команду Ссылки и установите флажок Microsoft Office 8.0 Object Library.
Если эта ссылка не установлена, при попытке использования объектов из объектной библиотеки Microsoft Office будет выдано сообщение об ошибке компиляции «Не описан определяемый пользова-телем тип».
После установки ссылки на объектную библиотеку Microsoft Office объекты, свойства и методы Microsoft Office отображаются в окне просмотра объектов. Для программирования помощника используются объ-екты Assistant, Balloon, BalloonCheckbox и BalloonLabel, а также семейства BalloonCheckboxes и BalloonLabels.
Следующие свойства объекта Assistant недоступны в Microsoft Access, хотя они могут быть доступны в других приложениях Microsoft Office:
• свойство FeatureTips
• свойство HighPriorityTips
• свойство KeyboardShortcutTips
• свойство MouseTips
Примечание. В автономно выполняемой версии Microsoft Access помощник недоступен.
Свойство Callback (Microsoft Access)
Свойство Callback используется при работе с немодальным окном подсказки. Немодальное окно под-сказки позволяет пользователю перейти к приложению, в котором он работает, не закрывая это окно. Такое окно полезно для создания подсказки, которая должна быть постоянно видима при выполнении определенной последовательности действий в программе. Чтобы сделать окно подсказки немодаль-ным, следует свойству Mode объекта Balloon присвоить значение msoModeModeless.
Свойство Callback задает функцию или макрос, выполняющиеся при нажатии пользователем кнопки в окне подсказки. Если в свойстве Callback задан вызов функции, эта функция может определить нажа-тую клавишу.
Свойству Callback присваивается имя функции или макроса. Например, в следующей строке задается значение свойства Callback:
Assistant.NewBalloon.Callback = "АнализФлажков"
Следует отметить, что значением свойства Callback может быть имя только процедуры Function; исполь-зование имени процедуры Sub не допускается. Процедура Function должна быть объявлена общей.
Помощник (Microsoft Access), пример
В следующей функции создается специальное окно подсказки помощника и определяется ответ поль-зователя:
Function AssistantBalloon(Optional varCheck As Variant, Optional varLabel As Variant)
Dim bch As BalloonCheckbox
Dim intI As Integer
Dim intReturn As Integer
Dim strCheck(5) As String
Dim strList As String
' Создает новое окно подсказки.
Set bal = Assistant.NewBalloon
' Задает тип окна подсказки.
bal.BalloonType = msoBalloonTypeButtons
' Указывает, что окно подсказки модальное.
bal.Mode = msoModeModal
' Делает помощника видимым.
If Assistant.Visible = False Then Assistant.Visible = True
' Проверяет, был ли передан в функцию первый аргумент.
If Not IsMissing(varCheck) Then
' Если значение слишком велико, задает максимальное число флажков (5).
If varCheck > 6 Then
varCheck = 5
End If
' Присваивает свойству «Текст» (Text) символы алфавита.
For intI = 1 To varCheck
bal.Checkboxes(intI).Text = Chr(64 + intI)
Next intI
End If
If Not IsMissing(varLabel) Then
' Если значение слишком велико, задает максимальное число меток (5).
If varLabel > 6 Then
varLabel = 5
End If
For intI = 1 To varLabel
' Присваивает свойству «Текст» (Text) символы алфавита.
bal.Labels(intI).Text = Chr(64 + intI)
Next intI
End If
' Сохраняет возвращаемое значение.
intReturn = bal.Show
intI = 0
' Определяет установленные флажки.
For Each bch In bal.Checkboxes
If bch.Checked = True Then
strCheck(intI) = bch.Text
strList = strList & "'" & strCheck(intI) & "'" & Chr(32)
End If
intI = intI + 1
Next
If Len(strList) <> 0 Then
MsgBox "Установлены флажки " & strList & "."
End If
' Определить выделенные метки.
If intReturn > 0 Then
MsgBox "Выделены метки " & bal.Labels(intReturn).Text & "."
End If
End Function
Эта функция может быть вызвана из окна отладки следующим образом:
? AssistantBalloon(4, 5)
Метод AddNew (Microsoft Access)
При использовании закладки в модуле Microsoft Access необходимо включить инструкцию Option Compare Binary в раздел описаний модуля. Закладка представляет из себя массив типа Variant дан-ных, принадлежащих к типу Byte, поэтому для модуля необходимо выбрать двоичный способ сравнения строк. Если для проверки закладки используется способ сравнения текстовых строк, задающийся инст-рукцией Option Compare Text, или стандартная настройка Option Compare Database, то указатель те-кущей записи может быть установлен на неверную запись.
Метод Clone (Microsoft Access)
При использовании свойства Bookmark объекта Recordset в модуле Microsoft Access необходимо включить инструкцию Option Compare Binary в раздел описаний модуля. Закладка представляет из се-бя массив типа Variant данных, принадлежащих к типу Byte, поэтому для модуля необходимо выбрать двоичный способ сравнения строк. Если для проверки закладки используется способ сравнения тексто-вых строк, задающийся инструкцией Option Compare Text, или стандартная настройка Option Compare Database, то указатель текущей записи может быть установлен на неверную запись.
Метод Close (Microsoft Access)
Если в процедуре Visual Basic содержится объектная переменная, представляющая базу данных, кото-рая является текущей базой данных, открытой в Microsoft Access, то вызов метода Close для этого объ-екта приведет к выходу переменной из области определения. Вызов метода Close не изменит состоя-ния базы данных, открытой в окне базы данных Microsoft Access.
Метод CompactDatabase (Microsoft Access)
Для сжатия базы данных из окна Microsoft Access следует в меню Сервис выбрать команду Служебные программы и подкоманду Сжать базу данных. Для сжатия базы данных из программы Visual Basic следует воспользоваться методом DAO CompactDatabase.
Примечание. Выполнение метода CompactDatabase не приводит к полному преобразованию базы данных Microsoft Access от одной версии к другой. Преобразуется только формат данных. Объекты, оп-ределяемые в Microsoft Access, такие как формы и отчеты, не преобразуются. Для преобразования ба-зы данных Microsoft Access от ранней версии к текущей следует выбрать в меню Сервис команду Слу-жебные программы и подкоманду Преобразовать базу данных.
Метод CreateDatabase (Microsoft Access)
Метод CreateDatabase позволяет создать новую базу данных в программе Visual Basic. Новая база данных будет немедленно открыта, добавлена в семейство Databases и сохранена на диске.
Команда CreateDatabase не влияет на базу данных, открытую в окне базы данных Microsoft Access. Она остается открытой и является первой базой данных в семействе Databases. Функция CurrentDb воз-вращает ссылку на открытую в окне базу данных.
Для того чтобы открыть базу данных, созданную с помощью метода CreateDatabase, в окне базы дан-ных, необходимо выбрать в меню Файл команду Открыть.
Метод CreateGroup (Microsoft Access)
После создания нового объекта Group и добавления его в семейство Groups объекта Workspace или User допускается проверка существования новой группы с помощью раскрывающегося списка Имя на вкладке Группы в диалоговом окне Пользователи и группы. Для того чтобы открыть это диалоговое окно, выберите в меню Сервис команду Защита и команду Пользователи и группы в подменю.
Метод CreateProperty (Microsoft Access)
Microsoft Access определяет ряд свойств объектов доступа к данным. Эти свойства не распознаются ав-томатически ядром базы данных Microsoft Jet. Для того чтобы задавать или возвращать в программах Visual Basic значение свойства, определяемого в Microsoft Access, необходимо явно добавить это свой-ство в семейство Properties объекта, к которому это свойство относится. Для этого следует сначала создать свойство с помощью метода CreateProperty, а затем добавить свойство в семейство Properties.
Например, в Microsoft Access описано свойство Description объекта TableDef. Если значение этого свойства уже не было задано в режиме конструктора таблиц, следует с помощью метода CreateProperty создать свойство, а затем добавить его в семейство Properties.
Свойство, определяемое в Microsoft Access, автоматически добавляется в семейство Properties при первом задании значения этого свойства в окне Microsoft Access. Если свойство уже определено таким способом, то нет необходимости явно добавлять его в семейство Properties.
При разработке программы, задающей значение свойства, определяемого в Microsoft Access, необхо-димо включить в нее блок обработки ошибок, который создает объект Property, представляющий дан-ное свойство, и добавляет его в семейство Properties, если это свойство еще не включено в семейство.
При ссылках в программах Visual Basic на свойство, определяемое в Microsoft Access, необходимо явно сослаться на семейство Properties. Например, ссылка на свойство AppTitle после включения этого свойства в семейство Properties объекта Database, представляющего текущую базу данных, будет вы-глядеть следующим образом
Dim dbs As Database
Set dbs = CurrentDb
dbs.Properties!AppTitle = "Борей"
Примечание. Создавать и добавлять в семейство требуется только те свойства Microsoft Access, ко-торые относятся к объектам доступа к данным. Значения других свойств Microsoft Access задаются в программе Visual Basic с помощью стандартного синтаксиса объект.ИмяСвойства.
Метод CreateUser (Microsoft Access)
После создания нового объекта User и добавления его в семейство Users объекта Workspace или User, допускается проверка существования нового имени пользователя с помощью раскрывающегося списка Имя на вкладке Пользователи в диалоговом окне Пользователи и группы. Для того чтобы от-крыть это диалоговое окно, выберите в меню Сервис команду Защита и команду Пользователи и группы в подменю.
Метод FillCache (Microsoft Access)
При использовании закладки в модуле Microsoft Access необходимо включить инструкцию Option Compare Binary в раздел описаний модуля. Закладка представляет из себя массив типа Variant дан-ных, принадлежащих к типу Byte, поэтому для модуля необходимо выбрать двоичный способ сравнения строк. Если для проверки закладки используется способ сравнения текстовых строк, то указатель теку-щей записи может быть установлен на неверную запись. Инструкция Option Compare Text задает спо-соб сравнения текстовых строк, аналогично устанавливаемой по умолчанию настройке Option Compare Database.
Методы FindFirst, FindLast, FindNext, FindPrevious (Microsoft Access)
При указании условий в методах группы Find необходимо проявлять аккуратность в ссылочных полях и элементах управления, а также правильно задавать строку поиска. Более подробное описание задания условий в функциях по подмножеству и использования кавычек в строковых выражениях содержится в разделе справки «Статистические функции по подмножеству».
При использовании закладки в модуле Microsoft Access необходимо включить инструкцию Option Compare Binary в раздел описаний модуля. Закладка представляет из себя массив типа Variant дан-ных, принадлежащих к типу Byte, поэтому для модуля необходимо выбрать двоичный способ сравнения строк. Если для проверки закладки используется способ сравнения текстовых строк, задающийся инст-рукцией Option Compare Text, или стандартная настройка Option Compare Database, то указатель те-кущей записи может быть установлен на неверную запись.
Метод GetChunk (Microsoft Access)
После выполнения метода GetChunk и записи результата в строковую переменную функция Visual Basic Len позволяет определить число символов в строке. Определить размер строки в байтах позво-ляет функция LenB.
Метод Move (Microsoft Access)
При использовании закладки в модуле Microsoft Access необходимо включить инструкцию Option Compare Binary в раздел описаний модуля. Закладка представляет из себя массив типа Variant дан-ных, принадлежащих к типу Byte, поэтому для модуля необходимо выбрать двоичный способ сравнения строк. Если для проверки закладки используется способ сравнения текстовых строк, задающийся инст-рукцией Option Compare Text, или стандартная настройка Option Compare Database, то указатель те-кущей записи может быть установлен на неверную запись.
Метод OpenDatabase (Microsoft Access)
В Microsoft Access для связывания переменной типа Database с текущей базой данных следует исполь-зовать функцию CurrentDb, как показано в следующем примере.
Dim dbsCurrent As Database
Set dbsCurrent = CurrentDb
Метод OpenDatabase следует использовать для открытия базы данных, отличной от текущей.
Метод Update (Microsoft Access)
При использовании закладки в модуле Microsoft Access необходимо включить инструкцию Option Compare Binary в раздел описаний модуля. Закладка представляет из себя массив типа Variant дан-ных, принадлежащих к типу Byte, поэтому для модуля необходимо выбрать двоичный способ сравнения строк. Если для проверки закладки используется способ сравнения текстовых строк, задающийся инст-рукцией Option Compare Text, или стандартная настройка Option Compare Database, то указатель те-кущей записи может быть установлен на неверную запись.
МетодAddNew (Microsoft Access), пример
В следующем примере в таблице «Сотрудники» создается новая запись и сохраняются внесенные в нее изменения:
Sub AddNewRecord(ByVal rst As Recordset, _
strLast As String, strFirst As String)
With rst
.AddNew ' Добавляет новую запись.
!Фамилия = strLast ' Заполнение данными.
!Имя = strFirst
.Update ' Сохранение изменений.
End With
End Sub
Метод Append (Microsoft Access), пример
В следующем примере описывается и добавляется в семейство Fields объекта TableDef новый объект типа Field:
Sub NewField()
Dim dbs As Database, tdf As TableDef, fld As Field
' Возвращает ссылку на текущую базу данных.
Set dbs = CurrentDb
Set tdf = dbs.TableDefs!Сотрудники
' Создает новое поле в таблице «Сотрудники».
Set fld = tdf.CreateField("Образование", dbText, 11)
' Добавляет поле и обновляет семейство.
tdf.Fields.Append fld
tdf.Fields.Refresh
Set dbs = Nothing
End Sub
Методы AppendChunk и GetChunk (Microsoft Access), пример
В следующем примере в поле «Примечания» каждой записи таблицы «Сотрудники» добавляются неко-торые сведения. Поле «Примечания» имеет тип MEMO. Для получения содержимого поля используется метод GetChunk, для добавления сведений и внесения измененного блока данных в поле «Примеча-ния» используется метод AppendChunk.
Sub AddToMemo()
Dim dbs As Database, rst As Recordset
Dim fldNotes As Field, fldFirstName As Field
Dim fldLastName As Field
Dim lngSize As Long, strChunk As String
' Возвращает ссылку на текущую базу данных.
Set dbs = CurrentDb
' Создает табличный объект Recordset.
Set rst = dbs.OpenRecordset("Сотрудники")
' Возвращает ссылки на объекты Field.
Set fldNotes = rst!Примечания
Set fldFirstName = rst!Имя
Set fldLastName = rst!Фамилия
' Цикл по всем записям в наборе записей.
Do Until rst.EOF
' Проверяет существование данных в поле «Примечания».
If IsNull(fldNotes.Value) Then
' Если данных нет, используется только метод AppendChunk.
strChunk = fldFirstName _
& " " & fldLastName & " отличный сотрудник."
With rst
.Edit
!Примечания = strChunk
.Update
.MoveNext
End With
Else
lngSize = Len(fldNotes)
' Получает существующие данные с помощью метода GetChunk.
strChunk = fldNotes.GetChunk(0, lngSize)
' Изменяет данные.
strChunk = strChunk & " " & fldFirstName _
& " " & fldLastName & " отличный работник."
With rst
.Edit ' Разрешает редактирование.
!Примечания = "" ' Инициализирует поле.
!Примечания.AppendChunk strChunk ' Добавляет измененные данные.
.Update ' Сохраняет изменения.
.MoveNext ' Переходит к следующей записи.
End With
End If
Loop
rst.Close
Set dbs = Nothing
End Sub
Методы BeginTrans, CommitTrans и Rollback (Microsoft Access), пример
В следующем примере в таблице «Сотрудники» изменяются названия должностей всех сотрудников, являющихся представителями. Метод BeginTrans начинает транзакцию, изолирующую все изменения в таблице «Сотрудники», а метод CommitTrans сохраняет внесенные изменения. Метод Rollback служит для отмены изменений, сохраненных с помощью метода Update. В примере также показано, как устано-вить флаг для корректной обработки ошибок, возникающих во время транзакции.
Пока пользователь решает, сохранять ли ему изменения или нет, одна или несколько страниц таблицы остаются заблокированными. Поэтому, нижеследующую процедуру не рекомендуется применять на практике, она приведена только в качестве примера.
Sub ChangeTitle()
Dim wsp As Workspace, dbs As Database, rst As Recordset
Dim strName As String, strMessage As String, strPrompt As String
Dim fInTrans As Boolean
On Error GoTo ChangeTitleErr
fInTrans = False
strPrompt = "Изменить должность на 'Менеджер по продажам'?"
' Возвращает ссылку на заданный по умолчанию объект Workspace.
Set wsp = DBEngine.Workspaces(0)
' Возвращает ссылку на текущую базу данных.
Set dbs = CurrentDb
' Создает табличный объект Recordset.
Set rst = dbs.OpenRecordset("Сотрудники", dbOpenTable)
' Начало транзакции.
wsp.BeginTrans
fInTrans = True
rst.MoveFirst
Do Until rst.EOF
If rst!Должность = "Представитель" Then
strName = rst!Фамилия & ", " & rst!Имя
strMessage = "Сотрудник: " & strName & vbCrLf & vbCrLf
If MsgBox(strMessage & strPrompt, vbQuestion + vbYesNo, _
"Изменить должность") = vbYes Then
' Разрешает редактирование.
rst.Edit
rst!Должность = "Менеджер по продажам"
' Сохраняет изменения.
rst.Update
End If
End If
' Переходит к следующей записи.
rst.MoveNext
Loop
If MsgBox("Сохранить все изменения?", vbQuestion + vbYesNo, _
" Сохранение изменений") = vbYes Then
wsp.CommitTrans ' Принимает изменения.
Else
wsp.Rollback ' Отменяет изменения.
End If
ChangeTitleExit:
rst.Close
Set dbs = Nothing
Set wsp = Nothing
Exit Sub
ChangeTitleErr:
MsgBox "Ошибка!"
If fInTrans Then
wsp.Rollback
End If
Resume ChangeTitleExit
End Sub
Методы CancelUpdate и Update (Microsoft Access), пример
В следующем примере в таблицу «Сотрудники» добавляется новая запись, вводятся значения, и поль-зователю предлагается сохранить изменения. Если пользователь отказывается от сохранения, метод Update не вызывается.
Sub NewRecord()
Dim dbs As Database, rst As Recordset
' Возвращает ссылку на текущую базу данных.
Set dbs = CurrentDb
Set rst = dbs.OpenRecordset("Сотрудники")
With rst
' Добавляет новую запись в конец объекта Recordset.
.AddNew
!Фамилия = "Иванов" ' Ввести данные.
!Имя = "Александр"
End With
' Предлагает пользователю сохранить изменения.
If MsgBox("Сохранить изменения?", vbYesNo) = vbNo Then
' Если пользователь отказался, отменяет изменения.
rst.CancelUpdate
Else
' Если пользователь согласился, сохраняет изменения.
rst.Update
End If
rst.Close
Set dbs = Nothing
End Sub
Метод Clone (Microsoft Access), пример
В следующем примере из таблицы «Сотрудники» с помощью инструкции SQL создается объект Recordset, а затем используется метод Clone для получения копии объекта Recordset с тем, чтобы можно было использовать закладки совместно в двух объектах. Этот способ особенно важен при срав-нении результатов запроса одновременно из нескольких точек.
Эта функция читает и сохраняет в строковой переменной значение свойства Bookmark текущей запи-си – в данном случае вторую запись исходного объекта Recordset. Свойству Bookmark копии объекта Recordset присваивается эта строка, так же помечая вторую запись в качестве текущей. Текущие зна-чения поля «Фамилия» двух объектов совпадают, что можно проверить в окне отладки.
Sub CreateClone()
Dim dbs As Database
Dim rstEmployees As Recordset, rstDuplicate As Recordset
Dim fldName As Field, varBook As Variant
' Возвращает ссылку на текущую базу данных.
Set dbs = CurrentDb
' Открывает динамический объект Recordset.
Set rstEmployees = dbs.OpenRecordset("SELECT * FROM Сотрудники " _
& " ORDER BY Фамилия")
' Создает копию объекта Recordset.
Set rstDuplicate = rstEmployees.Clone
Set fldName = rstEmployees.Fields!Фамилия
' Устанавливает текущую запись.
rstEmployees.MoveFirst
' Переходит ко второй записи.
rstEmployees.MoveNext
' Получает значение свойства Bookmark и выводит значение текущего поля.
If rstEmployees.Bookmarkable Then
varBook = rstEmployees.Bookmark
Debug.Print fldName.value
Else
' Если объект Recordset не поддерживает закладки, завершает процедуру.
ExitCreateClone
End If
' Присваивает свойству копии Bookmark полученное значение.
rstDuplicate.Bookmark = varBook
Debug.Print fldName.value
ExitCreateClone:
rstEmployees.Close
rstDuplicate.Close
Set dbs = Nothing
End Sub
Метод Close (Microsoft Access), пример
В следующем примере создается объект Database, указывающий на текущую базу данных, а также на основе таблицы «Клиенты» открывается табличный объект Recordset. В этой процедуре метод Close применяется для освобождения занимаемой памяти к объектной переменной типа Recordset. Затем инструкция Set с ключевым словом Nothing освобождает ресурсы, занимаемые объектной переменной типа Database.
Метод Close объекта Database может также применяться для закрытия базы данных и освобождения памяти. Метод Close объекта Database в действительности не закрывает открытую в Microsoft Access базу данных, он только освобождает ресурсы, используемые объектной переменной типа Database.
Эквивалентным способом освобождения памяти является вызов метода Close объекта и присваивание объектной переменной значения Nothing.
Sub UseClose()
Dim dbs As Database, rst As Recordset
' Возвращает ссылку на текущую базу данных.
Set dbs = CurrentDb
' Создает табличный объект Recordset.
Set rst = dbs.OpenRecordset("Клиенты")
.
.
.
' Закрывает объект Recordset, чтобы освободить память.
rst.Close
' Освобождает память, занимаемую объектной переменной.
Set dbs = Nothing
End Sub
Метод CopyQueryDef (Microsoft Access), пример
В следующем примере метод CopyQueryDef используется для получения копии объекта QueryDef, представляющего запрос «Счета», и вывода свойства SQL этого объекта QueryDef.
Sub GetQueryDefCopy()
Dim dbs As Database, rst As Recordset
Dim qdfOriginal As QueryDef, qdfCopy As QueryDef
' Возвращает ссылку на текущую базу данных.
Set dbs = CurrentDb
' Возвращает ссылку на запрос «Счета».
Set qdfOriginal = dbs.QueryDefs!Счета
' Открывает динамический объект Recordset.
Set rst = qdfOriginal.OpenRecordset
' Получает копию исходного объекта QueryDef.
Set qdfCopy = rst.CopyQueryDef
' Выводит значение свойства SQL для копии объекта.
Debug.Print qdfCopy.SQL
rst.Close
Set dbs = Nothing
End Sub
Метод CreateDatabase (Microsoft Access), пример
В следующем примере метод CreateDatabase используется для создания новой зашифрованной базы данных с именем НоваяБД.mdb:
Sub NewDatabase()
Dim wspDefault As Workspace, dbs As Database
Dim tdf As TableDef, fld1 As Field, fld2 As Field
Dim idx As Index, fldIndex As Field
Set wspDefault = DBEngine.Workspaces(0)
' Создает новую зашифрованную базу данных.
Set dbs = wspDefault.CreateDatabase("НоваяБД.mdb", _
dbLangGeneral, dbEncrypt)
' Создает новую таблицу с двумя полями.
Set tdf = dbs.CreateTableDef("Контакты")
Set fld1 = tdf.CreateField("КодКонтакта", dbLong)
fld1.Attributes = fld1.Attributes + dbAutoIncrField
Set fld2 = tdf.CreateField("НазваниеКонтакта", dbText, 50)
' Добавляет поля.
tdf.Fields.Append fld1
tdf.Fields.Append fld2
' Создает индекс по ключевому полю.
Set idx = tdf.CreateIndex("КлючевоеПоле")
Set fldIndex = idx.CreateField("КодКонтакта", dbLong)
' Добавляет поля индекса.
idx.Fields.Append fldIndex
' Задает значение свойства Primary.
idx.Primary = True
' Добавляет индекс.
tdf.Indexes.Append idx
' Добавляет объект TableDef.
dbs.TableDefs.Append tdf
dbs.TableDefs.Refresh
Set dbs = Nothing
End Sub
Метод CreateField (Microsoft Access), пример
В следующем примере создается новая таблица с двумя новыми полями. Одно из этих полей имеет тип «Счетчик». Это поле становится ключевым полем таблицы.
Sub NewTable()
Dim dbs As Database
Dim tdf As TableDef, fld1 As Field, fld2 As Field
Dim idx As Index, fldIndex As Field
' Возвращает ссылку на текущую базу данных.
Set dbs = CurrentDb
' Создает новую таблицу с двумя новыми полями.
Set tdf = dbs.CreateTableDef("Контакты")
Set fld1 = tdf.CreateField("КодКонтакта", dbLong)
fld1.Attributes = fld1.Attributes + dbAutoIncrField
Set fld2 = tdf.CreateField("НазваниеКонтакта", dbText, 50)
' Добавляет поля.
tdf.Fields.Append fld1
tdf.Fields.Append fld2
' Создает индекс по ключевому полю.
Set idx = tdf.CreateIndex("Ключевое поле")
Set fldIndex = idx.CreateField("КодКонтакта", dbLong)
' Добавляет поля индекса.
idx.Fields.Append fldIndex
' Задает значение свойства Primary.
idx.Primary = True
' Добавляет индекс.
tdf.Indexes.Append idx
' Добавляет объект TableDef.
dbs.TableDefs.Append tdf
dbs.TableDefs.Refresh
Set dbs = Nothing
End Sub
Метод CreateIndex (Microsoft Access), пример
В следующем примере в таблице «Сотрудники» создается новый объект типа Index. Новый индекс со-стоит из двух полей: «Фамилия» и «Имя».
Sub NewIndex()
Dim dbs As Database, tdf As TableDef
Dim idx As Index
Dim fldLastName As Field, fldFirstName As Field
' Возвращает ссылку на текущую базу данных.
Set dbs = CurrentDb
' Возвращает ссылку на таблицу «Сотрудники».
Set tdf = dbs.TableDefs!Сотрудники
' Возвращает ссылку на новый индекс.
Set idx = tdf.CreateIndex("ФИО")
' Создает и добавляет поля индекса.
Set fldLastName = idx.CreateField("Фамилия", dbText)
Set fldFirstName = idx.CreateField("Имя", dbText)
idx.Fields.Append fldLastName
idx.Fields.Append fldFirstName
' Добавляет объект Index и обновляет семейство.
tdf.Indexes.Append idx
tdf.Indexes.Refresh
Set dbs = Nothing
End Sub
Метод CreateProperty (Microsoft Access), пример
В первой процедуре следующего примера функция SetAccessProperty является общей функцией для задания значения свойства. Если необходимое свойство уже имеет соответствующий объект Property в семействе Properties, эта функция просто присваивает свойству требуемое значение. Если же у свой-ства нет соответствующего объекта Property в семействе Properties, функция создает такой объект и добавляет его в семейство.
Во второй процедуре с помощью функции SetAccessProperty задается значение свойства Subject. Свойство Subject является свойством базы данных и может быть также изменено на вкладке Документ диалогового окна Свойства, вызываемого по команде Свойства базы данных из меню Файл.
Свойство Subject относится к объекту DAO  объекту Document с именем SummaryInfo, определенно-му в Microsoft Access. Если для объекта Document SummaryInfo свойство Subject еще не существует в семействе Properties, функция SetAccessProperty добавляет его туда.
Function SetAccessProperty(obj As Object, strName As String, _
intType As Integer, varSetting As Variant) As Boolean
Dim prp As Property
Const conPropNotFound As Integer = 3270
On Error GoTo ErrorSetAccessProperty
' Явная ссылка на семейство Properties.
obj.Properties(strName) = varSetting
obj.Properties.Refresh
SetAccessProperty = True
ExitSetAccessProperty:
Exit Function
ErrorSetAccessProperty:
If Err = conPropNotFound Then
' Создает свойство, задает тип и начальное значение.
Set prp = obj.CreateProperty(strName, intType, varSetting)
' Добавляет объект Property в семейство Properties.
obj.Properties.Append prp
obj.Properties.Refresh
SetAccessProperty = True
Resume ExitSetAccessProperty
Else
MsgBox Err & ": " & vbCrLf & Err.Description
SetAccessProperty = False
Resume ExitSetAccessProperty
End If
End Function
В следующей процедуре для задания значения свойства Subject используется метод SetAccessProperty.
Sub CallPropertySet()
Dim dbs As Database, ctr As Container, doc As Document
Dim blnReturn As Boolean
' Возвращает ссылку на текущую базу данных.
Set dbs = CurrentDb
' Возвращает ссылку на контейнер Databases.
Set ctr = dbs.Containers!Databases
' Возвращает ссылку на документ SummaryInfo.
Set doc = ctr.Documents!SummaryInfo
blnReturn = SetAccessProperty(doc, _
"Subject", dbText, "Деловые контакты")
' Вычисляет возвращаемое значение.
If blnReturn = True Then
Debug.Print "Значение свойства успешно задано."
Else
Debug.Print "Значение свойства задать не удалось."
End If
End Sub
Метод CreateQueryDef (Microsoft Access), пример
В следующем примере создается новый объект QueryDef, а затем открывается запрос в режиме таблицы:
Sub NewQuery()
Dim dbs As Database, qdf As QueryDef, strSQL As String
' Возвращает ссылку на текущую базу данных.
Set dbs = CurrentDb
strSQL = "SELECT * FROM Сотрудники WHERE [ДатаНайма] >= #1-1-93#"
' Создает новый запрос.
Set qdf = dbs.CreateQueryDef("НедавноНанятые", strSQL)
DoCmd.OpenQuery qdf.Name
Set dbs = Nothing
End Sub
Метод CreateRelation (Microsoft Access), пример
В следующем примере создается новый объект Relation, определяющий отношение между таблицами «Типы» и «Товары». Таблица «Типы» является главной в отношении, а таблица «Товары» – внешней таблицей с ключом. Поле «Тип» является ключевым полем таблицы «Типы» и внешним полем таблицы «Товары».
Для проверки этого примера в демонстрационной базе данных «Борей» следует выбрать команду Схе-ма данных из меню Сервис и удалить отношение между таблицами «Типы» и «Товары». Затем за-крыть окно схемы данных, сохранив текущую конфигурацию. После этого следует выполнить следую-щую процедуру и снова открыть окно схемы данных для просмотра нового отношения.
Sub NewRelation()
Dim dbs As Database, rel As Relation, fld As Field
' Возвращает ссылку на текущую базу данных.
Set dbs = CurrentDb
' Создает новый объект Relation и задает внешнюю таблицу.
Set rel = dbs.CreateRelation("ТипыТовары", "Типы", "Товары")
' Устанавливает атрибуты для обеспечения целостности данных.
rel.Attributes = dbRelationUpdateCascade And dbRelationDeleteCascade
' Создает поле в объекте Relation.
Set fld = rel.CreateField("Тип")
' Задает имя поля внешней таблицы.
fld.ForeignName = "Тип"
' Добавляет объект Field в семейство Fields объекта Relation.
rel.Fields.Append fld
' Добавляет объект Relation в семейство Relations.
dbs.Relations.Append rel
dbs.Relations.Refresh
Set dbs = Nothing
End Sub
Метод CreateTableDef (Microsoft Access), пример
В следующем примере создается и добавляется в семейство TableDefs текущей базы данных новый объект TableDef.
Sub NewTable()
Dim dbs As Database, tdf As TableDef, fld As Field
' Возвращает ссылку на текущую базу данных.
Set dbs = CurrentDb
' Возвращает объектную переменную TableDef, указывающую на новую таблицу.
Set tdf = dbs.CreateTableDef("Контакты")
' Определяет в таблице новое поле.
Set fld = tdf.CreateField("НазваниеКонтакта", dbText, 40)
' Добавляет объект Field в семейство Fields объекта TableDef.
tdf.Fields.Append fld
tdf.Fields.Refresh
' Добавляет объект TableDef в семейство TableDefs базы данных.
dbs.TableDefs.Append tdf
dbs.TableDefs.Refresh
Set dbs = Nothing
End Sub
Метод Delete (Microsoft Access), пример
В следующем примере в таблице создается а затем удаляется поле:
Sub DeleteField()
Dim dbs As Database, tdf As TableDef
Dim fldInitial As Field
' Возвращает ссылку на текущую базу данных.
Set dbs = CurrentDb
Set tdf = dbs.TableDefs!Сотрудники
' Создает новый объект Field.
Set fldInitial = tdf.CreateField("ВременноеПоле", dbText, 2)
' Добавляет новый объект Field.
tdf.Fields.Append fldInitial
' Обновляет семейство Fields.
tdf.Fields.Refresh
' Удаляет новый объект Field.
tdf.Fields.Delete fldInitial.Name
tdf.Fields.Refresh
Set dbs = Nothing
End Sub
Метод Edit (Microsoft Access), пример
В следующем примере открывается объект Recordset и ищутся все записи, удовлетворяющие условию поиска для поля «Должность». Затем для подготовки записей к редактированию используется процеду-ра Edit, изменяется должность и изменения сохраняются.
Sub ChangeTitle()
Dim dbs As Database, rst As Recordset
Dim strCriteria As String, strNewTitle As String
' Возвращает ссылку на текущую базу данных.
Set dbs = CurrentDb
' Задает условие поиска.
strCriteria = "Должность = 'Представитель'"
strNewTitle = "Менеджер по продажам"
' Создает динамический объект Recordset.
Set rst = dbs.OpenRecordset("Сотрудники", dbOpenDynaset)
' Находит первое вхождение.
rst.FindFirst strCriteria
' Выполняет цикл, пока есть совпадения.
Do Until rst.NoMatch
With rst
.Edit ' Разрешает изменения.
!Должность = strNewTitle ' Изменяет должность.
.Update ' Сохраняет изменения.
.FindNext strCriteria ' Находит следующее вхождение.
End With
Loop
rst.Close
Set dbs = Nothing
End Sub
Совет. Для изменения данных эффективнее использовать запрос на обновление. Например, следую-щая программа выполняет ту же задачу:
Sub ChangeTitleSQL()
Dim dbs As Database
Dim strSQL As String
' Возвращает ссылку на текущую базу данных.
Set dbs = CurrentDb
' Создает строку SQL.
strSQL = "UPDATE Сотрудники SET Должность = 'Менеджер по продажам' " _
& "WHERE Должность = 'Представитель' "
' Выполняет запрос на изменение.
dbs.Execute strSQL
' Возвращает число обновленных записей.
Debug.Print dbs.RecordsAffected
Set dbs = Nothing
End Sub
Метод Execute (Microsoft Access), пример
В следующем примере выполняется запрос на изменение и отображается число измененных записей:
Sub RecordsUpdated()
Dim dbs As Database, qdf As QueryDef
Dim strSQL As String
' Возвращает ссылку на текущую базу данных.
Set dbs = CurrentDb
strSQL = "UPDATE Сотрудники SET Должность = " _
& "'Старший представитель' " _
& "WHERE Должность = 'Представитель';"
' Создает новый запрос QueryDef.
Set qdf = dbs.CreateQueryDef("ОбновлениеДолжности", strSQL)
' Выполняет запрос QueryDef.
qdf.Execute
Debug.Print qdf.RecordsAffected
Set dbs = Nothing
End Sub
Свойство Размер поля (FieldSize) (Microsoft Access), пример
В следующем примере свойство Размер поля (FieldSize) используется для получения размера в бай-тах двух полей таблицы «Сотрудники». Поле «Примечания» имеет тип MEMO, а поле «Фотография» содержит двоичные данные (объект OLE).
Sub GetFieldSize()
Dim dbs As Database, rst As Recordset
Dim fldNotes As Field, fldPhoto As Field
Dim strSQL As String
' Возвращает ссылку на текущую базу данных.
Set dbs = CurrentDb
' Создает инструкцию SQL для получения полей «Примечания» и «Фотография».
strSQL = "SELECT Примечания, Фотография FROM Сотрудники;"
' Создает динамический объект Recordset.
Set rst = dbs.OpenRecordset(strSQL)
Set fldNotes = rst!Примечания
Set fldPhoto = rst!Фотография
' Переходит к первой записи.
rst.MoveFirst
Debug.Print "Размер поля 'Примечания':"; " "; " Размер поля 'Фотография':"
' Выводит размеры полей для каждой записи объекта Recordset.
Do Until rst.EOF
Debug.Print fldNotes.FieldSize; " "; fldPhoto.FieldSize
rst.MoveNext
Loop
rst.Close
Set dbs = Nothing
End Sub
Методы FindFirst, FindLast, FindNext и FindPrevious (Microsoft Access, пример)
В следующем примере создается динамический объект Recordset, а затем с помощью метода FindFirst находится первая запись, удовлетворяющая указанному условию. После этого находятся все остальные записи, удовлетворяющие условию.
Sub FindRecord()
Dim dbs As Database, rst As Recordset
Dim strCriteria As String
' Возвращает ссылку на текущую базу данных.
Set dbs = CurrentDb
' Задает условие поиска.
strCriteria = "[СтранаПолучателя] = 'Великобритания' And [ДатаРазмещения] >= #1-1-95#"
' На основе таблицы «Заказы» создает динамический объект Recordset.
Set rst = dbs.OpenRecordset("Заказы", dbOpenDynaset)
' Находит первую удовлетворяющую условию поиска запись.
rst.FindFirst strCriteria
' Проверяет, найдена ли запись.
If rst.NoMatch Then
MsgBox "Запись не найдена."
Else
' Находит остальные удовлетворяющие условию поиска записи.
Do Until rst.NoMatch
Debug.Print rst!СтранаПолучателя; " "; rst!ДатаРазмещения
rst.FindNext strCriteria
Loop
End If
rst.Close
Set dbs = Nothing
End Sub
Метод GetRows (Microsoft Access), пример
В следующем примере метод GetRows возвращает двухмерный массив, содержащий все строки дан-ных объекта Recordset:
Sub RowsArray()
Dim dbs As Database, rst As Recordset, strSQL As String
Dim varRecords As Variant, intI As Integer, intJ As Integer
' Возвращает ссылку на текущую базу данных.
Set dbs = CurrentDb
' Создает инструкцию SQL, возвращающую указанные поля.
strSQL = "SELECT Имя, Фамилия, ДатаНайма " _
& "FROM Сотрудники"
' Открывает динамический объект Recordset.
Set rst = dbs.OpenRecordset(strSQL)
' Переходит в конец набора записей.
rst.MoveLast
' Возвращается к первой записи.
rst.MoveFirst
' Помещает все строки в массив.
varRecords = rst.GetRows(rst.RecordCount)
' Находит верхнюю границу второго измерения массива.
For intI = 0 To UBound(varRecords, 2)
Debug.Print
' Находит верхнюю границу первого измерения массива.
For intJ = 0 To UBound(varRecords, 1)
' Отображает данные каждой строки массива.
Debug.Print varRecords(intJ, intI)
Next intJ
Next intI
rst.Close
Set dbs = Nothing
End Sub
Метод Move (Microsoft Access), пример
В следующем примере с помощью метода Move выполняется перемещение на две строки вперед в объекте Recordset:
Sub MoveForward()
Dim dbs As Database, rst As Recordset
Dim strCriteria As String
' Возвращает ссылку на текущую базу данных.
Set dbs = CurrentDb
' Открывает динамический объект Recordset.
Set rst = dbs.OpenRecordset("SELECT * FROM Заказы " _
& "ORDER BY СтранаПолучателя;")
rst.MoveLast
rst.MoveFirst
' Проверяет число записей в объекте Recordset.
If rst.RecordCount > 2 Then
' Перемещается на две строки вперед.
rst.Move 2
Debug.Print rst!СтранаПолучателя
End If
rst.Close
Set dbs = Nothing
End Sub
Методы MoveFirst, MoveLast, MoveNext и MovePrevious (Microsoft Access), пример
В следующем примере для вычисления количества записей в объекте Recordset объект заполняется с помощью метода MoveLast. Затем с помощью метода MoveFirst указатель текущей записи перемеща-ется на первую запись объекта Recordset. После этого пользователю предлагается ввести число запи-сей, на которое будет сделан переход вперед.
Sub MoveThroughRecords()
Dim dbs As Database, rst As Recordset, intI As Integer
Dim strNumber As String
' Возвращает ссылку на текущую базу данных.
Set dbs = CurrentDb
Set rst = dbs.OpenRecordset("Товары")
' Заполняет объект Recordset.
rst.MoveLast
' Возвращается к первой записи.
rst.MoveFirst
' Получает число, меньшее количества записей.
strNumber = InputBox("Пожалуйста введите число, меньшее чем " _
& rst.RecordCount & ".")
' Перемещается на указанное число записей вперед.
For intI = 1 To strNumber
rst.MoveNext
Next intI
Debug.Print rst!Марка
rst.Close
Set dbs = Nothing
End Sub
Метод OpenDatabase (Microsoft Access), пример
В следующем примере возвращается переменная типа Database, указывающая на текущую базу дан-ных. Затем с помощью метода OpenDatabase открывается новая база данных с именем «Другая.mdb». После этого процедура перечисляет все объекты TableDef в обеих базах данных.
Для проверки этого примера следует создать базу данных с именем «Другая.mdb», закрыть ее, и помес-тить в папку, в которой находится база данных с данной программой.
Sub OpenAnother()
Dim wsp As Workspace
Dim dbs As Database, dbsAnother As Database
Dim tdf As TableDef
' Возвращает ссылку на текущую базу данных.
Set dbs = CurrentDb
' Возвращает ссылку на заданную по умолчанию рабочую область.
Set wsp = DBEngine.Workspaces(0)
' Возвращает ссылку на файл Другая.mdb.
Set dbsAnother = wsp.OpenDatabase("Другая.mdb")
' Перечисляет все объекты TableDef в каждой базе данных.
Debug.Print dbs.Name & ":"
For Each tdf in dbs.TableDefs
Debug.Print tdf.Name
Next tdf
Debug.Print
Debug.Print dbsAnother.Name & ":"
For Each tdf in dbsAnother.TableDefs
Debug.Print tdf.Name
Next tdf
Set dbs = Nothing
Set dbsAnother = Nothing
End Sub
Метод OpenRecordset (Microsoft Access), пример
В следующем примере открывается динамический объект Recordset и отображается число записей в этом объекте.
Sub UKOrders()
Dim dbs As Database, rst As Recordset
Dim strSQL As String
' Возвращает ссылку на текущую базу данных.
Set dbs = CurrentDb
strSQL = "SELECT * FROM Заказы WHERE [СтранаПолучателя] = 'Великобритания'"
Set rst = dbs.OpenRecordset(strSQL)
rst.MoveLast
Debug.Print rst.RecordCount
rst.Close
Set dbs = Nothing
End Sub
Метод Refresh (Microsoft Access), пример
В следующем примере выполняется обновление семейства Indexes объекта TableDef. Метод Refresh используется в многопользовательской среде для отображения изменений, внесенных другими пользо-вателями в объекты Index семейства Indexes объекта TableDef.
Sub RefreshIndex()
Dim dbs As Database, tdf As TableDef
Dim idx As Index, fld As Field
' Возвращает ссылку на текущую базу данных.
Set dbs = CurrentDb
Set tdf = dbs.TableDefs!Сотрудники
tdf.Indexes.Refresh
For Each idx In tdf.Indexes
Debug.Print idx.Name; ":"
For Each fld In idx.Fields
Debug.Print " "; fld.Name
Next fld
Next idx
Set dbs = Nothing
End Sub
Метод Seek (Microsoft Access), пример
В следующем примере в таблице «Сотрудники» создается новый объект типа Index. Новый индекс состоит из двух полей: «Фамилия» и «Имя». Затем для нахождения заданной записи используется метод Seek.
Sub NewIndex()
Dim dbs As Database, tdf As TableDef, idx As Index
Dim fldLastName As Field, fldFirstName As Field, rst As Recordset
' Возвращает ссылку на текущую базу данных.
Set dbs = CurrentDb
' Возвращает ссылку на таблицу «Сотрудники».
Set tdf = dbs.TableDefs!Сотрудники
' Возвращает объект типа Index, указывающий на новый индекс.
Set idx = tdf.CreateIndex("ФИО")
' Создает и добавляет индексные поля.
Set fldLastName = idx.CreateField("Фамилия", dbText)
Set fldFirstName = idx.CreateField("Имя", dbText)
idx.Fields.Append fldLastName
idx.Fields.Append fldFirstName
' Добавляет объект Index.
tdf.Indexes.Append idx
tdf.Indexes.Refresh
' Открывает табличный объект Recordset.
Set rst = dbs.OpenRecordset("Сотрудники")
' Делает новый индекс текущим.
rst.Index = idx.Name
' Указывает искомую запись.
rst.Seek "=", "Иванов", "Александр"
If rst.NoMatch Then
Debug.Print "Поиск неудачен!"
Else
Debug.Print "Поиск удачен."
End If
rst.Close
Set dbs = Nothing
End Sub
Объект Error (Microsoft Access)
Значением свойства Description объекта Error является краткое описание ошибки объектов доступа к данным (DAO). Данное свойство используют только в случае возникновения ошибки DAO.
Метод AccessError позволяет получить описание конкретной ошибки DAO Microsoft Access по номеру без фактического возникновения ошибки. Например, для задания описания ошибки под номером 3021 используется следующий формат вызова метода AccessError:
Debug.Print AccessError(3021)
В этом случае Microsoft Access выведет в окно отладки строку описания, связанную с ошибкой DAO 3021, «Текущая запись отсутствует».
Объект Recordset (Microsoft Access)
При использовании в приложениях, созданных в версиях Microsoft Access 1.x или 2.0, для указания на объект Recordset оператора . (точка), необходимо его изменение на оператор ! (восклицательный знак). Для использования старого синтаксиса . (точка) необходимо в диалоговом окне Ссылки, вызываемом командой Ссылки меню Сервис, в режиме конструктора сделать ссылку на библиотеку совместимости Microsoft DAO 2.5/3.5.
Объект Container, семейство Containers (Microsoft Access)
В дополнение к объектам Container (контейнер), определенным в ядре базы данных Microsoft Jet, в Microsoft Access определены еще четыре объекта Container.
Имя контейнера Описываемые объекты

Forms Сохраненные формы
Modules Сохраненные модули
Reports Сохраненные отчеты
Scripts Сохраненные макросы

Объекты Container, определенные в Microsoft Access, представляют объекты базы данных Microsoft Access, а не объекты доступа к данным (DAO). Эти объекты Container передают в ядро базы данных Jet информацию об объектах Microsoft Access. Эта информация используется ядром Jet для обеспечения той же системы защиты объектов базы данных Microsoft Access, которая реализуется ядром для объек-тов доступа к данным.
И объекты Container, определенные в Microsoft Access, и объекты Container, определенные в ядре Jet, включаются в семейство Containers Microsoft Access.
Семейство Documents объекта Container содержит объекты Document, представляющие отдельные объекты, тип которых описывается в объекте Container. Например, объект Container с именем Forms содержит семейство Documents, в которое может входить объект Document, соответствующий форме Заказы.
Объекты Container могут быть использованы для установления и обеспечения разрешения на доступ к объектам базы данных Microsoft Access. Для того чтобы установить разрешение на доступ к объекту Container, следует указать в свойстве UserName объекта Container имя существующего объекта User (пользователь) или Group (группа). После этого следует определить для объекта Container свойство Permissions.
Примечание. Не следует путать отдельные типы объектов Container с одноименными типами се-мейств. Объекты Container с именами Forms и Reports содержат семейство Documents, в которое входят отдельные объекты Document, представляющие каждую сохраненную форму или отчет. В се-мейства Forms и Reports включаются только открытые формы и отчеты.
Объект Database, семейство Databases (Microsoft Access)
При обращении к объектам доступа к данным из Microsoft Access часто приходится определять объект-ную переменную типа Database, представляющую текущую базу данных. Функция CurrentDb возвра-щает объект Database, соответствующий текущей открытой базе данных. Этот объект автоматически добавляется в семейство Databases.
Предположим, например, что вы работаете в Microsoft Access с учебной базой данных «Борей». Для то-го чтобы создать объект Database, указывающий на эту базу данных, следует сначала определить объ-ектную переменную типа Database, а затем присвоить ей объект Database, возвращаемый функцией CurrentDb.
Dim dbs As Database
Set dbs = CurrentDb
Для того чтобы использовать текущую базу данных, нет необходимости знать имя базы данных или ее положение в семействе Databases. Если потребуется узнать имя текущей базы данных, следует прове-рить значение свойства Name объекта Database, содержащее путь и имя файла базы данных. Для про-верки положения базы данных в семействе Databases следует перебрать компоненты семейства.
В окне Microsoft Access может быть открыта только одна база данных. В программе Visual Basic, однако, пользователь имеет возможность создать несколько независимых объектных переменных типа Database, представляющих разные открытые базы данных. Это позволяет одновременно работать в программе с несколькими базами данных. Допускается также создание нескольких объектных перемен-ных типа Database, указывающих на текущую базу данных.
Примечание. В программе Visual Basic рекомендуется использовать функцию CurrentDb, возвра-щающую объект Database, представляющий текущую базу данных, вместо синтаксиса DBEngine(0)(0). Функция CurrentDb создает новый экземпляр текущей базы данных, тогда как син-таксис DBEngine(0)(0) определяет ссылку на открытую копию текущей базы данных. Функция CurrentDb позволяет создать несколько переменных типа Database, указывающих на текущую базу данных. В Microsoft Access по-прежнему поддерживается синтаксис DBEngine(0)(0), однако, реко-мендуется изменить существующие программы во избежание возможных конфликтов при работе в сети.
Объект DBEngine (Microsoft Access)
Microsoft Access содержит средства управления объектами доступа к данным (DAO) из других приложе-ний с помощью программирования. Если Microsoft Access выполняется под управлением из другого приложения, например, Visual Basic или Microsoft Excel, то свойство DBEngine объекта Application Microsoft Access возвращает ссылку на объект DBEngine. После этого все объекты доступа к данным и семейства становятся доступными через объект DBEngine.
Объект Document, семейство Documents (Microsoft Access)
В дополнение к объектам Document (документ), определенным в ядре базы данных Microsoft Jet, в Microsoft Access определены следующие объекты Document.
Документ Контейнер Описываемые объекты

Form Forms Сохраненная форма
Macro Scripts Сохраненный макрос
Module Modules Сохраненный модуль
Report Reports Сохраненный отчет
SummaryInfo Databases Общие сведения о базе данных
UserDefined Databases Определяемые пользователем свойства

Объекты Document, определенные в Microsoft Access, представляют объекты базы данных Microsoft Access, а не объекты доступа к данным (DAO). Эти объекты Document передают в ядро базы данных Jet информацию об объектах Microsoft Access. Эта информация используется ядром Jet для обеспече-ния той же системы защиты объектов базы данных Microsoft Access, которая реализуется ядром для объектов доступа к данным.
Семейство Documents объекта Container содержит объекты Document, представляющие отдельные объекты, тип которых описывается в объекте Container. Например, объект Container с именем Forms содержит семейство Documents, в которое может входить объект Document, соответствующий форме Заказы.
В Microsoft Access определены два объекта Document, входящие в объект Container с именем Databases  SummaryInfo и UserDefined
Объект Document SummaryInfo обеспечивает доступ в программах к свойствам, содержащим общие сведения о документе, в том числе, Title (Название), Subject (Тема), Author (Автор), Keywords (Ключе-вые слова), Comments (Заметки), Manager (Должность), Company (Организация), Category (Группа) и Hyperlink Base (База гиперссылки). Значения всех этих свойств могут быть также заданы на вкладке Документ в диалоговом окне Свойства: база данных, которое открывается командой Свойства в ме-ню Файл.
Для того чтобы задать значения этих свойств в программе Visual Basic, необходимо предварительно создать эти свойства и добавить их в семейство Properties объекта Document SummaryInfo, если эти свойства ранее не были определены в диалоговом окне Свойства: база данных. После создания этих свойств становятся возможными явные ссылки на них через семейство Properties. В следующем при-мере переменная doc является объектной переменной, представляющей объект Document SummaryInfo.
doc.Properties!Title = "Борей"
Для получения дополнительных сведений о создании и задании значений свойств, определяемых в Microsoft Access, следует обратиться к разделам справки, выводящимся в указателе справки для объек-та Property и метода CreateProperty.
Объект Document UserDefined обеспечивает доступ в программах к свойствам, определяемым пользо-вателем на вкладке Прочие в окне диалога Свойства: база данных. Пользователь имеет также воз-можность создать эти свойства в программе Visual Basic и добавить их в семейство Properties объекта Document UserDefined.
Примечание. Не следует путать свойства, определенные в семействе Properties документа Database, со свойствами, определенными в семействе Properties объекта Database. Создание свойств, опреде-ляемых пользователем, допускается в лбом из этих двух семейств Properties, однако, в окне диалога Свойства: база данных могут быть заданы только значения свойств, определенных для объектов Document SummaryInfo или UserDefined.
Объекты Document могут быть использованы для установления и обеспечения разрешения на доступ к отдельным объектам базы данных Microsoft Access. Для того чтобы установить разрешение на доступ к объекту Document, следует указать в свойстве UserName объекта Document имя существующего объ-екта User (пользователь) или Group (группа). После этого следует определить для объекта Document свойство Permissions.
Примечание. Не следует путать отдельные типы объектов Container с одноименными типами се-мейств. Объекты Container с именами Forms и Reports содержат семейство Documents, в которое входят отдельные объекты Document, представляющие каждую сохраненную форму или отчет. В се-мейства Forms и Reports включаются только открытые формы и отчеты.
Объект Field, семейство Fields (Microsoft Access)
В дополнение к свойствам, определенным в ядре базы данных Microsoft Jet, объект Field (поле), входя-щий в семейство Fields объекта QueryDef (запрос) или TableDef (таблица), может также содержать следующие свойства, определяемые в приложении Microsoft Access.
Более подробно о чтении и задании значений этих свойств см. в разделах справки о конкретном свойст-ве и объекте Property (свойство).
Подпись (Caption) Число десятичных знаков (DecimalPlaces)
ColumnHidden Описание (Description)
ColumnOrder Формат поля (Format)
Ширина столбцов (ColumnWidths) Маска ввода (InputMask)

Объект Group, семейство Groups (Microsoft Access)
Объекты Group (группа) создаются при создании и поддержании системы различных разрешений на доступ к объектам базы данных Microsoft Access и объектам доступа к данным. Например, группы ис-пользуются при организации системы защиты форм, отчетов, макросов и модулей.
Объект Group имеет свойство Name, которое используется при указании разрешений на доступ к объ-екту Container или Document. Например, имя группы, указанное в свойстве Name объекта Group, мож-но присвоить свойству UserName объекта Container или Document. После этого следует задать значе-ние свойства Permissions объекта Container и Document, определяющие права группы пользователей, указанной в свойстве UserName. Чтение значения свойства Permissions позволяет определить теку-щие права данной группы пользователей.
Объект Property, семейство Properties (Microsoft Access)
Целый ряд свойств является определенными в Microsoft Access. В программах Visual Basic эти свойства представляются с помощь объектных переменных, каждая из которых связана с объектом Property (свойство), входящим в семейство Properties.
Свойства, применимые к объектам доступа к данным
• Встроенные свойства, определенные в ядре базы данных Microsoft Jet для каждого объекта доступа к данным (DAO).
• Определяемые пользователем свойства, которые добавляются в некоторые объекты доступа к дан-ным. Такими объектами являются объекты Database (база данных), Index (индекс), QueryDef (за-прос) и TableDef (таблица), а также объекты Field (поле), входящие в семейство Fields объекта QueryDef или TableDef.
• Некоторые свойства, определенные в Microsoft Access, являются применимыми к объектам доступа к данным. Значения таких свойств в общем случае могут быть заданы как в окне Microsoft Access, так и в программе Visual Basic. Ядро базы данных Jet не распознает такие свойства без специального соз-дания соответствующего объекта Property (свойство) и его добавления в семейство Properties. Объ-ектами доступа к данным, к которым применятся такие свойства, являются объекты QueryDef и TableDef, а также объекты Field, входящие в семейство Fields объекта QueryDef или TableDef. Спи-сок этих свойств, определенных в Microsoft Access, можно найти в разделах справки, посвященных объектам TableDef, QueryDef и Field.
Имеется ряд отличий свойств, определенных в Microsoft Access, которые применятся к объектам досту-па к данным, от свойств, определенных в ядре базы данных Jet.
Для ссылки на определяемое пользователем свойство или на свойство, определенное в Microsoft Access, необходимо в явном виде сослаться на семейство Properties. Быстрее всего выполнятся ссыл-ки на свойства Microsoft Access, использующие следующий синтаксис:
объект.Properties!имя
В этом примере объект является объектом доступа к данным (DAO), а имя – имя свойства Microsoft Access.
Допускается также следующий синтаксис, однако, такие конструкции выполнятся медленнее:
объект.Properties("имя")
В отличие от этого, на свойства, определенные в ядре базы данных Jet, допускаются прямые ссылки вида объект.имя.
При первом указании значения свойства, определенного в Microsoft Access, необходимо сначала соз-дать объект Property с помощь метода CreateProperty. Например, свойство Подпись (Caption) объек-та Field является свойством, определенным в Microsoft Access. Если значение свойства Подпись (Caption) не было задано в режиме конструктора таблицы, а задается впервые в программе Visual Basic, пользователь должен сначала создать это свойство с помощь метода CreateProperty и добавить его в семейство Properties, а лишь затем задать его значение.
Определенные в Microsoft Access свойства автоматически добавляются в семейство Properties при первом задании значения этого свойства в окне Microsoft Access, поэтому нет необходимости создавать и добавлять в семейство программным образом те свойства, значения которых были заданы через ин-терфейс пользователя. Например, значение свойства Подпись (Caption) можно определить в режиме таблицы с помощь команды Шрифт из меню Формат. Данное свойство будет автоматически включено в семейство Properties объекта TableDef, представляющего эту таблицу.
До задания значения свойства, определенного в Microsoft Access, либо в режиме таблицы, либо в про-грамме Visual Basic, это свойство не будет включено в семейство Properties. Если значение данного свойства задается в процедуре Visual Basic, необходимо включить в эту процедуру блок обработки ошибок, который будет проверять, существует ли это свойство в семействе Properties, и если нет, то добавлять данное свойство в семейство.
Свойства, применимые к объектам Microsoft Access
Аналогично объектам доступа к данным (DAO) каждый объект Microsoft Access содержит семейство Properties, в которое входят встроенные объекты Property. Например, объекты Property, соответст-вующие формам, являются компонентами семейства Properties объекта Form.
Допускается также создание определяемых пользователем свойств для объектов Microsoft Access. На-пример, можно создать свойство с именем TextType, которое будет применяться к элементу управле-ния-полю.
В отличие объектов Property (свойств) объектов доступа к данным, объекты Property, входящие в се-мейство Properties объектов Form, Report и Control, не имеют свойства Inherited.
Допускается нумерация объектов Property, входящих в семейство Properties объектов Form, Report и Control. Однако представляющие Microsoft Access объекты Application и Screen имеют семейства Properties, компоненты которого не могут быть перенумерованы. Кроме того, свойства этих объектов являются доступными только для чтения.
Объект QueryDef, семейство QueryDefs (Microsoft Access)
В дополнение к свойствам, определенным в ядре базы данных Microsoft Jet, объект QueryDef (запрос) может также содержать следующие свойства, определенные в приложении Microsoft Access. Подробнее о чтении и задании значений таких свойств см. разделы справки для отдельных свойств и для объекта Property.
DatasheetFontItalic FrozenColumns
DatasheetFontHeight Таблица сообщений (LogMessages)
DatasheetFontName Блокировка записей (RecordLocks)
DatasheetFontUnderline RowHeight
DatasheetFontWeight ShowGrid
Описание (Description) UseTransaction

Объект TableDef, семейство TableDefs (Microsoft Access)
В дополнение к свойствам, определенным в ядре базы данных Microsoft Jet, объект TableDef (таблица) может также содержать следующие свойства, определенные в приложении Microsoft Access. Подробнее о чтении и задании значений таких свойств см. разделы справки для отдельных свойств и для объекта Property.
DatasheetFontHeight Описание (Description)
DatasheetFontItalic FrozenColumns
DatasheetFontName RowHeight
DatasheetFontUnderline ShowGrid
DatasheetFontWeight

Объект User, семейство Users (Microsoft Access)
При создании и поддержании системы различных разрешений на доступ к объектам базы данных Microsoft Access и объектам доступа к данным существует возможность создавать объекты User (поль-зователь). Например, имена пользователей используются при организации системы защиты форм, от-четов, макросов и модулей.
Объект User имеет свойство Name, которое используется при указании разрешений на объект Container или Document . Например, имя пользователя, указанное в свойстве Name объекта User, можно присвоить свойству UserName объекта Container или Document. После этого следует задать значение свойства Permissions объекта Container и Document, определяющее права пользователя, указанного в свойстве UserName. Чтение значения свойства Permissions позволяет определить теку-щие разрешения на доступ данного пользователя.
Объект Container, семейство Containers (Microsoft Access), пример
В данном примере программистам представляется разрешение на полный доступ на каждый модуль в базе данных, а все остальные пользователи получают разрешение только на чтение модулей:
Sub SetModulePermissions()
Dim dbs As Database, wsp As Workspace, ctr As Container
Dim grp As Group
' Возвращает ссылку на используемую по умолчанию рабочую область.
Set wsp = DBEngine.Workspaces(0)
' Возвращает ссылку на текущую базу данных.
Set dbs = CurrentDb
' Возвращает ссылку на семейство Modules.
Set ctr = dbs.Containers!Modules
wsp.Groups.Refresh
For Each grp In wsp.Groups
ctr.UserName = grp.Name
If ctr.UserName = "Программисты" Then
ctr.Permissions = ctr.Permissions Or dbSecFullAccess
Else
ctr.Permissions = ctr.Permissions Or acSecModReadDef
End If
Next grp
Set dbs = Nothing
End Sub
Объект Database, семейство Databases (Microsoft Access), пример
В данном примере демонстрируются три способа возврата объекта Database в Microsoft Access. Снача-ла процедура возвращает объект Database, представляющий текущую базу данных, открытую в окне Microsoft Access. Затем в процедуре создается и сохраняется на диске другая база данных Newdb.mdb. После этого открывается существующая база данных с именем Another.mdb. И наконец, выводится пе-речень всех объектов Database, содержащихся в семействе Databases.
Sub ReferenceDatabases()
Dim wsp As Workspace
Dim dbsCurrent As Database, dbsNew As Database
Dim dbsAnother As Database, dbs As Database
' Возвращает ссылку на текущую базу данных.
Set dbsCurrent = CurrentDb
' Возвращает ссылку на используемую по умолчанию рабочую область.
Set wsp = DBEngine.Workspaces(0)
' Создает новый объект Database.
Set dbsNew = wsp.CreateDatabase("Newdb.mdb", dbLangGeneral)
' Открывает другую (не текущую) базу данных.
Set dbsAnother = wsp.OpenDatabase("Another.mdb")
' Выводит перечень имен баз данных.
For Each dbs in wsp.Databases
Debug.Print dbs.Name
Next dbs
For Each dbs In wsp.Databases
Set dbs = Nothing
Next dbs
Set wsp = Nothing
End Sub
Объект Field, семейство Fields (Microsoft Access), пример
В данном примере создается новый объект Field, задаются значения некоторых его свойств, после чего объект добавляется в семейство Fields объекта TableDef. После этого в процедуре выводится пере-чень всех полей в семействе Fields объекта TableDef.
Sub NewField()
Dim dbs As Database, tdf As TableDef
Dim fld As Field
' Возвращает ссылку на текущую базу данных.
Set dbs = CurrentDb
' Возвращает ссылку на таблицу «Сотрудники».
Set tdf = dbs.TableDefs!Сотрудники
' Создает новый объект Field.
Set fld = tdf.CreateField("Страховка")
' Задает значения свойств Type и Size объекта Field.
fld.Type = dbText
fld.Size = 11
' Добавляет поле в семейство.
tdf.Fields.Append fld
' Выводит перечень всех полей в семействе Fields объекта TableDef.
For Each fld in tdf.Fields
Debug.Print fld.Name
Next fld
Set dbs = Nothing
End Sub
Объект Group, семейство Groups (Microsoft Access), пример
В данном примере создается новый объект User, после чего объект добавляется в семейство Users объекта Workspace. Затем создается новый объект Group, который добавляется в семейство Groups объекта Workspace. Новый объект Group добавляется также в семейство Groups объекта User. Далее новой группе представляется разрешение на изменение и удаление модулей.
Обратите внимание, что для включения пользователей в группу необходимо либо добавить объект User в семейство Users объекта Group, либо добавить объект Group в семейство Groups объекта User. Ка-ждый из этих приемов обеспечивает включение указанного пользователя в указанную группу.
Примечание. При программировании разрешений следует избегать включения в программу пароля и идентификатора пользователя. Следующий пример является лишь иллюстрацией.
Sub NewModulesGroup()
Dim wsp As Workspace, dbs As Database
Dim usr As User, grp As Group, grpMember As Group
Dim ctr As Container
' Возвращает ссылку на используемую по умолчанию рабочую область.
Set wsp = DBEngine.Workspaces(0)
' Возвращает ссылку на текущую базу данных.
Set dbs = CurrentDb
' Создает объект User и добавляет его в семейство Users объекта Workspace.
Set usr = wsp.CreateUser("Барков", "123abc789xyz", "Пароль")
wsp.Users.Append usr
' Создает объект Group и добавляет его в семейство Groups объекта Workspace.
Set grp = wsp.CreateGroup("Программисты", "321xyz987abc")
wsp.Groups.Append grp
' Добавляет объект Group в семейство Groups объекта User.
Set grpMember = usr.CreateGroup("Программисты")
usr.Groups.Append grpMember
' Обновляет семейство Groups объекта User.
usr.Groups.Refresh
' Возвращает объект Container.
Set ctr = dbs.Containers!Modules
' Задает значение свойства UserName объекта Container.
ctr.UserName = grpMember.Name
'Определяет разрешение группы на изменение и удаление всех модулей.
ctr.Permissions = ctr.Permissions Or acSecModWriteDef
Set dbs = Nothing
Set wsp = Nothing
End Sub
Объект DBEngine (Microsoft Access), пример
В данном примере выводится перечень свойств объекта DBEngine:
Sub EngineProperties()
Dim prp As Property
For Each prp In DBEngine.Properties
Debug.Print prp.Name
Next prp
End Sub
Объект Document, семейство Documents (Microsoft Access), пример
В данном примере выводятся имена всех объектов Document типа Form в текущей базе данных и даты последнего изменения каждой формы:
Sub DocumentModified()
Dim dbs As Database, ctr As Container, doc As Document
' Возвращает ссылку на текущую базу данных.
Set dbs = CurrentDb
' Возвращает ссылку на контейнер Forms.
Set ctr = dbs.Containers!Forms
' Перечень содержимого семейства Documents в контейнере Forms.
For Each doc In ctr.Documents
' Выводит имя объекта Document и значение свойства LastUpdated.
Debug.Print doc.Name; " "; doc.LastUpdated
Next doc
Set dbs = Nothing
End Sub
Динамический объект Recordset (Microsoft Access), пример
В данном примере создается объект Recordset типа динамического набора записей и проверяется зна-чение его свойства Updatable:
Sub Новые_сотрудники()
Dim dbs As Database, rst As Recordset
Dim strSQL As String
' Возвращает ссылку на текущую базу данных.
Set dbs = CurrentDb
' Открывает набор записей для таблицы «Сотрудники».
Set rst = dbs.OpenRecordset("Сотрудники", dbOpenDynaset)
Debug.Print rst.Updatable
rst.Close
Set dbs = Nothing
End Sub
Объект Error, семейство Errors (Microsoft Access), пример
В данном примере создается ошибка при попытке открыть объект Recordset для несуществующей таб-лицы «Студенты». Информация сохраняется в объекте доступа к данным Error и в объекте Visual Basic Err. В процедуре выводятся значения свойств Description, Source и Number объекта Error. Затем вы-водятся значения соответствующих свойств объекта Err.
Отметим, что последний объект Error в семействе Errors должен всегда определять ту же ошибку, что и объект Err. Т. е. значение Err.Number должно быть равно Errors.Count – 1. Если этого не происходит, то, вероятно, информация в семействе Errors является устаревшей. Для того чтобы обеспечить запол-нение семейства Errors информацией о последних ошибках, следует вызвать метод Refresh.
Sub CheckError()
Dim dbs As Database, tdf As TableDef, rst As Recordset
' Описывает объектную переменную типа Error
' для перечисления компонентов семейства Errors.
Dim errX As Error
' Задает игнорирование ошибок.
On Error Resume Next
' Очищает объект Err.
Err.Clear
' Обновляет семейство Errors.
Errors.Refresh
' Возвращает ссылку на текущую базу данных.
Set dbs = CurrentDb
' Попытка открыть объект Recordset для несуществующей таблицы.
Set rst = dbs.OpenRecordset("Студенты")
Debug.Print " ОДД Error:"
' Выводит число ошибок в семействе Errors.
Debug.Print ">>>Число ошибок: "; Errors.Count
' Проверка ключевых свойств объектов в семействе Errors.
For Each errX In DBEngine.Errors
Debug.Print errX.Description
Debug.Print errX.Source
Debug.Print errX.Number
Next errX
Debug.Print
Debug.Print "Объект VBA Err:"
' Вывод соответствующих свойств объекта Err.
Debug.Print Err.Description
Debug.Print Err.Source
Debug.Print Err.Number
Set dbs = Nothing
End Sub
Объект Index, семейство Indexes (Microsoft Access), пример
В данном примере создается новый индекс для таблицы «Сотрудники»:
Sub NewIndex()
Dim dbs As Database, tdf As TableDef, idx As Index
Dim fld1 As Field, fld2 As Field
' Возвращает ссылку на текущую базу данных.
Set dbs = CurrentDb
' Возвращает ссылку на таблицу «Сотрудники».
Set tdf = dbs.TableDefs!Сотрудники
Set idx = tdf.CreateIndex("ИндексФамилия")
Set fld1 = idx.CreateField("Фамилия")
Set fld2 = idx.CreateField("Имя")
idx.Fields.Append fld1
idx.Fields.Append fld2
idx.Required = True
tdf.Indexes.Append idx
Set dbs = Nothing
End Sub
Объект Parameter, семейство Parameters (Microsoft Access), пример
В данном примере создается новый запрос с параметрами и задаются значения параметров:
Sub NewParameterQuery()
Dim dbs As Database, qdf As QueryDef, rst As Recordset
Dim prm As Parameter, strSQL As String
' Возвращает ссылку на текущую базу данных.
Set dbs = CurrentDb
' Создает строку SQL.
strSQL = "PARAMETERS [Первая дата заказа] DateTime, " _
& "[Последняя дата заказа] DateTime; SELECT * FROM Заказы " & _
"WHERE (ДатаРазмещения Between[Первая дата заказа] " _
& "And [Последняя дата заказа]);"
' Создает новый объект QueryDef.
Set qdf = dbs.CreateQueryDef("ЗапросСПараметрами", strSQL)
' Задает значения параметров.
qdf.Parameters![Первая дата заказа] = #4-1-95#
qdf.Parameters![Последняя дата заказа] = #4-30-95#
' Открывает объект Recordset для объекта QueryDef.
Set rst = qdf.OpenRecordset
rst.MoveLast
MsgBox "Получено " & rst.RecordCount & " записей."
rst.Close
Set dbs = Nothing
End Sub
Объект Property, семейство Properties (Microsoft Access), пример
В следующем примере создается свойство, которое является определенным в Microsoft Access, но при-меняется к объектам доступа к данным. Поскольку ядро базы данных Microsoft Jet не распознает свой-ства, определенные в Microsoft Access, необходимо при первом определении значения этого свойства создать новый объект Property и добавить его в семейство Properties.
Аналогично создается и определяемое пользователем свойство, применяемое к объекту Microsoft Access или объекту доступа к данным.
Отметим, что при создании свойства пользователь должен указать правильную константу для аргумен-та тип. Если неясно, какой тип данных следует указать, обратитесь к справочной системе за справкой о конкретном свойстве.
Function SetAccessProperty(obj As Object, strName As String, _
intType As Integer, varSetting As Variant) As Boolean
Dim prp As Property
Const conPropNotFound As Integer = 3270
On Error GoTo ErrorSetAccessProperty
' Явное обращение к семейству Properties.
obj.Properties(strName) = varSetting
obj.Properties.Refresh
SetAccessProperty = True
ExitSetAccessProperty:
Exit Function
ErrorSetAccessProperty:
If Err = conPropNotFound Then
' Создает свойство, определяет его тип и задает начальное значение.
Set prp = obj.CreateProperty(strName, intType, varSetting)
' Добавляет объект Property в семейство Properties.
obj.Properties.Append prp
obj.Properties.Refresh
SetAccessProperty = True
Resume ExitSetAccessProperty
Else
MsgBox Err & ": " & vbCrLf & Err.Description
SetAccessProperty = False
Resume ExitSetAccessProperty
End If
End Function
Вызов вышеописанной функции выполняется, например, так:
Sub CallPropertySet()
Dim dbs As Database, tdf As TableDef
Dim blnReturn As Boolean
' Возвращает ссылку на текущую базу данных.
Set dbs = CurrentDb
' Возвращает ссылку на таблицу «Сотрудники».
Set tdf = dbs.TableDefs!Сотрудники
' Вызывает функцию SetAccessProperty.
blnReturn = SetAccessProperty(tdf, _
"DatasheetFontItalic", dbBoolean, True)
' Вычисляет возвращаемое значение.
If blnReturn = True Then
Debug.Print "Свойство успешно установлено."
Else
Debug.Print "Установка свойства не удалась."
End If
End Sub
Объект QueryDef, семейство QueryDefs (Microsoft Access), пример
В данном примере проверяется наличие запроса «Новые сотрудники» в текущей базе данных, и если запрос найден, он удаляется из семейства QueryDefs. Затем в процедуре создается новый объект QueryDef, который открывается в режиме таблицы.
Sub NewQuery()
Dim dbs As Database, qdf As QueryDef
Dim strSQL As String
' Возвращает ссылку на текущую базу данных.
Set dbs = CurrentDb
' Обновляет семейство QueryDefs.
dbs.QueryDefs.Refresh
' Если запрос "Новые сотрудники" существует, он удаляется.
For Each qdf in dbs.QueryDefs
If qdf.Name = "Новые сотрудники" Then
dbs.QueryDefs.Delete qdf.Name
End If
Next qdf
' Создает строку SQL, отбирающую сотрудников, нанятых после 1-1-94.
strSQL = "SELECT * FROM Сотрудники WHERE ДатаНайма >= #1-1-94#;"
' Создает новый объект QueryDef.
Set qdf = dbs.CreateQueryDef("Новые сотрудники", strSQL)
' Открывает запрос в режиме таблицы.
DoCmd.OpenQuery qdf.Name
Set dbs = Nothing
End Sub
Объект Recordset, семейство Recordsets (Microsoft Access), пример
В данном примере открывается объект Recordset типа таблицы, объект Recordset типа динамического набора записей и объект Recordset типа статического набора записей. Затем выводятся значения свойства Updatable объектов Recordset.
Sub NewRecordsets()
Dim dbs As Database, rst As Recordset
Dim rstEmployees As Recordset, rstOrders As Recordset
Dim rstProducts As Recordset, strSQL As String
' Возвращает ссылку на текущую базу данных.
Set dbs = CurrentDb
' Создает табличный объект Recordset.
Set rstEmployees = dbs.OpenRecordset("Сотрудники", dbOpenTable)
' Создает динамический объект Recordset.
Set rstOrders = dbs.OpenRecordset("Сотрудники", dbOpenDynaset)
' Создает статический объект Recordset.
Set rstProducts = dbs.OpenRecordset("Товары", dbOpenSnapshot)
' Выводит значение свойства Updatable каждого объекта Recordset.
For Each rst In dbs.Recordsets
Debug.Print rst.Name; " "; rst.Updatable
Next rst
' Освобождftn все объектныt переменныt.
rstEmployees.Close
rstOrders.Close
rstProducts.Close
Set dbs = Nothing
End Sub
Объект Relation, семейство Relations (Microsoft Access), пример
В данном примере удаляется существующая связь между таблицами «Сотрудники» и «Заказы», а затем она создается заново с помощью нового объекта Relation.
Sub NewRelation()
Dim dbs As Database
Dim fld As Field, rel As Relation
' Возвращает ссылку на текущую базу данных.
Set dbs = CurrentDb
' Ищет существующую связь СотрудникиЗаказы.
For Each rel In dbs.Relations
If rel.TABLE = "Сотрудники" And rel.ForeignTable = "Заказы" Then
' Выводит сообщение для пользователя перед удалением связи.
If MsgBox(rel.Name & " уже существует. " & vbCrLf _
& "Эта связь будет удалена и затем снова создана.", vbOK) = vbOK Then
dbs.Relations.Delete rel.Name
' Завершает процедуру, если пользователь нажал кнопку «Отмена».
Else
Exit Sub
End If
End If
Next rel
' Создает новую связь и задает ее свойства.
Set rel = dbs.CreateRelation("СотрудникиЗаказы", "Сотрудники", "Заказы")
' Задает атрибуты объекта Relation,
' обеспечивающие целостность данных.
rel.Attributes = dbRelationDeleteCascade + dbRelationUpdateCascade
' Создает поле в семействе Fields объекта Relation.
Set fld = rel.CreateField("КодСотрудника")
' Указывает имя поля внешнего ключа.
fld.ForeignName = "КодСотрудника"
' Добавляет поле в объект Relation и объект Relation в базу данных.
rel.Fields.Append fld
dbs.Relations.Append rel
MsgBox "Связь '" & rel.Name & "' создана."
Set dbs = Nothing
End Sub
Статический объект Recordset (Microsoft Access), пример
В данном примере с помощь инструкции SQL создается статический объект Recordset, после чего вы-водится значение свойства Updatable этого объекта. Поскольку объект Recordset типа статического набора записей по определению является необновляемым, данное свойство всегда имеет значение False (0).
Sub LongTermEmployees()
Dim dbs As Database, qdf As QueryDef, rst As Recordset
Dim strSQL As String
' Возвращает ссылку на текущую базу данных.
Set dbs = CurrentDb
' Создает строку SQL.
strSQL = "SELECT * FROM Сотрудники WHERE ДатаНайма <= #1-1-94#;"
' Создает статический объект Recordset.
Set rst = dbs.OpenRecordset(strSQL, dbOpenSnapshot)
Debug.Print rst.Updatable
rst.Close
Set dbs = Nothing
End Sub
Табличный объект Recordset (Microsoft Access), пример
В данном примере открывается объект Recordset типа таблицы, и затем в нем ищется указанная запись:
Sub FindEmployee()
Dim dbs As Database, tdf As TableDef
Dim rst As Recordset, idx As Index
Dim fldLastName As Field, fldFirstName As Field
' Возвращает ссылку на текущую базу данных.
Set dbs = CurrentDb
' Возвращает ссылку на таблицу «Сотрудники».
Set tdf = dbs.TableDefs!Сотрудники
' Создает новый индекс.
Set idx = tdf.CreateIndex("ФИО")
' Создает и добавляет индексные поля.
Set fldLastName = idx.CreateField("Фамилия", dbText)
Set fldFirstName = idx.CreateField("Имя", dbText)
idx.Fields.Append fldLastName
idx.Fields.Append fldFirstName
' Добавляет индексный объект.
tdf.Indexes.Append idx
' Открывает табличный объект Recordset.
Set rst = dbs.OpenRecordset("Сотрудники")
' Делает новый индекс текущим.
rst.Index = idx.Name
' Задает искомую запись.
rst.Seek "=", "Иванов", "Андрей"
If rst.NoMatch Then
Debug.Print "Поиск не удался."
Else
Debug.Print "Успешный поиск."
End If
rst.close
Set dbs = Nothing
End Sub
Объект TableDef, семейство TableDefs (Microsoft Access), пример
В данном примере создается новый объект TableDef, описывается поле в этом объекте, после чего объект добавляется в семейство TableDefs в текущей базе данных:
Sub NewTable()
Dim dbs As Database, tdf As TableDef, fld As Field
' Возвращает ссылку на текущую базу данных.
Set dbs = CurrentDb
' Создает новый объект TableDef.
Set tdf = dbs.CreateTableDef("Контакты")
' Создает новый объект Field.
Set fld = tdf.CreateField("Имя", dbText, 30)
' Добавляет новый объект.
tdf.Fields.Append fld
dbs.TableDefs.Append tdf
Set dbs = Nothing
End Sub
Объект User, семейство Users (Microsoft Access), пример
В данном примере создается новый объект User, после чего объект добавляется в семейство Users объекта Workspace. Затем создается новый объект Group, который добавляется в семейство Groups объекта Workspace. Новый объект User добавляется также в семейство Users объекта Group. Новому пользователю дается разрешение на чтение данных из таблиц.
Отметим, что для включения пользователей в группы необходимо либо добавить объект User в семей-ство Users объекта Group, либо добавить объект Group в семейство Groups объекта User. В любом из этих случаев указанный пользователь будет включен в указанную группу.
Примечание. При программировании разрешений следует избегать включения в программу пароля и идентификатора пользователя. Следующий пример является лишь иллюстрацией.
Sub NewTablesUser()
Dim wsp As Workspace, dbs As Database
Dim usr As User, grp As Group, usrMember As User
Dim ctr As Container, doc As Document
' Возвращает ссылку на используемую по умолчанию рабочую область.
Set wsp = DBEngine.Workspaces(0)
' Возвращает ссылку на текущую базу данных.
Set dbs = CurrentDb
' Создает объект User и добавляет его в семейство Users объекта Workspace.
Set usr = wsp.CreateUser("Вася", "123abc456DEF", "Пароль")
wsp.Users.Append usr
' Создает объект Group и добавляет его в семейство Groups объекта Workspace.
Set grp = wsp.CreateGroup("Сантехники", "321xyz654EFD")
wsp.Groups.Append grp
' Добавляет новый объект User в семейство Users нового объекта Group.
Set usrMember = grp.CreateUser("Вася")
grp.Users.Append usrMember
' Обновляет семейство Users объекта Group.
grp.Users.Refresh
' Возвращает объект Container.
Set ctr = dbs.Containers!Tables
' Задает значение свойства UserName объекта Container.
ctr.UserName = usrMember.Name
' Предоставляет новому пользователю разрешение на загрузку данных из всех таблиц.
ctr.Permissions = ctr.Permissions Or dbSecRetrieveData
Set dbs = Nothing
Set wsp = Nothing
End Sub
Свойство AllPermissions (Microsoft Access)
В дополнение к контейнерам, определенным в ядре базы данных Microsoft Jet, в Microsoft Access опре-делены четыре типа объектов Container: Forms, Reports, Scripts и Modules. Отдельные объекты Document типа Form, Report, Script и Module включаются в семейства Documents соответствующих объектов Container. Для этих объектов Container и Document разрешение на доступ определяется с помощью свойства AllPermissions с использованием следующих констант.
Константа Права пользователя или группы

acSecFrmRptReadDef Открытие формы или отчета в режиме конструктора без внесения изменений.
AcSecFrmRptWriteDef Изменение или удаление формы или отчета в режиме конструктора.
AcSecFrmRptExecute Открытие формы в режиме формы или в режиме таблицы; печать или откры-тие отчета в режиме просмотра образца или в режиме предварительного просмотра.
acSecMacReadDef Открытие окна макроса и просмотр макроса без внесения изменений.
AcSecMacWriteDef Изменение или удаление макроса в окне макроса.
AcSecModReadDef Открытие и просмотр модуля без внесения изменений.
AcSecModWriteDef Изменение или удаление содержимого модуля.
AcSecMacExecute Запуск макроса.

Свойство Bookmark (Microsoft Access)
При использовании свойства объекта доступа к данным (DAO) Bookmark в программе Visual Basic для определения закладки в объекте Recordset необходимо включить инструкцию Option Compare Binary в раздел описаний модуля. Свойство DAO Bookmark задает или возвращает закладку, представляющую из себя массив типа Variant данных, принадлежащих к типу Byte, поэтому для модуля необходимо вы-брать двоичный способ сравнения строк. Если для проверки закладки используется способ сравнения текстовых строк, задающийся инструкцией Option Compare Text, или стандартная настройка Option Compare Database, то указатель текущей записи может быть установлен на неверную запись.
Примечание. Не следует путать данное свойство со свойством Bookmark, определенным в Microsoft Access, которое относится к объектам Form и сохраняет закладку в базовых таблицах или запросах формы. Эти два одноименные свойства существуют независимо и не мешают друг другу; можно одно-временно определить закладки и для формы, и для объекта Recordset.
Свойство CacheStart (Microsoft Access)
При использовании свойства CacheStart в модуле Microsoft Access необходимо включить инструкцию Option Compare Binary в раздел описаний модуля. Свойство CacheStart задает или возвращает за-кладку, представляющую из себя массив типа Variant данных, принадлежащих к типу Byte, поэтому для модуля необходимо выбрать двоичный способ сравнения строк. Если для проверки закладки использу-ется способ сравнения текстовых строк, задающийся инструкцией Option Compare Text, или стандарт-ная настройка Option Compare Database, то указатель текущей записи может быть установлен на не-верную запись.
Свойство «Значение по умолчанию» (DefaultValue) - (Microsoft Access)
Если в Microsoft Access свойству объектов доступа к данным (DAO) Значение по умолчанию (DefaultValue) для создания поля типа «Счетчик» присвоено значение GenUniqueID( ), необходимо также свойству Attributes присвоить значение dbAutoIncrement. Если этого не сделать, полю не будет присвоен тип «Счетчик», а при попытке просмотра таблицы в режиме таблицы будет выдано сообщение об ошибке.
В следующем примере показано создание поля с типом данных Счетчик. Объектная переменная tdf имеет тип TableDef, а объектная переменная fld – тип Field.
Set fld = tdf.CreateField("КодСотрудника", dbLong)
fld.DefaultValue = "GenUniqueID()"
fld.Attributes = dbAutoIncrField
tdf.Fields.Append fld
Если значение свойства Значение по умолчанию (DefaultValue) задается с помощью выражения, то в это выражение нельзя включать определяемые пользователем функции, статистические функции по подмножеству Microsoft Access, статистические функции SQL, функцию CurrentUser, функцию Eval, а также ссылки на запросы, формы или другие объекты Field.
Свойство Description (Microsoft Access)
Свойство объектов доступа к данным Description, определенное для объекта Error, возвращает строку, содержащую описание ошибки. Значение данного свойства задается только средствами Visual Basic.
Примечание. Не следует путать данное свойство со свойством Описание (Description) Microsoft Access, в котором определяется описание таблицы или запроса или их полей. Последнее свойство применяется к объекту TableDef, объекту QueryDef или объекту Field в семействе Fields объекта TableDef или QueryDef.
Свойство Filter (Microsoft Access)
Свойство объектов доступа к данным Filter задает фильтр для объекта Recordset. Значение данного свойства задается только средствами Visual Basic.
Примечание. Свойство Microsoft Access Фильтр (Filter) определяет обычный фильтр. Значение этого свойства можно задать в макросе, в программе Visual Basic или в окне свойств формы в режиме конст-руктора.
Свойства HelpContext, HelpFile (Microsoft Access)
Свойства объектов доступа к данным HelpContext и HelpFile определены для объекта Error. Значение данного свойства задается только средствами Visual Basic.
Примечание. Не следует путать данные свойства со свойствами Microsoft Access Идентификатор справки (HelpContextID) и Файл справки (HelpFile). Эти свойства аналогичны свойствам объектов доступа к данным, но относятся только к формам, отчетам и элементам управления. Значения этих свойств можно задать в программе Visual Basic, в макросе или в окне свойств в режиме конструктора формы или режиме конструктора отчета.
Свойство Inherited (Microsoft Access)
В Microsoft Access определен ряд свойств, которые применятся к объектам доступа к данным. Посколь-ку эти свойства определены в Microsoft Access, они не распознаются автоматически ядром базы данных Microsoft Jet. Для того чтобы задать значение какого-либо из этих свойств в программе Visual Basic, не-обходимо сначала создать это свойство с помощью метода CreateProperty, а затем добавить его в се-мейство Properties соответствующего объекта. Более подробное описание см. в разделах, перечислен-ных в указателе справочной системы для объекта Property.
При создании объекта на основе другого объекта производный объект наследует свойства исходного объекта. Свойство Inherited позволяет определить, было ли создано конкретное свойство специально для объекта, или это свойство наследуется от другого объекта.
Предположим, например, что требуется определить свойство Microsoft Access DatasheetFontName для объекта TableDef. Если это свойство создается впервые, то необходимо создать соответствующий объ-ект Property и добавить его в семейство Properties объекта TableDef. Свойство Inherited нового объек-та Property получит значение False (0).
Если затем создается новый объект QueryDef (запрос), базовой таблицей которого является таблица, соответствующая объекту TableDef, то свойство DatasheetFontName будет включено в семейство Properties объекта QueryDef. Свойство Inherited объекта Property, соответствующего данному свойст-ву, получит значение True (–1).
Свойство LastModified (Microsoft Access)
При использовании свойства LastModified в модуле Microsoft Access необходимо включить инструкцию Option Compare Binary в раздел описаний модуля. Свойство LastModified задает или возвращает за-кладку, представляющую из себя массив типа Variant данных, принадлежащих к типу Byte, поэтому для модуля необходимо выбрать двоичный способ сравнения строк. Если для проверки закладки использу-ется способ сравнения текстовых строк, задающийся инструкцией Option Compare Text, или стандарт-ная настройка Option Compare Database, то указатель текущей записи может быть установлен на не-верную запись.
Свойство Permissions (Microsoft Access)
В дополнение к контейнерам, определенным в ядре базы данных Microsoft Jet, в Microsoft Access опре-делены четыре типа объектов Container - объекты Container типа форма, отчет, макрос или модуль. Отдельные объекты Document типа форма, отчет, макрос или модуль включатся в семейства Documents соответствующих объектов Container. Для этих объектов Container и Document разреше-ние на доступ определяется с помощью свойства Permissions с использованием следующих констант.
Константа Права пользователя или группы

acSecFrmRptReadDef Открытие формы или отчета в режиме конструктора без внесения изменений.
acSecFrmRptWriteDef Изменение или удаление формы или отчета в режиме конструктора.
acSecFrmRptExecute Открытие формы в режиме формы или в режиме таблицы; печать или откры-тие отчета в режиме просмотра образца или в режиме предварительного про-смотра.
acSecMacReadDef Открытие окна макроса и просмотр макроса без внесения изменений.
acSecMacWriteDef Изменение или удаление макроса в окне макроса.
acSecModReadDef Открытие и просмотр модуля без внесения изменений.
acSecModWriteDef Изменение или удаление содержимого модуля.
acSecMacExecute Запуск макроса.

Свойство Primary (Microsoft Access)
При определении ключа таблицы в конструкторе таблиц Microsoft Access ключ автоматически использу-ется в качестве основного индекса.
Свойство Size (Microsoft Access)
Свойство Size эквивалентно свойству Размер поля (FieldSize), значение которого задается в режиме конструктора таблицы.. Задать значение свойства Размер поля (FieldSize) средствами Visual Basic не-возможно; вместо этого следует использовать свойство Size.
В Microsoft Access поле Memo может содержать до 1,2 гигабайт данных. Однако в Microsoft Access мож-но отобразить в элементе управления в форме или отчете только первые 32 килобайта.
Свойство Source (Microsoft Access)
Свойство объектов доступа к данным Source, определенное для объекта Error, доступно только для чтения в программах Visual Basic.
Примечание. Не следует путать данное свойство со свойством Source Microsoft Access, определен-ным для запросов, в котором задается строка подключения к источнику и база данных, содержащая ис-ходную таблицу или запрос.
Свойство Type (Microsoft Access)
В Microsoft Access допускается определение типа данных для поля таблицы в режиме конструктора таблицы, а также для параметра в диалоговом окне Параметры запроса. Эти действия эквивалентны определению значения свойства объектов доступа к данным Type для объекта Field или объекта Parameter в программе Visual Basic.
В следующей таблице перечислены константы, определяющие значение свойства Type, и соответст-вующие настройки свойств полей Microsoft Access и типов данных параметров, которые задаются в ре-жиме конструктора таблицы или в диалоговом окне Параметры запроса.
При создании поля таблицы с типом данных числовой следует также в свойстве Размер поля (FieldSize) указать один из шести возможных числовых типов данных поля. По умолчанию, числовые поля получат размер «Длинное целое». Другими допустимыми размерами являются «Байт», «Целое», «С плавающей точкой (4 байт)», «С плавающей точкой (8 байт)» и «Код репликации».
Константа Тип поля таблицы Тип параметра запроса

dbBoolean Логический Логический
dbByte Числовой
(Размер поля = Байт) Байт
dbCurrency Денежный Денежный
dbDate Дата/время Дата/время
dbDouble Числовой
(Размер поля = С пла-вающей точкой (8 байт)) С плавающей точкой
dbGUID Числовой или Счетчик
(Размер поля = Код репликации) Не поддерживается
dbInteger Числовой
(Размер поля = Целое) Целое
dbLong Числовой
(Размер поля = Длин-ное целое) Длинное целое
Счетчик
(Размер поля = Длин-ное целое) Не поддерживается
dbLongBinary Поле объекта OLE Поле объекта OLE
Не поддерживается Двоичный
dbMemo Поле MEMO Поле MEMO
dbSingle Числовой
(Размер поля = С пла-вающей точкой (4 байт)) С плаващей точкой
dbText Текстовый Текстовый
Не поддерживается Не поддерживается Значение

Примечание. Тип параметра «Значение» не соответствует ни одному из типов данных, определенных в ядре базы данных Microsoft Jet. Этот тип соответствует зарезервированному слову VALUE в языке SQL, которое используется при создании запросов с параметрами. В запросах Microsoft Access или за-просах SQL ключевое слово VALUE может рассматриваться как допустимый синоним типа Variant Visual Basic.
Свойство «Условие на значение» (ValidationRule) - (Microsoft Access)
С помощью свойства ValidationRule определяют условия на значение для объектов Field (поле), Recordset (набор записей) или TableDef (таблица) в программах Visual Basic.
Кроме того, допускается задание условий на значение поля или элемента управления в интерфейсе пользователя Microsoft Access с помощью свойства Условие на значение (ValidationRule) в режиме конструктора таблицы. для поля и в режиме конструктора формы для элемента управления.
В Microsoft Access строковое выражение, задающее значение свойства Условие на значение (ValidationRule) объекта Field, не может содержать ссылки на определяемые пользователем функции, статистические функции по подмножеству,, статистические функции SQL, функцию CurrentUser, функ-цию Eval, а также ссылки на запросы.
Свойство «Размер поля» (FieldSize) - (Microsoft Access)
Свойство объектов доступа к данным (DAO) Размер поля (FieldSize) отличается от свойства Microsoft Access Размер поля (FieldSize), устанавливаемого в режиме конструктора таблицы. Свойство DAO Размер поля (FieldSize) возвращает число байт, занимаемое объектом Field (поле) типа Memo или объектом OLE.
В Microsoft Access свойство Размер поля (FieldSize) используется для ограничения размеров поля в таблице. Это свойство доступно только в режиме конструктора. В программе на Visual Basic для этого следует воспользоваться свойством Size.
Свойство Attributes (Microsoft Access)
Если значение свойства Attributes объекта TableDef равно dbHiddenObject, Microsoft Access сокроет объект TableDef. Объект TableDef будет существовать в семействе TableDefs, но не будет отображать-ся в окне базы данных, даже если установлен флажок Скрытые объекты в диалоговом окне Парамет-ры, вызываемом из меню Сервис.
Чтобы создать объект TableDef, который может быть скрыт и отображен, следует присвоить свойству Attributes значение dbSystemObject. После этого объект TableDef может быть сделан видимым путем установки флажка Системные объекты в диалоговом окне Параметры.
Свойство Version (Microsoft Access)
Базы данных, созданные в Microsoft Access 97 и Microsoft Access 95 имеют одинаковый формат. Поэто-му значение свойства Version объекта Database равно 3.0 для баз данных, созданных или преобразо-ванных в формат Microsoft Access 97 или Microsoft Access 95. Если необходимо различать формат баз данных Microsoft Access 97 и Microsoft Access 95, для получения версии Microsoft Access, в которой бы-ла создана данная база данных, следует воспользоваться функцией SysCmd, указав в качестве пара-метра действие встроенную константу acSysCmdAccessVer. Для базы данных Microsoft Access 97 функция SysCmd вернет значение 8.0. Для базы данных Microsoft Access 95  7.0.
Свойство AbsolutePosition (Microsoft Access), пример
В следующем примере выполняется поиск заданной записи в динамическом объекте Recordset и опре-деляется ее порядковый номер:
Sub ПорядковыйНомерЗаписи()
Dim dbs As Database, rst As Recordset
' Возвращает ссылку на текущую базу данных.
Set dbs = CurrentDb
' Возвращает ссылку на динамический объект Recordset.
Set rst = dbs.OpenRecordset("SELECT * FROM Заказы WHERE " _
& "ДатаНазначения >= #1-1-96#;")
' Находит первый заказ, отправляемый в Лондон.
rst.FindFirst "ГородПолучателя = 'Лондон'"
' Возвращает порядковый номер этой записи.
Debug.Print rst.AbsolutePosition
rst.Close
Set dbs = Nothing
End Sub
Свойство Пустые строки (Microsoft Access – Русский), пример
Свойство AllowZeroLength (Microsoft Access – Английский), пример
В следующем примере создается новый объект Field и его свойству Пустые строки (AllowZeroLength) присваивается значение True (–1):
Sub ZeroLengthField()
Dim dbs As Database, tdf As TableDef, fld As Field
' Возвращает ссылку на текущую базу данных.
Set dbs = CurrentDb
' Возвращает ссылку на таблицу «Сотрудники».
Set tdf = dbs.TableDefs!Сотрудники
' Создает новое поле в таблице «Сотрудники».
Set fld = tdf.CreateField("ИмяСупруга", dbText, 15)
' Разрешает в поле ввод пустых строк.
fld.AllowZeroLength = True
' Добавляет объект Field.
tdf.fields.Append fld
Set dbs = Nothing
End Sub
Свойство AllPermissions (Microsoft Access), пример
В следующем примере проверяется значение свойства AllPermissions объекта Container с именем Forms и определяется, имеет ли заданный в свойстве UserName пользователь полный доступ к форме.
Следует отметить, что оператор And выполняет поразрядное сравнение для определения установлен-ных разрешений.
Sub CheckAllPermissions()
Dim dbs As Database, ctr As Container
' Возвращает ссылку на текущую базу данных.
Set dbs = CurrentDb
' Возвращает ссылку на семейство Forms.
Set ctr = dbs.Containers!Forms
' Проверяет, задано ли в свойстве AllPermissions разрешение на полный доступ.
If (ctr.AllPermissions And dbSecFullAccess = dbSecFullAccess) Then
MsgBox "Пользователь " & ctr.UserName & " имеет разрешение на полный доступ ко всем формам."
End If
Set dbs = Nothing
End Sub
Свойство Attributes (Microsoft Access), пример
В следующем примере проверяется значение свойства Attributes каждой таблицы текущей базы дан-ных, а также отображаются имена системных и скрытых таблиц ядра базы данных Microsoft Jet.
Следует отметить, что оператор And выполняет поразрядное сравнение для определения установлен-ных атрибутов.
Sub CheckAttributes()
Dim dbs As Database, tdf As TableDef
' Возвращает ссылку на текущую базу данных.
Set dbs = CurrentDb
For Each tdf In dbs.TableDefs
' Сравнивает значение свойства с заданными константами.
If (tdf.Attributes And dbSystemObject) Or _
(tdf.Attributes And dbHiddenObject) Then
Debug.Print tdf.Name
End If
Next tdf
Set dbs = Nothing
End Sub
Свойства BOF и EOF (Microsoft Access), пример
В следующем примере используется свойство EOF объекта Recordset для установки указателя теку-щей записи за последней записью