Прочитав предыдущие шаги вы можете увидеть, что в шагах "Шаг 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 файл.