Страница 167 из 179
End Sub
8. Запустите проект на выполнение.
После загрузки формы, данные в таблице DBGrid будут отображены в неупорядоченном виде, вернее, данные будут размещены в физическом порядке, то есть в том, в котором они были введены в базу данных, хотя в элементе управления ComboBox будет показано “По названиям”. Затем выберите из списка другой доступный способ упорядочения, например, “По году издания”. После обработки события Click будет создан новый набор записей, источником данных для которого будет служить результат выполнения следующего SQL-запроса select * From titles order by [Year Published].
На рис. 4.3 представлена библиографическая информации из базы данных BIBLIО2.MDB, упорядоченная по году издания книги.
Рис. 4.3. Библиографические данные, упорядоченные по году издания книги.
Методы объекта Data
• Refresh
После изменения свойства объекта Data во время выполнения приложения, ядро системы управления базами данных Jet database engine сразу не меняет ранее уже установленные свойства. Вообще говоря, просто изменить в программе одно установленное свойство на другое невозможно. Необходимо заново инициализировать объект управления данными, который затем автоматически создаст другие объекты доступа к данным (например, DataBase или Recordset) с уже новыми свойствами. Для этого необходимо применить метод Refresh. Таким образом, метод Refresh используется для того, чтобы во время выполнения приложения переинициализировать объект управления данными, но уже с новыми свойствами.
Синтаксис: Data1.Refresh.
После применения метода Refresh указатель текущей записи устанавливается на первой записи в наборе, созданном объектом Data.
• UpdateControls
Действие метода UpdateControls полностью аналогично переустановке указателя текущей записи на себя. При этом, связанные элементы управления очищаются и, затем, их содержимое восстанавливается согласно текущей записи. То есть, никаких изменений полей базы данных не происходит, даже если содержимое связанных элементов управления было отредактировано.
Синтаксис: Data1.UpdateControls.
Хорошей иллюстрацией использования метода UpdateControls является предоставление пользователю возможности подтвердить сделанные изменения содержимого текущей записи. Для этого необходимо вмешаться в процедуру обработки события Validate объекта Data.
1. Откройте проект, который использовался для демонстрации удаления записи и добавьте следующий фрагмент кода в процедуру обработки события Validate:
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
Data1.UpdateControls
Exit Sub
End If
End Sub
2. Запустите приложение.
3. Измените содержимое какого-нибудь связанного текстового окна, например, года издания, и, используя кнопки перемещения по набору записей, измените положение текущей записи. В результате, на экран будет выдано диалоговое окно, в котором можно подтвердить или отменить сделанные изменения.
4. Закройте приложение.
• UpdateRecord
Метод UpdateRecord сохраняет в базе данных содержимое текущей записи, отображаемое в связанных элементах управления.
Синтаксис: Data1.UpdateRecord.
Использование этого метода позволяет сохранить содержимое связанных элементов управления в базе данных без перемещения указателя текущей записи. При этом не генерируется событие Validate. Следует отметить, что перед использованием этого метода необходимо убедиться, что соблюдены правила целостности базы данных.
Следующий пример показывает, как использовать в приложениях метод UpdateRecord:
1. Откройте проект, использованный для демонстрации метода UpdateControls.
2. Разместите на форме командную кнопку, измените ее свойство Caption на “Обновить данные” и добавьте следующий код в процедуру обработки события Click:
Private Sub Command2_Click()
Data1.UpdateRecord End Sub
3. Запустите проект. Отредактируйте содержимое связанных элементов управления и нажмите кнопку “Обновить данные”. Теперь, сделанные вами изменения сохранены в базе данных.
События
• Error
Событие Error происходит, когда при использовании объекта Data возникает какая-либо ошибка доступа к данным, причем в это время программный код, написанный программистом не выполняется. Примером такой ситуации может быть случай, когда база данных, определенная свойством DatabaseName объекта Data, не найдена. Здесь не выполняется написанного программистом кода и, поэтому, обработка такого рода ошибки невозможна с использованием стандартных средств Visual Basic. К счастью, в этом случае происходит событие Error, в процедуру обработки которого программист имеет полное право вмешаться.
Синтаксис: Private Sub Data1 Error (DataErr As Integer, Response As Integer)
Параметр DataErr содержит код ошибки. Различные варианты действия после возникновения ошибки определяются параметром Response, и приведены в следующей таблице:
Постоянная ∙ Значение ∙ Действие
vbDataErrContinue ∙ 0 ∙ После возникновения ошибки приложение продолжает выполняться.
vbDataErrDisplay ∙ 1∙ После возникновения ошибки появляется диалоговое окно с соответствующим сообщением. Этот вариант действия установлен по умолчанию.
1. Откройте любой проект и измените свойство DatabaseName объекта управления данными Data1 на С: BIBLIO.MDB.
2. Запустите проект и убедитесь, что на экране появляется сообщение об ошибке.
3. Добавьте в процедуру обработки события Error следующий фрагмент:
Private Sub Data1_Error(DataErr As Integer, Response As Integer)
Response = vbDataErrContinue
End Sub
4. Запустите приложение. В этом случае сообщения об ошибке не возникает.
• 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. Возможные значения этого параметра и их краткие описания приведены в следующей таблице.