Вверх
Функция OnDataFirst()
Функция OnDataPrevious()
Функция OnDataNext()
Функция OnDataLast()
Для того чтобы пользователь мог перемещать маркер по набору записей,
добавим в меню четыре новых пункта, соответствующие основным действиям
перемещения:переход на первую, последнюю, следующую и предыдущую записи.
Поскольку объект RecordSet и указатель на интерфейс , используемый для
хранения данных, являются частью объекта документа, сообщения о событиях
должны передаваться в класс документа, который обновит текущую запись
в базе данных и переместит маркер на следующую выбранную запись.Однако
экземпляр класса представления должен получать сообщение о событии раньше
так как именно он копирует значения из из управляющих элементов формы
в переменные экземпляра класса хранения данных, а это должно быть сделано
до того, как будет обновлена запись в БД.
Когда завершено перемещение маркера текущей записи, представление должно обновить выведенные на экран в управляющие элементы формы значения полей записи.
Учитывая последовательность обработки сообщений, о событиях, имеет смысл установить обработчик этих событий в классе представления, а уже из него вызывать необходимые функции класса документа.
Чтобы добавить эту возможность, выполните следующее:
Вверх
Листинг 13.8 Функция OnDataFirst()
Вверх
Листинг 13.9 Функция MoveFirst()
Анализ:
Вот так это и происходит:
Сообщение о событии (например нажатие на первый пункт меню "First Record")
обрабатывается функцией класса представления OnDataFirst.
Еще раз как это происходит:допустим мы нажали пункт меню "First Record".
Проиходит все то что мы только, что описали выше.Мы видим на экране
все данные из объекта номер один в массиве записей.Если у нас не было ни каких записей то мы увидим чистые поля первого объекта.Теперь заполним эти
чистые поля данными.И нажмем пункт меню "Next Record".Что делает программа?
Программа должна обработать это событие, то есть перейти к следующей записи.
Но перед тем как перейти к следующей записи, надо сохранить те данные которые мы только что ввели для первого объекта записи.
Добавьте функции, реализующие перемещение к следующей
записи в классы представления и документа.
Вверх
Листинг 13.8 Функция OnDataNext()
Вверх
Листинг 13.9 Функция MoveNext()
Далее добавьте функции, реализующие перемещение к предыдущей и последней
записи в классы представления и документа.
Вверх
Листинг 13.8 Функция OnDataPrevious()
Вверх
Листинг 13.9 Функция MovePrevious()
Вверх
Листинг 13.8 Функция OnDataLast()
Вверх
Листинг 13.9 Функция MoveLast()
После добавления этих функций можно приступать к компиляции и тестированию
приложения.Созданное приложение позволяет открывать таблицу Addresses
базы данных, а так же просматривать и изменять каждую из записей этой
таблицы.
АВ: Думаю, что сейчас самое время создать БД с именем STYVCDB (она уже создана, но пока не инициализирована). Создать в этой БД таблицу с именем Addresses, инициировать ее данными (сделать это на языке Java, как я умею делать)
Таблица Addresses упоминается в функции OnNewDocument() класса документа
и более нигде.
Назад |
Начало урока |
Вверх |
Вперед
Перемещение по набору записей
Функция MoveFirst()
Функция MovePrevious()
Функция MoveNext()
Функция MoveLast()
Функция OnDataFirst
Отредактируйте функцию OnDataFirst обработки события(нажатие первого пункта меню "First Record"), включив в нее вызов метода
MoveFirst класса документа.Для этого добавьте код как в 13.8
void CAdoDatabaseView::OnDataFirst()
{
UpdateBoundData();
// Перейти к первой записи
GetDocument()->MoveFirst();
// Обновить экран данными из записи
RefreshBoundData();
Функция MoveFirst
Теперь в класс документа добавим функцию MoveFirst (переход на первую
запись).Для этого выполните следующее:
void CAdoDatabaseDoc::MoveFirst(void)
{
{
m_piAdoRecordBinding->Update(&m_rsRecSet);
// Перейти к первой записи
m_ptrRs->MoveFirst();
// Any errors?
catch (_com_error &e)
{
GenerateError(e.Error(), e.Description());
В этой функции сначала происходит запись данных с экрана в текущий объект
записи затем вызывается нужная функция документа.Например в данном случае
функция MoveFirst(), которая сначала обновляет текущий объект записи
данными которые только что были получены с экрана, затем эта функция передвигает маркер на первый объект записи (в других функциях маркер
может быть пердвинут на предыдущий. последующий или последний объект записи).После этого уже снова в функции представления OnDataFirst
данные, на которые указывает маркер в классе документа, обрабатываются и они выводятся на экран.
Функция OnDataNext
Отредактируйте функцию OnDataNext обработки события(нажатие третьего пункта меню "Next Record"), включив в нее вызов метода
MoveNext класса документа.Для этого добавьте код как в 13.8
void CAdoDatabaseView::OnDataNext()
{
UpdateBoundData();
// Перейти к следующей записи
GetDocument()->MoveNext();
// Обновить экран данными из записи
RefreshBoundData();
Функция MoveNext
Теперь в класс документа добавим функцию MoveNext (переход на следующую
запись).Для этого выполните следующее:
void CAdoDatabaseDoc::MoveNext(void)
{
{
m_piAdoRecordBinding->Update(&m_rsRecSet);
// Move to the next record
m_ptrRs->MoveNext();
// Any errors?
catch (_com_error &e)
{
GenerateError(e.Error(), e.Description());
Функция OnDataPrevious
Отредактируйте функцию OnDataNext обработки события(нажатие второго пункта меню "Previous Record"), включив в нее вызов метода
MoveNext класса документа.Для этого добавьте код как в 13.8
void CAdoDatabaseView::OnDataPrevious()
{
UpdateBoundData();
// Перейти к предыдущей записи
GetDocument()->MovePrevious();
// Обновить экран данными из записи
RefreshBoundData();
Функция MovePrevious
Теперь в класс документа добавим функцию MovePrevious (переход на предыдущую
запись).Для этого выполните следующее:
void CAdoDatabaseDoc::MovePrevious(void)
{
{
m_piAdoRecordBinding->Update(&m_rsRecSet);
// Move to the Previous record
m_ptrRs->MovePrevious();
// Any errors?
catch (_com_error &e)
{
GenerateError(e.Error(), e.Description());
Функция OnDataLast
Отредактируйте функцию OnDataLast обработки события(нажатие четвертого пункта меню "Last Record"), включив в нее вызов метода
MoveNext класса документа.Для этого добавьте код как в 13.8
void CAdoDatabaseView::OnDataLast()
{
UpdateBoundData();
// Перейти к последней записи
GetDocument()->MoveLast();
// Обновить экран данными из записи
RefreshBoundData();
Функция MoveLast
Теперь в класс документа добавим функцию MoveLast (переход на последнюю
запись).Для этого выполните следующее:
void CAdoDatabaseDoc::MoveLast(void)
{
{
m_piAdoRecordBinding->Update(&m_rsRecSet);
// Move to the Last record
m_ptrRs->MoveLast();
// Any errors?
catch (_com_error &e)
{
GenerateError(e.Error(), e.Description());
Содержание