Назад | Начало урока | Вперед
Содержание

Удаление записей

Функция OnDataDeletecurrent()
Функция Delete()

Последнее что надо реализовать в нашем приложении -удаление текущей записи из набора.Функции реализующие эту возможность подобны функциям, реализующим перемещение по набору и добавление новой записи -выбор пункта меню приводит к вызову функции-обработчика события, которая является членом класса представления.И поскольку эта функция совершает те же действия, что и описанные выше функции -обновление значений переменных в классе хранения данных, вызов функции класса документа, обновляющего текущую запись в базе данных, и обновление формы - то и код данной функции будет похож на код ранее реализованных функций.

Функция OnDataDeletecurrent()
Отредактируйте функцию OnDataDeleterecord() обработки события(нажатие пункта меню "Delete Record"), включив в нее вызов метода Delete() класса документа. Для этого добавьте код как в 13.8

Вверх

Листинг 13.8 Функция OnDataDeleterecord()()


void CAdoDatabaseView::OnDataDeleterecord()()()
{
// Обновить текущую запись (данными с экрана)
UpdateBoundData();
// удалить текущую запись
GetDocument()->Delete()();
// Обновить экран данными из записи
RefreshBoundData();
}

Функция Delete()
В функции класса документа удаление записи производится почти так же, как и добавление новой записи.Сначала в базе данных обновляется текущая запись, затем выполняется проверка, можно ли удалить текщую запись, после чего от пользователя требуется подтверждение намерения ее удалить, и наконец вызывается функция Delete и совершается переход на другую запись небора. Чтобы добавить данную возможность сделайте следующее:

  1. Добавьте пункт меню, выюор которого должен приводить к удалению записи (функция Delete).Добавьте в класс представления функцию обработки событыя, связанного с добавлением пункта меню.

  2. Отредактируйте новую функцию, добавив тот же код, что и в функцию, предназначенных для перемещения по набору и добавления новой записи. Единственное, чем эта функция должна отличаться от прежних, -в ней вызывается функция Delete класса документа.
  3. Отредактируйте функцию как в 13.12

Вверх

Листинг12.13 Функция Delete()


void CAdoDatabaseDoc::Delete(void)
{
try
{
// Update the current record
m_piAdoRecordBinding->Update(&m_rsRecSet);
// Can we delete a record?
if (m_ptrRs->Supports(adDelete))
{
// Make sure the user wants to delete this record
if (AfxMessageBox(
"Are you sure you want to delete this record?",
MB_YESNO | MB_ICONQUESTION) == IDYES)
{
// Delete the record
m_ptrRs->Delete(adAffectCurrent);
// Move to the previous record
m_ptrRs->MovePrevious();
}
}
}
// Any errors?
catch (_com_error &e)
{
// Generate an error message
GenerateError(e.Error(), e.Description());
}
}

Скомпилировав и запустив, вы получите возможность удалить любую запись из набора.Но если удалить все записи из набора, произойдет ошибка при попытке перехода на предыдущую запись.Поэтому перед вызовом метода, осуществляющего переход на предыдущую запись, следует вставить проверку, не пуст ли набор записей(то есть не была ли запись единственной в наборе).



Назад | Начало урока | Вверх | Вперед
Содержание

Hosted by uCoz