Страница 168 из 179
Постоянная ∙ Значение ∙ Описание
vbDataActionCancel ∙ 0 ∙ Отменяет операцию при выходе из процедуры обработки события.
vbDataActionMoveFirst ∙ 1 ∙ Нажата кнопка перехода к первой записи на объекте Data или применен метод MoveFirst объекта Recordset.
vbDataActionMovePrevious ∙ 2 ∙ Нажата кнопка перехода к предыдущей записи на объекте Data или применен метод MovePrevious объекта Recordset.
vbDataActionMoveNext ∙ 3 ∙ Нажата кнопка перехода к следующей записи на объекте Data или применен метод MoveNext объекта Recordset.
vbDataActionMoveLast ∙ 4 ∙ Нажата кнопка перехода к последней записи на объекте Data или применен метод MoveLast объекта Recordset.
vbDataActionAddNew ∙ 5 ∙ Применен метод AddNew объекта Recordset или указатель текущей записи перемещен за конец файла при установленном свойстве EOFAction объекта Data в AddNew.
vbDataActionUpdate ∙ 6 ∙ Применен метод Update объекта Recordset (но не UpdateRecord объекта Data).
vbDataActionDelete ∙ 7 ∙ Применен метод Delete объекта Recordset.
vbDataAction ∙ 8 ∙ Применен один из методов Find объекта Recordset.
vbDataActionBookmark ∙ 9 ∙ Изменено свойство Bookmark объекта Recordset.
vbDataActionClose ∙ 10 ∙ Применен метод Close объекта Recordset.
vbDataActionUnload ∙ 11 ∙ Выгружена экранная форма, содержащая объект управления данными.
В процедуре обработки события Validate можно заменить действие, вызвавшее это событие, на другое действие при помощи установки свойства Action соответствующим образом. При этом совершенно свободно можно менять любой из методов Move на метод AddNew и обратно. Отмена любого действия производится установкой аргумента Action в 0 (Action = vbDataActionCancel).
Примером обработки события Validate можно найти в уже рассмотренном ранее проекте, посвященном применению метода UpdateControls. Только теперь, вместо метода UpdateControls для отмены результатов редактирования, вы можете использовать установку аргумента Action в vbDataActionC ancel:
Private Sub Data1_Validate(Action As Integer, Save As Integer) If Save=False Then Exit Sub End If
If MsgBox("Coxpaнить сделанные изменения",vbYesNo,"","",0)=vbNo Then
Action=vbDataActionCancel
Exit Sub
End If
End Sub
Урок 5
Элемент управления Data и объекты доступа к данным
Использование объекта управления данными позволяет быстро создавать простые приложения для работы с базами данных практически без написания кода, только при помощи соответствующих установок его свойств и применения его методов. Для отображения информации на экранной форме используются связанные элементы управления. Однако, для повышения функциональности разрабатываемого приложения вам, скорее всего, придется все-таки писать код. К счастью, Visual Basic 5 обеспечивает очень широкие возможности для программирования операций с данными. В следующих разделах этой главы описана лишь небольшая часть из чрезвычайно широкого сервиса, предоставляемого разработчику системой Visual Basic 5. Более полно и подробно использование в приложениях объектов доступа к данным изложено в последующих уроках.
Перемещение по набору записей с использованием Моvе-методов
Ранее было показано, как перемещаться от записи к записи в базе данных с использованием кнопок со стрелками на объекте управления данными. В этом разделе обсуждаются способы перемещения по базе данных с использование методов объекта Recordset, созданного объектом Data, то есть с помощью программного кода.
Следующая таблица показывает, вызов какого из методов объекта Recordset эквивалентен нажатию кнопки со стрелкой на объекте управления данными.
Куда переместить указатель текущей записи ∙ Использование метода Move
К первой записи ∙ Data1.Recordset.MoveFirst
К предыдущей записи ∙ Data1.Recordset.MovePrevious
К следующей записи ∙ Data1.Recordset.MoveNext
К последней записи ∙ Data1.Recordset.MoveLast
При разработке приложений часто возникает необходимость перемещения к первой или последней записи в наборе записей. Например, если вам требуется запрограммировать процедуру поиска записи, содержащей какое-либо значение, вполне естественным условием будет начинать поиск с первой строки.
Для перемещения указателя текущей записи на первую или последнюю записи используются методы MoveFirst и MoveLast:
Data1.Recordset.MoveFirst
Data1.Recordset.MoveLast.
Если текущий указатель позиционирован на первой или последней записи в наборе записей, то дальнейшее перемещение назад и вперед, соответственно, устанавливает свойства объекта Recordset BOF и EOF в True. Если BOFAction и EOFAction свойства объекта управления данными установлены в единицу, то в этом случае указатель текущей записи становится недопустимым и связанные органы управления очищаются. При использовании метода Move для перемещения указателя за пределы файла Visual Basic генерирует ошибку.
Пусть требуется последовательно проделать какие-либо операции с записями от текущей до последней включительно. В этом случае вы можете использовать следующий фрагмент кода для безопасного перемещения от любой записи в базе данных к последней:
Do While Data1.Recordset.EOF = False
Data1.Recordset.MoveNext код для работы с текущей записью
Loop
Data1.Recordset.MoveLast
В конце этого цикла указатель текущей записи становится недопустимым и требуется использовать метод MoveLast, чтобы его переустановить на последнюю запись в наборе.
Методы MoveNext и MovePrevious перемещают указатель на следующую и предыдущую записи в наборе записей. Обычно эти методы используются для последовательного просмотра содержимого полей базы данных.
Следующий фрагмент кода загружает два списка и заполняет их названиями книг и годами их публикации из таблицы TITLES базы данных BIBLIO.MDB.
Data1.DatabaseName="C: VB5BIBLIO.MDB"
Data1.RecordSource="Titles"
Data1.Refresh
Do Until Data1.Recordset.EOF Entry = Data1.Recordset("Title")
List1Addltem Entry
Entry = Data1.Recordset("Year Published")
List2.AddItem Entry
Data1.Recordset.MoveNext
Loop
Вы также можете применить Move метод с целочисленным аргументом для перемещения указателя текущей записи на определенное количество строк вперед или назад (в зависимости от знака аргумента) от текущего положения указателя или от положения, сохраненного с использованием закладки. Следующий пример показывает, как переместить указатель текущей записи на пять строк вперед, начиная от положения, определенного свойством MyBookmark:
Data1.Recordset.Move 5, MyBookmark.
Для перемещения по набору записей также можно использовать такие свойства объекта Recordset, как AbsolutePosition и PercentPosition.
Перемещение по набору записей с помощью закладок
Использование закладки (bookmark) позволяет сначала сохранить указатель на текущую запись и затем, из любого места базы данных непосредственно позиционировать его на этой записи. Свойство Bookmark объекта Recordset содержит указатель на запись. Установкой свойства Bookmark, равному значению сохраненного ранее указателя, вы можете прямо позиционировать указатель на требуемую запись.
Следующий фрагмент кода устанавливает указатель текущей записи в положение, предварительно сохраненное с использованием закладки MyBookmark:
Dim MyBookmark As Variant
MyBookmark = Data1.Recordset.Bookmark
Data1.Recordset.MoveLast