Создание приложения ODBC

Реферат - Компьютеры, программирование

Другие рефераты по предмету Компьютеры, программирование

// необходимо выполнить присваивание

m_job_Nom= m_pSet->m_job_id ;

// Осуществляем обмен данными с элементами управления в форме

 

CRecordView::DoDataExchange(pDX);

//{{AFX_DATA_MAP(CPrim_1View)

DDX_FieldText(pDX, IDC_EDIT3, m_pSet->m_min_lvl, m_pSet);

DDX_FieldText(pDX, IDC_EDIT2, m_pSet->m_max_lvl, m_pSet);

DDX_FieldText(pDX, IDC_EDIT1, m_pSet->m_job_desc, m_pSet);

DDX_Text(pDX, IDC_EDIT4, m_job_Nom);

//}}AFX_DATA_MAP

 

 

}

 

 

 

Уберем значение идентификатора с экрана на время вставки новой записи. Для этого немного модифицируем код в двух функциях OnRecordAppend и On Move, как

показано ниже.

 

void CPrimView::OnRecordAppend()

{

// TODO: Add your command handler code here

// Сначала проверяем, не была ли открыта база данных

// в режиме только для чтения. Если это так,

//то выводим предупреждение и выходим из функции

if(m_pSet->CanAppend() == 0)

MessageBox("Можно только просматривать записи",

"Ошибка добавления записи",

MB_OK | MB_ICONWARNING);

else

{

 

// Скрываем элементы управления на время ввода новой записи

GetDlgItem(IDC_EDIT4)->ShowWindow(SW_HIDE);

 

// Устанавливаем фокус на поле ввода названия

GetDlgItem(IDC_EDIT1)->SetFocus();

 

// Перемещаемся на первую запись

m_pSet->MoveFirst();

 

// Создаем пустую запись,

//в которую пользователь будет вводить значения

 

m_pSet->AddNew();

// Устанавливаем флаг перехода в режим добавления записи

m_bAdd = TRUE;

 

// Обновляем поля формы

UpdateData(FALSE);}

 

}

 

 

 

BOOL CPrimView::OnMove(UINT nIDMoveCommand)

{

// TODO: Add your specialized code here and/or call the base class

 

// Проверяем, в каком режиме добавления или перемещения -

// мы находимся

if(m_bAdd) {

 

// Выходим из режима добавления

m_bAdd=false;

 

// После завершения ввода снова отображаем элементы управления

 

GetDlgItem(IDC_EDIT4)->ShowWindow(SW_SHOW);

 

UpdateData();

 

if (m_pSet->CanUpdate() )

m_pSet->Update() ;

m_pSet->Requery();

UpdateData(FALSE);

return TRUE;

}

else

// Переходим к следующей записи в результирующем наборе

return CRecordView::OnMove(nIDMoveCommand);

}

 

 

После внесения этих изменений скомпилируйте и запустите приложение.

 

После нажатия кнопки New Record и ввода информации о новой должности основное окно будет иметь вид представленный на рис. 16.

 

 

Рис. 16. Так теперь выглядит основное окно приложения в режиме ввода новой записи в базу данных

 

Итак, теперь мы умеем обновлять и добавлять записи в базу данных. Следующим шагом является удаление записей.

 

  1. Удаление записей из таблицы.

 

Как обычно, начнем с того, что добавим в наше приложение кнопку на панели инструментов, нажатие на которую позволит перейти в режим удаления. Создайте функцию OnRecordDelete, воспользовавшись стандартной описанной ранее.

 

void CPrimView::OnRecordDelete()

{

// TODO: Add your command handler code here

 

// Последняя возможность сохранить запись

 

if(MessageBox("Вы действительно хотите удалить эту запись?",

"Удаление записи",

MB_OKCANCEL|MB_ICONQUESTION|MB_DEFBUTTON2) == IDOK)

 

// Удаляем запись

m_pSet->Delete();

//Перечитываем информацию из БД.

m_pSet->Requery();

 

// Переходим к следующей записи

m_pSet->MoveNext ();

// Если мы переместились за последнюю запись,

//то устанавливаем указатель на последнюю запись

 

if(m_pSet->IsEOF())

m_pSet->MoveLast ();

 

// Если таблица стала пустой, то очищаем поля.

if(m_pSet->IsBOF ())

m_pSet->SetFieldNull(NULL);

// Обновляем поля формы

UpdateData(FALSE);

 

}

 

 

Правила хорошего тона требуют, чтобы перед удалением пользователю был задан вопрос, хорошо ли он подумал и не случайно ли нажал кнопку удаления. Если запись действительно надо удалить, то смело нажимайте кнопку ОК, после чего будет вызвана функция Delete класса CRecordset, которая проведет корректное удаление записи из базы данных. Чтобы обновить набор, с которым мы работаем, необходимо вызвать функцию Requery, иначе мы будем продолжать работать с записью, которой в базе данных уже нет. Этот шаг был бы не нужен, если бы мы работали с динамическим набором как вы помните, в этом случае результирующий набор обновляется одновременно с обновлением базы данных. Новыми при удалении являются следующие два действия проверка на выход за начало и конец записей. Действительно, если мы переместились (вызов функции MoveNext) за последнюю запись (проверка if (m_pSet->isEOF ())), то непонятно, на что в этом случае будет указывать указатель. Поэтому его нужно установить на последнюю запись результирующего набора (вызов m_pSet->MoveLast ()). Аналогичные действия необходимо предпринять для проверки на выход за "левую границу", т. е. за первую запись (вызов if (m_pSet->isBOF())). Эта ситуация возникает тогда, когда из таблицы удаляется последняя строка и требуется очистить поля единственной пустой строки (ВЫЗОВ m_pSet->SetFieldNull (NULL) ).

Как и в случае обновления и добавления новой записи, здесь также всю основную работу делает библиотека MFC, а точнее, ее класс CRecordset.

 

  1. Сортировка записей.

 

Для демонстрации этой возможности создадим специальные элементы меню, внешний вид которых представлен на рис 17. Используем для организации сортировки два критерия: по идентификатору должности, по названию. Для создания элементов меню откройте окно Resource View>Menu и дважды щелкните левой кнопкой мыши на идентификаторе ресурса IDR_MAINFRAIM. В строке заголовков меню введите текст &Sort (Сортиров