Итак, нас осталось сделать кнопки навигации и сохранение данных при изменении. Одна кнопка вперед есть. Надо сделать кнопку назад, в самое начало и в самый конец.

Код к ним сделаем.
void CDialogAuthor::OnButtonNext()
{
try
{
m_pAuthor->MoveNext(); // вперед
if (m_pAuthor->IsEOF()) throw CString(""); // если это последняя то новая нужна
UpdateData(FALSE); // показать что там
}
catch(...) // если последняя, то создать новую
{
m_pAuthor->AddNew();
m_pAuthor->Update();
m_pAuthor->MoveLast(); // на последнею
UpdateData(FALSE); // показать что там
}
}
void CDialogAuthor::OnButtonLast()
{
m_pAuthor->MoveLast(); // на последнюю
UpdateData(FALSE);
}
void CDialogAuthor::OnButtonPrev()
{
m_pAuthor->MovePrev();
if (m_pAuthor->IsBOF())
m_pAuthor->MoveNext(); // вперед если ушли за таблицу
UpdateData(FALSE);
}
void CDialogAuthor::OnButtonFirst()
{
m_pAuthor->MoveFirst(); // на первую
UpdateData(FALSE);
}
Теперь наша задача будет научиться сохранять изменения если вдруг что-то введено. Так как при любом перемещении все происходит одинаково мы создадим функцию SaveDate.
void CDialogAuthor::SaveData()
{
m_pAuthor->Edit(); // начать редактирование
UpdateData(TRUE); // сохранить данные
m_pAuthor->Update(); // подтвердить
}
И теперь ее нужно вызывать при каждом перемещении.
void CDialogAuthor::OnButtonNext()
{
try
{
SaveData();
......
}
......
}
void CDialogAuthor::OnButtonLast()
{
SaveData();
......
}
void CDialogAuthor::OnButtonPrev()
{
SaveData();
......
}
void CDialogAuthor::OnButtonFirst()
{
SaveData();
......
}
BOOL CDialogAuthor::DestroyWindow()
{
SaveData();
......
}
Ну и давайте пояснения, что ли сделаем к полям.

И теперь все работает очень похоже на Access.
