Поддержка баз данных (Технологии доступа к данным. Создание приложения с базой данных), страница 2

-  В появившемся окне Database Options (Опции базы данных) выбрать источник данных Students и щелкнуть на OK.

-  В появившемся окне Select Database Tables (Выбор таблицы базы данных) выбрать таблицу Students и щелкнуть на OK. Снова на экране окно этапа 2. Щелкнуть на кнопке Next.

-  3-ий этап – щелкнуть на кнопке Next, 4-ый этап – сбросить флажок опции Printing and print и щелкнуть на Next, 5-ый этап - щелкнуть на Next, 6-ой этап – щелкнуть на кнопке Finish.

-  Появляется окно New Project Information, в котором представлены характеристики создаваемого приложения. Щелкнуть на ОК. Появится окно Developer Studio с открытым проектом.

Реализация операции просмотра базы данных

Для реализации операции просмотра базы данных требуется выполнить этапы создания формы документа для отображения содержимого записей базы данных:

-  Выбрать вкладку ResourceView, открыть папку Lab11 Resources и ,затем, папку Dialog. Щелкнуть дважды на идентификаторе диалогового окна IDD_LAB11_FORM. Открывается диалоговое окно в редакторе ресурсов.

-  Выделить строку «TODO: ...» и удалить ее, нажав <Del>.

-  Добавить в диалоговое окно два текстовых поля (поля записи) со статическими надписями Name и Grade, а также надпись-заголовок Students согласно спроектированной экранной форме документа.

-  Теперь необходимо связать текстовые поля с переменными-элементами класса CLab11Set, производного от класса CRecordSet, для организации обмена данными между текстовыми полями и источником данных. Выбрать команду View>Class-Wizard и щелкнуть на вкладке Member Variable.

-  Выбрать ресурс IDC_EDIT1и щелкнуть на кнопке Add Variable. Появляется окно Add Member Variable.

-  Выбрать в раскрывающемся списке Member Variable Name значение m_pSet->m_Name и щелкнуть на OK.

-  Аналогично связать поле IDC_EDIT2 с переменной m_pSet->m_Grade. Щелкнуть на OK в окне ClassWizard.

-  Скомпилировать и запустить приложение. Выполнить операцию просмотра базы данных с помощью пиктограмм на панели инструментов или опций меню Record First Record, Previous Record, Next Record, Last Record. Можно изменить содержимое любого из двух полей базы данных, набрав новые данные и перейдя к другой записи.

Реализация операций добавления и удаления записей

Для реализации операций добавления и удаления записей базы данных необходимо сначала добавить в приложение команды Add Record и Delete Record:

-  Выбрать вкладку ResourceView, открыть папку Menu и щелкнуть дважды на меню IDR_MAINFRAME. Появится окно редактора меню.

-  Открыть меню Record и щелкнуть на нижней пустой команде. Выполнить команду View->Properties. Появится окно Menu Item Properties.

-  Ввести в поле ID значение ID_RECORD_ADD, в поле Caption - &Add Record.

-  Аналогично ввести в следующую пустую позицию команду удаления, т.е. в поле ID – ID_RECORD_DELETE, а в поле Caption - &Delete Record.

Затем, необходимо создать заготовки функций-обработчиков для выполнения команд добавления и удаления записей:

-  Выбрать команду View->ClassWizard и щелкнуть на вкладке Message Maps.

-  Выбрать в списке Class Name значение CLab11View, а в списке Object IDs – идентификатор команды добавления ID_RECORD_ADD. Затем щелкнуть дважды на COMMAND в списке Messages. Появится окно Add Member Function.

-  Щелкнуть на OK, приняв по умолчанию имя функции OnRecordAdd.

-  Аналогично создать заготовку функции-обработчика для команды удаления ID_RECORD_DELETE. По умолчанию имя функции – OnRecordDelete.

Теперь необходимо написать текст функций-обработчиков команд добавления и удаления записей:

-  Объявить булевскую переменную-флажок для фиксации добавления записи (TRUE) или перемещения к следующей записи (FALSE). Для этого в окне ClassView щелкнуть дважды на CLab11View и в открывшемся файле Lab11View.h добавить в класс переменную:

protected:

         BOOL m_bAdding;

-  Инициализировать переменную. Для этого в окне ClassView щелкнуть дважды на конструкторе класса CLab11View и вставить в конец конструктора:

m_bAdding=FALSE;

-  Добавить текст функции OnRecordAdd():

void CLab11View::OnRecordAdd()

{

  m_pSet->AddNew();  //формирование пустой записи

  m_bAddig=TRUE;   //признак добавления записи

  UpdateData(FALSE); //отображение пустой записи

}

-  Переопределить функцию OnMove() в классе CLab11View. В окне ClassView щелкнуть правой кнопкой мыши на CLab11View и выбрать в контекстном меню команду Add Virtual Function. В появившемся окне выбрать функцию OnMove() и щелкнуть на кнопке Add and Edit.

-  Добавить текст функции OnMove():

BOOL CLab11View::OnMove(UNIT nIDMoveCommand)

{   //вызывается при переходе к другой записи

  if (m_bAdding) //если TRUE, то добавление записи

  {

     m_bAdding=FALSE; //сброс флажка

     UpdateData(TRUE); //передача данных из полей в буфер записи

     if (m_pSet->CanUpdate()) //проверка возможности обновления базы

       m_pSet->Update(); //добавление новой записи к источнику данных

       m_pSet->Requery(); //формирование новой выборки данных

       UpdateData(FALSE); //передача данных из буфера записи в поля

       return TRUE;

  }

  else //m_bAdding==FALSE и обычный переход на следующую запись

   return CRecordView::OnMove(nIDMoveCommand);

}

-  Добавить текст функции OnRecordDelete():

void CLab11View::OnRecordDelete()

{

  m_pSet->Delete(); //удаление записи

  m_pSet->MoveNext(); //переход к отображению следующей записи

  if (m_pSet->IsEOF()) //проверка конца последовательности записей

    m_pSet->MoveLast(); //при TRUE - указатель на последнюю запись

  if (m_pSet->IsBOF()) //проверка на единственную запись

    m_pSet->SetFieldNull(NULL);//при TRUE– устан. полей в NULL

  UpdateData(FALSE); //обновление содержания окна представления

}

Откомпилировать и запустить приложение. Для добавления записи щелкнуть на команде Record->Add Record. Появится пустая запись. Ввести данные новой записи и щелкнуть на команде перехода к другой записи. Новая запись запишется в базу данных. Для удаления записи щелкнуть на команде Record->Delete Record. Текущая запись исчезнет с экрана и появится другая запись базы данных.