Прочитав предыдущие шаги вы можете увидеть, что в шагах "Шаг 36 - Проект библиотека - Диалоговое окно - Разделы", "Шаг 34 - Проект библиотека - Диалоговое окно - Авторы - Кнопки и сохранение данных" нужно постоянно кодировать одни и те-же действия. Мол, вперед пошли, назад, в начало записей. Давайте сделаем класс, в котором будет весь этот код. И нам при кодировании нужно будет меньше работать. Назовем этот класс CDaoNavigator. В этот класс нужно будет передать указатель на набор записей.
class CDaoNavigator { public: void SetRecordset(CDaoRecordset *cRecord); // установить набор записей CDaoNavigator(); virtual ~CDaoNavigator(); private: CDaoRecordset * m_pRecord; // указатель на набор записей }; void CDaoNavigator::SetRecordset(CDaoRecordset *cRecord) { m_pRecord=cRecord; }
Теперь осталось, создать функции вперед назад, на первую, на последнею.
class CDaoNavigator { public: void OnButtonNext(); // на следующую void OnButtonFirst(); // на первую void OnButtonPrev(); // на одну назад void OnButtonLast(); // на последнюю void SetRecordset(CDaoRecordset *cRecord); // установить набор записей CDaoNavigator(); virtual ~CDaoNavigator(); private: CDaoRecordset * m_pRecord; // указатель на набор записей };
Реализуем:
void CDaoNavigator::OnButtonLast() { m_pRecord->MoveLast(); // на последнюю } void CDaoNavigator::OnButtonPrev() { m_pRecord->MovePrev(); // назад if (m_pRecord->IsBOF()) m_pRecord->MoveNext(); //если вышли, то вернуть вперед } void CDaoNavigator::OnButtonFirst() { m_pRecord->MoveFirst(); // на последнею } void CDaoNavigator::OnButtonNext() { try { m_pRecord->MoveNext(); // вперед if (m_pRecord->IsEOF()) throw CString(""); // если это последняя, то новая нужна } catch(...) // если последняя то создать новую { m_pRecord->AddNew(); // новая m_pRecord->Update(); // подтвердить m_pRecord->MoveLast(); // на последнюю } }
Вот и все. Теперь этот класс можно использовать в любом проекте.
В проекте находится класс CDaoNavigator упaкованный для использования в Component Gallery как ogx файл.