Свойства, методы и события объекта управления данными
Объект Data, как и любой другой элемент управления в Visual Basic, имеет несколько стандартных, общих для многих элементов управления, свойств, методов и событий. Наряду с ними, он имеет целый ряд свойств, методов и событий, предназначенных для работы с данными. Именно они и будут последовательно рассмотрены ниже.
Свойства
BOFAction
Свойство BOFAction определяет действие объекта Data, если свойство BOF (beginning of file - начало файла) у созданного им набора записей установлено в True.
Синтаксис: data1.BOFaction=value.
Значение value может быть выбрано из двух альтернатив: MoveFirst или BOF.
При создании объекта Data свойство BOFAction устанавливается по умолчанию как MoveFirst. При этом текущей становится первая запись в наборе записей.
Установка свойства BOFAction в BOF приводит к тому, что при перемещении указателя текущей записи за пределы набора сверху, текущая запись становится недопустимой (invalid) и любая попытка ее редактирования приведет к ошибке. В этом случае происходит событие Validate на первой записи в наборе и, затем, событие Reposition, уже на недопустимой записи. При этом кнопка перемещения указателя к предыдущей записи на объекте управления данными становится неактивной.
Установить свойство BOFAction объекта управления данными data1 в режиме выполнения приложения можно следующим образом:
data1.BOFaction= vbBOFActionMoveFirst,
или
data1.BOFaction= vbBOFActionBOF.
Возможные установки свойства BOFAction приведены в следующей таблице.
Установка | Константа | Значение |
---|---|---|
MoveFirst | vbBOFActionMoveFirst | 0 |
BOF | vbBOFActionBOF | 1 |
Connect
Свойство Connect определяет тип базы данных, открываемой объектом Data. По умолчанию открывается база данных в формате Microsoft Access.
Синтаксис: data1.сonnect=string.
Возможные варианты установки свойства Connect приведены в следующей таблице.
Тип базы данных | Определение |
---|---|
MS Access | ";" |
dBASE x | "dBASE x;" |
Paradox x.x | "Paradox x.x;" |
FoxPro x.x | "FoxPro x.x;" |
Excel x.0 | "Excel x.0;" |
Lotus WKx | "Lotus WKx;" |
Text | "Text;" |
Btrieve | "Btrieve;" |
ODBC | "ODBC; DATABASE = defaultdatabase; UID=user; PWD=password; DSN=datasourcename; LOGINTIMEOUT=seconds" |
Установка свойства Connect в режиме выполнения приложения производится следующим образом:
data1.connect= " dBASE IV;"
или
data1.connect= " FoxPro 3.0;".
Database
Использование свойства Database в режиме выполнения приложения позволяет получить ссылку на объект Database, который создан объектом Data.
Синтаксис: Set databaseobject = data1.Database.
Объект Data создает объект Database на основе своих свойств DatabaseName, Exclusive, ReadOnly, и Connect. Так как объект Database имеет свои собственные свойства и методы то, получив на него ссылку, вы можете использовать их в приложении. Например, вы можете использовать методы Close или Execute. Подробное описание работы с объектом Database приведено в уроках, посвященных объектам доступа к данным.
DatabaseName
Использование свойства DatabaseName позволяет получить или установить имя и месторасположение источника данных для объекта Data.
Синтаксис: data1.DatabaseName=string.
Строковое выражение string определяет месторасположение и имя файла базы данных в форматах MS Access и Btrieve. Если используется база данных, размещенная на файл-сервере, то строка должна включать полный путь к требуемому файлу, например:
\\SERVER\DATA\DATABASE.MDB.
Для баз данных в формате dBASE, Paradox и др. строка string должна содержать только путь к файлу.
Для баз данных ODBC это свойство не определяется, так как все необходимые параметры для связи с базой данных устанавливаются свойством Connect.
Если вы во время работы приложения изменяете свойство DatabaseName, то после сделанных изменений необходимо выполнить метод Refresh объекта Data.
Продемонстрируем использование свойства DatabaseName в режиме выполнения приложения. Для этого:
- Откройте проект, созданный для просмотра содержимого файла BIBLIO.MDB.
- Удалите содержимое свойства DatabaseName объекта управления данными Data1.
- Добавьте следующий код в процедуру обработки сообщения о загрузке формы:
Private Sub Form_Load() data1.databasename= "c:\vb5\biblio.mdb" data1.refresh End Sub
- Запустите проект.
При разработке приложений для работы с базами данных лучше не привязывать пользователя к конкретной структуре каталогов установкой свойства DatabaseName на этапе разработки программы. Это может быть не всегда удобно для пользователя. Хорошим примером уважительного отношения к пользователю служит хранение путей к файлам баз данных в специальных файлах конфигурации вашего приложения с последующим считыванием этой информации в процессе загрузки программы. Код, осуществляющий эту операцию, можно включить, например, в процедуры обработки событий Load или Activate соответствующей экранной формы.
Другим способом определения пути к файлу базы данных является использование глобального объекта Visual Basic - объекта App. Хотя этот объект не имеет ни методов, ни событий, у него есть несколько очень полезных свойств. Одним из них является свойство Path, которое определяет путь к выполняемому файлу. Если вы используете интегрированную среду разработки Visual Basic, например, для отладки приложения, то App.Path определяет путь к файлу проекта, который вы запустили.
Пусть файлы баз данных для вашей программы находятся в подкаталоге DBASE каталога, в котором находится ваше приложение (проект). Тогда вы можете определить необходимый путь к файлу с помощью следующего фрагмента кода. Причем каталог, из которого запускается приложение (проект) может называться как угодно.
Dim DBName As String DBName = "BIBLIO.MDB" Data1.Databasename = App.Path+"\DBASE\"+DBName Data1.Refresh
EOFAction
Свойство EOFAction определяет действие объекта Data, если свойство EOF (end of file - конец файла) у созданного им набора записей установлено в True.
Синтаксис: data1.EOFAction=value.
Значение value может быть выбрано из трех альтернатив: MoveLast, EOF, или AddNew.
При создании объекта Data свойство EOFAction устанавливается по умолчанию как MoveLast. При этом текущей остается последняя запись в наборе записей.
Установка свойства EOFAction в EOF приводит к тому, что при перемещении указателя текущей записи за пределы набора снизу, текущая запись становится недопустимой (invalid) и любая попытка ее редактирования приведет к ошибке. В этом случае происходит событие Validate на последней записи в наборе и, затем, событие Reposition, уже на недопустимой записи. При этом кнопка перемещения указателя на следующую запись на объекте управления данными становится неактивной.
Если установить свойство EOFAction в AddNew, то при перемещении указателя текущей записи за последнюю запись набора, происходит событие Validate на последней записи, затем, в набор записей добавляется новая пустая запись и происходит событие Reposition. Когда пользователь таким способом добавляет новую запись, эта она сначала создается в памяти компьютера в буфере копирования. Если после этого пользователь ввел необходимые данные и переместил указатель текущей записи на любую другую запись, то новая строка, уже содержащая данные, будет помещена в набор записей и потом в базу данных. В противном случае, если пользователь не ввел данные и переместил указатель, то пустая новая строка не добавляется в набор записей. Таким образом, установка свойства EOFAction в AddNew дает возможность пользователю добавлять в базу данных новые записи с помощью объекта Data и связанных с ним элементов управления.
Установить свойство EOFAction объекта управления данными data1 в режиме выполнения приложения можно следующим образом:
data1.EOFaction=vbEOFActionMoveLast, data1.EOFaction=vbEOFActionEOF, data1.EOFaction=vbEOFActionAddNew.
Возможные установки свойства EOFAction приведены в следующей таблице.
Установка | Величина | Значение |
---|---|---|
vbEOFActionMoveLast | 0 | MoveLast |
vbEOFActionEOF | 1 | EOF |
vbEOFActionAddNew | 2 | AddNew |
Приведем пример приложения, в котором есть возможность добавлять в базу данных новые записи. Для этого:
- Создайте вспомогательную базу данных BIBLIO2.MDB, содержащую всего одну таблицу TITLES (чтобы не изменить оригинальную базу данных BIBLIO.MDB). Это можно сделать с помощью MS Access.
- Откройте новый проект и добавьте на форму объект управления данными Data1.
- В окне свойств объекта Data1 установите свойство DatabaseName, как имя файла базы данных с указанием полного пути C:\VB5\BIBLIO2.MDB.
- В окне свойств объекта Data1 установите свойство RecordSource как TITLES.
- Разместите на форме пять меток и,
соответственно, пять текстовых окон как показано
на рис.4.8 и установите их свойства следующим
образом:
Label1.Caption=Название Text1.DataSource=Data1 Text1.DataField=Title Label2.Caption=Год выпуска Text2.DataSource=Data1 Text2.DataField=Author Label3.Caption=Доп. информация Text3.DataSource=Data1 Text3.DataField=Year Published Label4.Caption=Описание Text4.DataSource=Data1 Text4.DataField=Subject Label5.Caption=Ид. издателя Text5.DataSource=Data1 Text5.DataField=Description
Рис.4.1. Вид экранной формы. - Запустите приложение.
- Переместите указатель на последнюю запись и, затем, добавьте новую пустую запись нажатием на кнопку перехода к следующей записи.
- Введите какие-нибудь данные в связанных текстовых окнах и переместите указатель на любую другую запись, например, на предыдущую. Если, введенные вами данные соответствуют типам полей в таблице, то новая запись будет добавлена в набор записей и в базу данных. Результат работы программы показан на рис.4.2.
- Теперь еще раз добавьте новую запись и, не редактируя данные в текстовых окнах, переместите указатель на другую запись. Убедитесь, что пустая запись не добавляется в базу данных.
Рис.4.2. Новая запись в базе данных.
Exclusive
Свойство Exclusive определяет режим работы открываемой базы данных: однопользовательский или многопользовательский.
Синтаксис: data1.Exclusive=value.
Значение value имеет тип boolean и может принимать значения True или False. Если свойство Exclusive установлено в True, то база данных открывается в однопользовательском режиме. Если оно установлено в False, то с базой данных могут одновременно работать несколько пользователей. По умолчанию свойство Exclusive устанавливается в False для поддержки многопользовательского режима работы.
Свойство Exclusive используется объектом Data только во время открытия базы данных, поэтому, если переустановить его во время выполнения приложения, то необходимо применить также и Refresh метод:
Data1.Exclusive=true Data1.Refresh.
Операции с базой данных, открытой в однопользовательском режиме, выполняются несколько быстрее, чем с базой данных, доступной для многих пользователей.
Для баз данных ODBC это свойство игнорируется.
Откройте проект, созданный для демонстрации свойства EOFAction, установите свойство Exclusive объекта управления данными в True и запустите его. Таким образом, вы открыли базу данных BIBLIO2.MDB в однопользовательском режиме. Затем запустите систему управления базами данных MS Acces и попытайтесь открыть файл BIBLIO2.MDB. Результатом ваших действий будет выданное на экран сообщение, уведомляющее вас, что базу данных открыть невозможно.
Options
Свойство Options позволяет установить или получить один или несколько параметров набора записей созданного объектом Data. Это свойство обычно используется при разработке многопользовательских приложений.
Синтаксис: data1.Options=value.
Возможные значения параметра value приведены в следующей таблице:
Постоянная | Значение |
---|---|
dbDenyWrite | 1 |
dbDenyRead | 2 |
dbReadOnly | 4 |
dbAppendOnly | 8 |
dbInconsistent | 16 |
dbConsistent | 32 |
dbSQLPassThrough | 64 |
dbForwardOnly | 256 |
dbSeeChanges | 512 |
Ниже приведено краткое описание возможных установок свойства Options:
- dbDenyWrite - в многопользовательской среде другие пользователи не могут вносить изменения в записи;
- dbDenyRead - в многопользовательской среде другие пользователи не имеют возможности читать записи. Эта установка применяется только для наборов записей типа таблица;
- dbReadOnly - набор записей открывается только для чтения. В этом случае вы не можете изменять записи;
- dbAppendOnly - в этом случае вы имеете возможность добавлять новые записи в набор записей, но не можете редактировать существующие записи;
- dbInconsistent - обновление может применяться для всех полей в наборе записей, даже если они нарушают условие объединения;
- dbConsistent - обновление применяется только для тех полей в наборе записей, которые не нарушают условие объединения. Это значение свойства Options устанавливается по умолчанию;
- dbSQLPassThrough - эта константа означает, что SQL-запрос, определенный свойством RecordSource объекта управления данными, будет выполняться на сервере MS SQL Server или Oracle (если вы, конечно, используете такие ODBC-базы данных);
- dbForwardOnly - эта установка определяет набор записей таким образом, что по нему возможно перемещение только вперед (только метод MoveNext может использоваться для перемещения по набору записей);
- dbSeeChanges - установка этого значения вызывает появление ошибки, когда какой либо пользователь изменил данные в то время, когда вы их редактируете.
При необходимости установить сразу несколько параметров набора записей, используйте операцию сложения. После изменения свойства Options во время выполнения приложения необходимо применить метод Refresh. Следующий пример иллюстрирует, как в многопользовательской среде открыть набор записей только для чтения исключительно для собственного пользования:
Data1.DatabaseName="C:\VB5\BIBLIO.MDB" Data1.Options=dbDenyWrite + dbReadOnly Data1.Refresh.
Для того, чтобы сравнить параметры набора записей с каким либо определенным значением вы можете использовать оператор And. С использованием следующего фрагмента кода вы, например, можете проверить, открыт ли набор записей только для чтения:
If Data1.Options And dbReadOnly Then...
ReadOnly
Свойство ReadOnly определяет метод доступа к базе данных, открытой с помощью объекта Data: только для чтения или для чтения-записи.
Синтаксис: data1.ReadOnly=Boolean.
Если свойство ReadOnly установлено в True, то открытая база данных доступна только для чтения и вы, следовательно, не имеете возможности редактировать данные. Если же свойство установлено в False, то база данных открыта для чтения-записи и вы можете делать с данными все, что угодно. По умолчанию свойство ReadOnly устанавливается в False.
После изменения свойства ReadOnly во время выполнения приложения необходимо применить метод Refresh. Следующий пример показывает, как открыть базу данных только для чтения:
Data1.DatabaseName="С:\VB5\BIBLIO.MDB" Data1.ReadOnly=True Data1.Refresh
Если нет необходимости редактировать данные, то предпочтительно открывать базу данных в режиме только для чтения, так как операции с данными в этом случае выполняются несколько быстрее.
Recordset
Свойство Recordset определяет набор записей, создаваемый объектом Data.
Синтаксис: data1.Recordset=string.
Параметр string представляет собой текстовую строку, которая определяет набор записей.
После загрузки приложения автоматически создается объект Data. Если у него корректно установлены свойства Connect, DatabaseName, Options, RecordSource, Exclusive, ReadOnly и RecordsetType, то ядро системы управления базами данных Jet database engine создаст новый объект Recordset. То же самое произойдет, если во время выполнения приложения будет применен метод Refresh объекта Data. Доступ к этому объекту - набору записей можно получить через свойство Recordset объекта Data.
Объект Recordset имеет несколько свойств и методов, о которых речь пойдет в разделе, посвященном использованию объектов доступа к данным. Тем не менее, в следующем примере показано, как использовать метод Delete объекта Recordset для удаления записей.
- Откройте проект, который использовался для демонстрации возможности добавления записи в базу данных с использованием объекта управления данными.
- Добавьте на форму командную кнопку и определите ее свойство Caption, как “Удалить”.
- Добавьте в процедуру обработки события Click
командной кнопки следующий фрагмент кода:
Private Sub Command1_Click() Data1.Recordset.Delete Data1.Refresh End Sub
- Запустите приложение. Теперь, используя в приложении объект управления данными, вы можете не только добавлять в базу данных новые записи, но и удалить любую запись.
RecordsetType
Свойство RecordsetType определяет тип набора записей, созданного объектом Data.
Синтаксис: data1.RecordsetType=value.
Параметр value определяет тип набора записей. Возможные значения параметра value приведены в следующей таблице:
Постоянная | Значение | Описание |
---|---|---|
vbRSTypeTable | 0 | Создается набор записей типа таблицы. |
vbRSTypeDynaset | 1 | Создается набор записей динамического типа. Этот тип создается по умолчанию. |
vbRSTypeSnapshot | 2 | Создается статический набор записей. |
После изменения свойства RecordsetType во время выполнения приложения необходимо применить метод Refresh.
В следующем примере для объекта управления данными Data1 закрывается существующий набор записей и, затем, создается новый набор записей статического типа:
Data1.Recordset Close Data1.RecordsetType=vbRSTypeSnapshot Data1.DatabaseName= “C:\VB5\BIBLIO.MDB” Data1.RecordSource= “select * from Titles” Data1.Refresh.
RecordSource
Свойство RecordSource определяет источник данных для набора записей, создаваемого объектом Data.
Синтаксис: data1 RecordSource=string.
Параметр string представляет собой строку, определяющую источник данных. Возможные значения этого параметра представлены в следующей таблице:
Установка | Описание |
---|---|
Имя таблицы | Имя одной из таблиц, содержащихся в базе данных. |
SQL-запрос | Текстовая строка, представляющая собой SQL-запрос к базе данных. Причем синтаксис SQL выражения должен соответствовать типу базы данных. |
Объект QueryDef | Имя одного из объектов QueryDef из набора QueryDefs объекта Database. Этот источник данных поддерживается только для баз данных MS Access. |
Чтобы проиллюстрировать использование свойства RecordSource объекта Data, построим приложение для просмотра полей базы данных BIBLIO2.MDB, в котором предусмотрим возможность отображать данные на экране компьютера упорядоченным образом. Для этого требуется выполнить следующие действия:
- Откройте новый проект.
- Добавьте на форму объект управления данными Data1 и определите его свойство DatabaseName, как C:\VB5\ BIBLIO2.MDB. Не устанавливайте свойство RecordSource.
- Добавьте на форму объект DBGrid и определите его свойство RecordSource, как Data1.
- Добавьте на форму метку “Упорядочить по” и объект ComboBox.
- Добавьте в раздел General следующий код:
Dim x As Integer Dim A(4) As String Dim B(4) As String
- Добавьте в процедуру загрузки формы следующий код:
Private Sub Form_Load() A(0) = "Названиям" A(1) = "Году издания" A(2) = "ISBN" A(3) = "Ид.Издателя" For i = 0 To 3 Combo1.AddItem A(i) Next i Combo1.ListIndex = 0 B(0) = "Title" B(1) = "[Year Published]" B(2) = "ISBN" B(3) = "PubID" End Sub
- Добавьте в процедуру обработки события Click
элемента управления ComboBox следующий код:
Private Sub Combo1_Click() Dim str1 As String str1 = "select * From titles order by " & B(Combo1.ListIndex) If Combo1.ListIndex = Empty Then str1 = "select * From titles" End If Data1.RecordSource = str1 Data1.Refresh End Sub
- Запустите проект на выполнение.
После загрузки формы, данные в таблице DBGrid будут отображены в неупорядоченном виде, вернее, данные будут размещены в физическом порядке, то есть в том, в котором они были введены в базу данных, хотя в элементе управления ComboBox будет показано “По названиям”. Затем выберите из списка другой доступный способ упорядочения, например, “По году издания”. После обработки события Click будет создан новый набор записей, источником данных для которого будет служить результат выполнения следующего SQL-запроса
select * From titles order by [Year Published].
На рис.4.3 представлена библиографическая информации из базы данных BIBLIO2.MDB, упорядоченная по году издания книги.
Рис.4.3. Библиографические данные, упорядоченные по году издания книги.
Методы объекта Data
Refresh
После изменения свойства объекта Data во время выполнения приложения, ядро системы управления базами данных Jet database engine сразу не меняет ранее уже установленные свойства. Вообще говоря, просто изменить в программе одно установленное свойство на другое невозможно. Необходимо заново инициализировать объект управления данными, который затем автоматически создаст другие объекты доступа к данным (например, DataBase или Recordset) с уже новыми свойствами. Для этого необходимо применить метод Refresh. Таким образом, метод Refresh используется для того, чтобы во время выполнения приложения переинициализировать объект управления данными, но уже с новыми свойствами.
Синтаксис: Data1.Refresh.
После применения метода Refresh указатель текущей записи устанавливается на первой записи в наборе, созданном объектом Data.
UpdateControls
Действие метода UpdateControls полностью аналогично переустановке указателя текущей записи на себя. При этом, связанные элементы управления очищаются и, затем, их содержимое восстанавливается согласно текущей записи. То есть, никаких изменений полей базы данных не происходит, даже если содержимое связанных элементов управления было отредактировано.
Синтаксис: Data1.UpdateControls.
Хорошей иллюстрацией использования метода UpdateControls является предоставление пользователю возможности подтвердить сделанные изменения содержимого текущей записи. Для этого необходимо вмешаться в процедуру обработки события Validate объекта Data.
- Откройте проект, который использовался для
демонстрации удаления записи и добавьте
следующий фрагмент кода в процедуру обработки
события Validate:
Private Sub Data1_Validate(Action As Integer, Save As Integer) If Save = False Then Exit Sub End If If MsgBox("Сохранить сделанные изменения", vbYesNo,"","",0)=vbNo The Data1.UpdateControls Exit Sub End If End Sub
- Запустите приложение.
- Измените содержимое какого-нибудь связанного текстового окна, например, года издания, и, используя кнопки перемещения по набору записей, измените положение текущей записи. В результате, на экран будет выдано диалоговое окно, в котором можно подтвердить или отменить сделанные изменения.
- Закройте приложение.
UpdateRecord
Метод UpdateRecord сохраняет в базе данных содержимое текущей записи, отображаемое в связанных элементах управления.
Синтаксис: Data1.UpdateRecord.
Использование этого метода позволяет сохранить содержимое связанных элементов управления в базе данных без перемещения указателя текущей записи. При этом не генерируется событие Validate. Следует отметить, что перед использованием этого метода необходимо убедиться, что соблюдены правила целостности базы данных.
Следующий пример показывает, как использовать в приложениях метод UpdateRecord:
- Откройте проект, использованный для демонстрации метода UpdateControls.
- Разместите на форме командную кнопку,
измените ее свойство Caption на “Обновить данные” и
добавьте следующий код в процедуру обработки
события Click:
Private Sub Command2_Click() Data1.UpdateRecord End Sub
- Запустите проект. Отредактируйте содержимое связанных элементов управления и нажмите кнопку “Обновить данные”. Теперь, сделанные вами изменения сохранены в базе данных.
События
Error
Событие Error происходит, когда при использовании объекта Data возникает какая-либо ошибка доступа к данным, причем в это время программный код, написанный программистом не выполняется. Примером такой ситуации может быть случай, когда база данных, определенная свойством DatabaseName объекта Data, не найдена. Здесь не выполняется написанного программистом кода и, поэтому, обработка такого рода ошибки невозможна с использованием стандартных средств Visual Basic. К счастью, в этом случае происходит событие Error, в процедуру обработки которого программист имеет полное право вмешаться.
Синтаксис: Private Sub Data1_Error (DataErr As Integer, Response As Integer)
Параметр DataErr содержит код ошибки. Различные варианты действия после возникновения ошибки определяются параметром Response, и приведены в следующей таблице:
Постоянная | Значение | Действие |
---|---|---|
vbDataErrContinue | 0 | После возникновения ошибки приложение продолжает выполняться. |
vbDataErrDisplay | 1 | После возникновения ошибки появляется диалоговое окно с соответствующим сообщением. Этот вариант действия установлен по умолчанию. |
- Откройте любой проект и измените свойство DatabaseName объекта управления данными Data1 на C:\BIBLIO.MDB.
- Запустите проект и убедитесь, что на экране появляется сообщение об ошибке.
- Добавьте в процедуру обработки события Error следующий фрагмент:
Private Sub Data1_Error(DataErr As Integer, Response As Integer) Response = vbDataErrContinue End Sub
- Запустите приложение. В этом случае сообщения об ошибке не возникает.
Reposition
Событие Reposition происходит, когда запись в наборе записей становится текущей.
Синтаксис: Private Sub Data1_Reposition ().
После загрузки объекта Data и открытия соответствующего набора записей, первая запись в наборе становится текущей и происходит событие Reposition. Это событие также происходит, когда пользователь нажимает кнопки на объекте Data для перемещения по набору записей, а также при использовании методов Move или Find. Вообще говоря, применение любых методов, при которых происходит изменение положения текущей записи, вызывает событие Reposition.
В отличие от события Validate, которое происходит перед изменением текущей записи, событие Reposition всегда происходит после того, как следующая запись стала текущей.
Validate
Событие Validate происходит перед изменением положения текущей записи, а так же перед выполнением методов Update (за исключением случая, когда данные сохраняются с помощью метода UpdateRecord), Delete, Unload, или Close.
Синтаксис: Private Sub Data1_Validate (Action As Integer, Save As Integer)
Аргумент Save определяет состояние связанных элементов управления. Если аргумент Save установлен в True, то содержимое связанных элементов управления было изменено. Если же аргумент Save установлен в False, то никаких изменений в связанных элементах управления не произошло.
Аргумент Action определяет действие, которое вызвало событие Validate. Возможные значения этого параметра и их краткие описания приведены в следующей таблице.
Постоянная | Значение | Описание |
---|---|---|
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 в vbDataActionCancel:
Private Sub Data1_Validate(Action As Integer, Save As Integer) If Save=False Then Exit Sub End If If MsgBox("Сохранить сделанные изменения", vbYesNo,"","",0)=vbNo Then Action=vbDataActionCancel Exit Sub End If End Sub