776.00K
Категория: ПрограммированиеПрограммирование

Иерархия объектов Application Engine

1.

Иерархия объектов Application Engine

2.

Синтаксис ссылки на объект Form
Forms!имяФормы
Forms!ФормаЗаказы
Forms![имя формы]
Forms![Форма Заказы]
Forms("имяФормы")
Forms("ФормаЗаказы")
Forms(индекс)
Forms(0)
Неявная ссылка на элемент управления
Forms!Заказы!НовыеДанные
Явная ссылка.
Forms!Заказы.Controls!НовыеДанные
Me!НовыеДанные
Me![Новые данные]
пробелами.
Me("НовыеДанные")
' Или Forms!Заказы!НовыеДанные.
' Прямые скобки для имен
' Выполняется несколько медленнее.
с

3.

DoCmd.ApplyFilter [имяЗапроса] [, условиеWhere]
DoCmd.Close [типОбъекта, имяОбъекта], [сохранение]
типОбъекта
Одна из следующих встроенных констант:
acDefault (значение по умолчанию)
acForm (форма)
acMacro (макрос)
acModule (модуль)
acQuery (запрос)
acReport (отчет)
acTable (таблица)
сохранение
Одна из следующих встроенных констант:
acSaveNo (выход без сохранения)
acSavePrompt (подтверждение, значение по умолчанию)
acSaveYes (сохранение без подтверждения)

4.

DoCmd.DeleteObject [типОбъекта, имяОбъекта]
DoCmd.FindRecord образец [, совпадение] [, регистр]
[, поиск] [, формат] [, текущееПоле] [, сНачала]
совпадение
Одна из следующих встроенных констант:
acAnywhere (с любой частью поля)
acEntire (со значением поля) – значение по умолчанию
acStart (с начальными символами в значении поля)
поиск
Одна из следующих встроенных констант:
acDown (вниз)
acSearchAll (везде) - значение по умолчанию
acUp (вверх)
текущееПоле
Одна из следующих встроенных констант:
acAll (все поля)
acCurrent (текущее поле) – значение по умолчанию

5.

DoCmd.FindNext
DoCmd.GoToRecord
запись] [, смещение]
[типОбъекта,
имяОбъекта]
типОбъекта
Одна из следующих встроенных констант:
acActiveDataObject (активный объект, значение по умолчанию)
acDataForm (форма)
acDataQuery (запрос)
acDataTable (таблица)
запись
Одна из следующих встроенных констант:
acFirst (первая)
acGoTo (с указанным номером в аргументе смещение)
acLast (последняя)
acNewRec (новая)
acNext (следующая) - значение по умолчанию
acPrevious (предыдущая)
[,

6.

DoCmd.OpenForm имяФормы [, режим] [, имяФайла] [,
условиеWhere] [, режимДанных] [, режимОкна] [,
аргументыОткрытия]
режим
Одна из следующих встроенных констант::
acDesign (конструктор)
acFormDS (таблица)
acNormal (форма) - значение по умолчанию
acPreview (просмотр)
режимДанных Одна из следующих встроенных констант:
acFormAdd (добавление)
acFormEdit (изменение)
acFormPropertySettings (значения свойств)- по умолчанию
acFormReadOnly (только чтение)
режимОкна
Одна из следующих встроенных констант:
acDialog (окно диалога)
acHidden (невидимое)
acIcon (значок)
acWindowNormal (обычное) - значение по умолчанию

7.

DoCmd.OpenQuery
режимДанных]
имяЗапроса
[,
режим]
режим
Одна из следующих встроенных констант:
acViewDesign (конструктор)
acViewNormal (таблица, значение по умолчанию)
acViewPreview (просмотр)
режимДанных Одна из следующих встроенных констант:
acAdd (добавление)
acEdit (изменение) - значение по умолчанию
acReadOnly (только чтение)
[,

8.

DoCmd.OpenReport имяОтчета [, режим] [, имяФайла]
[, условиеWhere]
режим
Одна из следующих встроенных констант:
acViewDesign (конструктор)
acViewNormal (печать, значение по умолчанию)
acViewPreview (просмотр)
DoCmd.OpenTable
режимДанных]
имяТаблицы
[,
режим]
режим
Одна из следующих встроенных констант:
acViewDesign (конструктор)
acViewNormal (таблица, значение по умолчанию)
acViewPreview (просмотр)
режимДанных Одна из следующих встроенных констант:
acAdd (добавление)
acEdit (изменение, значение по умолчанию)
acReadOnly (только чтение)
[,

9.

[объект.]RunCommand команда
DoCmd.SetWarnings режим

10.

Архитектура Microsoft Jet

11.

Модель
объектов
доступа
к
данным для
рабочей
области
Microsoft Jet

12.

Функция CurrentDb возвращает объектную переменную типа Database,
представляющую текущую базу данных, открытую в окне Microsoft Access.
Функция CurrentDb позволяет создавать несколько объектных переменных,
представляющих одну и ту же базу данных. В следующем примере обе
переменные, dbsA и dbsB, указывают на текущую базу данных.
Dim dbsA As Database, dbsB As Database
Set dbsA = CurrentDb
Set dbsB = CurrentDb

13.

Метод OpenRecordset
Создает новый объект Recordset и добавляет его в семейство
Recordsets. Синтаксис для объектов Connection и Database:
Set наборЗаписей = объект.OpenRecordset (источник, тип,
параметры, блокировки)
Для объектов QueryDef, Recordset и TableDef:
Set наборЗаписей = объект.OpenRecordset (тип, параметры,
блокировки)
тип: dbOpenTable, dbOpenDynamic,
dbOpenDynaset,
dbOpenSnapshot
dbOpenForwardOnly

14.

Свойства ВОF и EOF
Свойство BOF возвращает значение True, если указатель
текущей записи расположен перед первой записью набора
записей, и значение False, если указатель текущей записи
расположен на первой записи набора или на любой записи
после нее.
Свойство EOF возвращает значение True, если указатель
текущей записи расположен после последней записи набора,
и значение False, если указатель текущей записи расположен
на последней записи набора или на любой записи перед ней.
После открытия объекта Recordset необходимо определить,
какие записи доступны. Если в Recordset нет ни одной записи,
то его свойства BOF (Beginning Of File — начало файла) и
EOF (End Of File — конец файла) установлены в True. Если
EOF установлено в False, то Recordset имеет хотя бы одну
запись.

15.

Перемещение с помощью методов Move (MoveFirst,
MoveLast, MoveNext, MovePrevious)
Методы находят в указанном объекте Recordset первую,
последнюю, следующую или предыдущую запись и делают эту
запись текущей записью. Синтаксис
наборЗаписей.{MoveFirst | MoveLast | MoveNext | MovePrevious}
Для определения числа записей можно использовать свойство
RecordCount. Это свойство возвращает число записей, к которым был
осуществлен доступ в объекте Recordset, или полное число записей в
табличном объекте Recordset. Возвращаемое значение имеет тип Long.
После обращения к последней записи набора значение свойства
RecordCount становится равным полному числу неудаленных записей в
объекте Recordset. Для принудительного обращения к последней записи
следует вызвать для объекта Recordset метод MoveLast. По мере удаления
записей из динамического набора в процессе работы приложения значение
свойства RecordCount уменьшается.

16.

Метод Move
Перемещает указатель текущей записи в объекте Recordset.
Синтаксис
наборЗаписей.Move строки, начало
Метод Seek
Находит в индексированном объекте Recordset типа таблицы
запись, удовлетворяющую заданным условиям для текущего
индекса, и делает эту запись текущей записью рабочей области
ядра Microsoft Jet. Синтакси
наборЗаписей.Seek сравнение, ключ1, ключ2...ключ13

17.

сравнение
">=" или ">".
Одно из следующих строковых выражений: "<", "<=", "=",
Перед вызовом метода Seek следует обязательно с помощью свойства
Index указать текущий индекс. Если в индексе используется ключевое поле
с повторяющимися значениями, то метод Seek найдет первую из записей,
удовлетворяющую заданным условиям.
Метод Seek проводит поиск по указанным ключевым полям и находит
первую запись, удовлетворяющую условиям, которые заданы с помощью
аргументов сравнение и ключ1. Найденная запись становится текущей
записью, а свойство NoMatch получает значение False. Если в методе Seek
не найдена запись, удовлетворяющая указанным условиям, свойство
NoMatch получает значение True, а положение текущей записи становится
неопределенным.
В следующем примере метод Seek используется для поиска товара по
коду товара. Если такой код не существует, то выдается сообщение. Цикл
заканчивается, если в InputBox ничего не вводится.

18.

Private Sub Кнопка3_Click()
Dim dbsNorthwind As Database, rstProducts As Recordset, intFirst As
Integer
Dim intLast As Integer, strMessage As String, strSeek As String,
varBookmark As Variant
Set dbsNorthwind = OpenDatabase("D:\Борей.mdb")
' Чтобы использовать индекс в методе Seek, необходимо открыть
объект Recordset.
Set rstProducts = dbsNorthwind.OpenRecordset("Товары", dbOpenTable)
With rstProducts
' Задает индекс.
.Index = "PrimaryKey"
' Определяет минимальный и максимальный код товара.
.MoveLast
intLast = !КодТовара
.MoveFirst
intFirst = !КодТовара

19.

Do While True
' Отображает сведения о текущей записи
' и выводит приглашение задать код.
strMessage = "Код товара: " & !КодТовара & vbCr & _
"Марка: " & !Марка & vbCr & vbCr & _
"Введите код товара в интервале от " & intFirst & _
" до " & intLast & "."
strSeek = InputBox(strMessage)
If strSeek = "" Then Exit Do
' Сохраняет текущую закладку на случай ошибки метода Seek.
varBookmark = .Bookmark
.Seek "=", Val(strSeek)
' Возвращается на текущую запись при ошибке в методе Seek.
If .NoMatch Then
MsgBox "Код не найден!"
.Bookmark = varBookmark
End If
Loop
.Close
End With
dbsNorthwind.Close
End Sub

20.

Методы FindFirst, FindLast, FindNext, FindPrevious.
Находят в объектах Recordset типа динамических и
статических наборов записей первую, последнюю, следующую
или предыдущую запись, удовлетворяющую заданным
условиям, и делают эту запись текущей записью (только в
рабочей области ядра Microsoft Jet). Синтаксис
наборЗаписей.{FindFirst | FindLast | FindNext | FindPrevious}
условия
Если запись, удовлетворяющая заданным условиям, не
обнаружена, то состояние указателя текущей записи
становится неопределенным, и свойству NoMatch
присваивается значение True.

21.

В следующем примере создается динамический объект Recordset, а затем с
помощью метода FindFirst находится первая запись, удовлетворяющая
указанному условию. После этого находятся все остальные записи,
удовлетворяющие условию и выводятся в окно отладки
При поиске в полях, содержащих даты, следует использовать
американский формат даты (месяц-день-год) даже в случае работы с
локализованной версией ядра базы данных Microsoft Jet; в противном
случае искомая запись может быть не найдена.
Private Sub Кнопка0_Click()
Dim dbs As Database, rst As Recordset, strCriteria As String
' Возвращает ссылку на текущую базу данных.
Set dbs = CurrentDb
' Задает условие поиска.
strCriteria = "[СтранаПолучателя] = 'Великобритания' And [ДатаРазмещения] >=
#1-1-95#"
Последняя инструкция должна быть записана в одну строку

22.

' На основе таблицы "Заказы" создает динамический объект 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

23.

Метод Edit
Копирует текущую запись из обновляемого объекта Recordset в
буфер копирования для последующего изменения. Синтаксис
наборЗаписей.Edit
Метод Update
Сохраняет содержимое буфера копирования в обновляемом
объекте Recordset. Метод Update применяется для сохранения
текущей записи и всех внесенных в нее изменений. Синтаксис
наборЗаписей.Update
В следующем примере открывается объект Recordset и ищутся все
записи, удовлетворяющие условию поиска для поля «Должность». Затем
для подготовки записей к редактированию используется метод Edit,
изменяется должность и изменения сохраняются.

24.

Sub ChangeTitle()
Dim dbs As Database, rst As Recordset, 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

25.

Метод AddNew
Создает новую запись в обновляемом объекте Recordset.
Синтаксис
наборЗаписей.AddNew
Метод Delete
Метод удаляет текущую запись в обновляемом объекте
Recordset.
Синтаксис
наборЗаписей.Delete
В следующем примере в таблице «Авторы» создается новая запись и
сохраняются внесенные в нее изменения

26.

Private Sub Кнопка29_Click()
Dim rst As Recordset, dbs As Database
Set dbs = CurrentDb
Set rst = dbs.OpenRecordset("Авторы", dbOpenDynaset)
With rst
.AddNew
' Добавляет новую запись.
!Фамилия = "Пушкин" ' Заполнение данными.
!Имя = "Александр"
!Отчество = "Сергеевич"
.Update
' Сохранение изменений.
End With
rst.Close
Set dbs = Nothing
End Sub

27.

Метод CreateQueryDef
Создает новый объект QueryDef в указанном объекте Connection
или Database. Синтаксис
Set запрос = объект.CreateQueryDef (имя, строкаSQL)
В следующем примере создается новый объект 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

28.

Метод Execute
Выполняет запрос на изменение или
Синтаксис
инструкцию SQL.
запрос.Execute
Метод Execute определен только для запросов на
изменение. При попытке применить метод Execute к запросу
другого типа возникает ошибка.
Поскольку запрос на
изменение не возвращают записей, при вызове метода Execute
объект Recordset не создается.

29.

Метод CreateTableDef объекта Database
Используется для создания нового объекта TableDef
Синтаксис
Set таблица = базаДанных.CreateTableDef (имя)
Для удаления объекта TableDef из семейства TableDefs следует
применить метод Delete к семейству TableDefs. (семейство.Delete
имяОбъекта).

30.

Создание в базе данных новой таблицы предполагает
выполнение следующих шагов:
1.
Вызовите метод CreateTableDef для создания объекта
TableDef.
2.
Задайте свойства объекта.
3.
Для каждого поля в таблице создайте объектную
переменную для объекта Field и задайте ее свойства с
помощью метода CreateField.
4.
Добавьте объект Field в семейство Fields объекта
TableDef с помощью метода Append.
5.
Добавьте новый объект TableDef в семейство
TableDefs объекта Database с помощью метода Append

31.

Метод CreateField
Создает новый объект Field (только в рабочей области ядра
Microsoft Jet). Синтаксис
Set поле = объект.CreateField (имя, тип, размер)
Метод CreateIndex
Создает новый объект Index (только в рабочей области ядра
Microsoft Jet). Синтаксис
Set индекс = таблица.CreateIndex (имя)
В следующем примере создается новая таблица с двумя новыми
полями. Одно из этих полей имеет тип «Счетчик». Это поле становится
ключевым полем таблицы.

32.

Sub NewTable()
Dim dbs As Database, 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

33.

' Создает индекс по ключевому полю.
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
English     Русский Правила