Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Макросы.doc
Скачиваний:
26
Добавлен:
21.11.2018
Размер:
16.91 Mб
Скачать

Перемещение по записям

Объект Recordset имеет пять методов, позволяющих перемещаться по набору записей: Move (Перейти), MoveFirst (Перейти к первой), MoveNext (Перейти к следующей), MovePrevious (Перейти к предыдущей) и MoveLast (Перейти к последней). Метод Move перемещает к записи с указанным номером, назначение остальных методов видно из их названий.

Рис. 22.2. В форму добавлены кнопки для перемещения по записям

Вставьте четыре командных кнопки в нижнюю часть экранной формы, как показано на рис. 22.2. Задайте этим кнопкам следующие свойства.

Заголовок

Имя

Первая

cmdFirst

Предыдущая

cmdPrevious

Следующая

cmdNext

Последняя

cmdLast

Теперь этим кнопкам надо назначить соответствующие методы Move. Но прежде чем создавать процедуры для этих кнопок, надо написать процедуру, которая присваивала бы свойству Text полей ввода формы значения свойства Value полей записей данных. Эта процедура будет использоваться в процедурах кнопок перемещения. Код такой процедуры показан в листинге 22.2.

Листинг 22.2. Процедура Заполнение_полей

1: Sub Заполнение_полей()

2:  txtProductID.Text = rstProduct.Fields(0).Value

3:  txtProductName.Text = rstProduct.Fields(1).Value

4:  txtUnitPrice.Text = rstProduct.Fields(2).Value

5:  txtUnitsInStock.Text = rstProduct.Fields(3).Value

6: End Sub

Теперь введите код (листинг 22.3) для процедур перемещения по записям, которые будут вызываться после щелчка на соответствующих кнопках перемещения.

Листинг 22.3. Процедуры перемещения

PrivateSubcmdFirst_Click()

 rstProduct.MoveFirst

 Заполнение_полей

End Sub

Private Sub cmdLast_Click()

 rstProduct.MoveLast

 Заполнение_полей

End Sub

Private Sub cmdNext_Click()

 rstProduct.MoveNext

 If rstProduct.BOF Then

  rstProduct.MoveLast

 End If

 Заполнение_полей

End Sub

Private Sub cmdPrevious_Click()

 rstProduct.MovePrevious

 If rstProduct.EOF Then

  rstProduct.MoveFirst

 End If

 Заполнение_полей

End Sub

Испытайте новые кнопки для перемещения по набору записей. Вы увидите, что можно переходить от первой записи к последней и обратно, от текущей записи к предыдущей или следующей. Если вы еще раз посмотрите на процедуры перехода по записям, то заметите, что процедуры перехода к следующей и предыдущей записям имеют условные операторы, осуществляющие проверку значений свойств BOF (Начало файла) и EOF (Конец файла). Если эти свойства имеют значение True (Истина), т.е. достигнут коней набора записей или его начало, то во избежание ошибок выполнения применяются методы MoveLast и MoveFirst соответственно.

Редактирование данных

Посредством экранной формы можно не только просматривать данные и записывать их в рабочий лист, но и редактировать данные, а затем возвращать их обратно в базу данных. Для этого используется метод Update (Обновить). Вставьте в экранную форму еще одну командную кнопку, как показано на рис. 22.3. Задайте название этой кнопки как Правка, а имя - cmdUpdate. Введите код процедуры cmdUpdate_Click (листинг 22.4).

Рис. 22.3. Усовершенствование в форме, позволяющее редактировать данные

Листинг 22.4. Процедура cmdUpdate_Click

1: PrivateSubcmdUpdate_Click()

2:  rstProduct.Fields("Марка"].Value = txtProductName.Text

3:  rstProduct.Fields("Цена").Value = txtUnitPrice.Text

4:  rstProduct.Fields("НаСкладе").Value = txtUnitsInStock.Text

5: End Sub

Отмстим, что эта процедура не позволяет изменять поле КодТовара. Дело в том, что это поле является первичным ключом в исходной таблице товары и его нельзя изменить.

Протестируем эту процедуру. Выполните экранную форму и в произвольной записи в поле Цена введите число, отличное оттого, которое там находится. Щелкните на кнопке Правка, затем на кнопках Следующая и Предыдущая. Вы должны снова увидеть запись с измененным значением в поле Цена.