Студопедия

КАТЕГОРИИ:

АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

Создание экранной формы для отображ-я содерж-го БД.




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

1. Для отображ-я ресурсов приложения щелкните на корешке вкладки ResourceView.

2. Разверните дерево ресурсов. Далее аналогичным образом откройте папку ресурсов Dialog. Сделайте двойной щелчок на идентиф-ре диалог.окна IDD_EMPLOYEE_FORM и тем самым откройте диалог.окно в редакторе ресурсов.

3. Выделите, щелкнув на ней, строку в центре диалогового окна, а затем удалите ее, нажав клавишу <Del>.

4.Пользуясь инструм-ми редактора диалог.окна, добавьте в него текстовые поля редактир-я и статич-е надписи. Присвойте полям редактир-я идентиф-ры. Для текстового поля IDC_EMPLOYEE_ID установите стиль Read-Onlу (Edit Properties) (лаба 4).

5.Каждое из этих текстовых полей будет представлять поле записи БД. Атрибут Read-Onlу установлен для первого (текстового) поля по той причине, что оно будет содержать первичный ключ БД, который не подлежит изменению.

6. Вызов мастера ClassWizard выберите команду и в раскрывшемся окне щелкните на вкладке Member Variables.

7. Выбрав ресурс IDC_EMPLOYEE_DEPT, щелкните на кнопке Add Variable. Раскроется диалоговое окно Add Member Variable.

8. Щелкните на стрелке рядом с раскрывающимся списком Member Variable Name и выберите в нем значение m_pSet->m_DeptID.

9. Аналогично свяжите с элементами редактирования остальные перем.-члены. Устан-ли связь, посредством кот-й может происх-ть обмен данными м/у элем-ми редактир-я и источником данных.

10.После щелчка на кнопке ОК в окне MFC ClassWizard внесенные изменения будут зафиксированы в тексте программы.

Добавление и удаление записей.

Когда мы включим в создаваемое прилож-е возм-ть добавлять и удалять записи в таблице БД, оно превратится в полнофункц-ю программу обработки однофайловой (но не реляционной) БД. В нашем случае в роли однофайловой базы данных выступает таблица Employee реляционной базы данных универмага. Добавление и удаление записей в таблице базы данных реализуется достаточно просто благодаря существованию в Visual C++ классов CRecordView и CRecordset, предоставляющих все необходимые методы для выполнения этих стандартных операций. Необходимо будет добавить в приложение несколько команд меню.

1. Щелкните на корешке вкладки ResourceView. откройте папку Menu и сделайте двойной щелчок на меню IDR_MAINFRAME.

2. Щелкните в меню Record, выберите команду View->Properties. В поле ID введите значение ID _RECORD_ADD, а в поле Caption введите значение &Add Record.

3. В следующий пустой элемент меню внесите команду удаления, имеющую идентификатор ID_RECORD_DELETE (поле ID) и заголовок &Delete Record (поле Caption).

Далее необходимо добавить на панель инструментов пару новых пиктограмм и связать с ними эти команды: В дереве ресурсов в окне Resource View откройте папку Toolbar и сделайте двойной щелчок на идентификаторе IDR_MAINFRAME.

Щелкнув на пустой пиктограмме панели инстр-в, выберите ее, а затем с пом-ю инструм-в графич-го редактора нарисуйте на ней голубой знак «плюс».

Сделайте двойной щелчок на новой пиктограмме панели инструментов. В списке ID выберите значение ID_RECORD_ADD.

Снова выделите пустую пиктограмму панели инструментов и нарисуйте на красный знак “-”; присвойте пиктограмме идентификатор ID_RECORD_DELETE.

Выполните следующие операции:Раскройте окно Class Wizard и выберите в нем вкладку Message Maps. В списке Class Name выберите значение CEmployeeView, а в списке Object Ids выберите значение ID_RECORD_ADD, после чего сделайте двойной щелчок на значении COMMAND в списке Messages. Раскроется диалоговое окно Add Member Function.

4. В окне ClassView, дважды щелкнув на элементе CEmployeeView, откройте файл EmployeeView.h. В объявлении класса добавьте следующие строки в раздел Attributes:

protected:

BOOL m_bAdding;

5. В окне ClassView сделайте двойной щелчок на конструкторе класса CEmployeeView и добавьте следующую строку в конец этой функции:

m_bAdding = FALSE;

6. Сделайте двойной щелчок на функции OnRecordAdd() и отредактируйте ее, добавив отработчики.

7. В окне ClassView щелкните правой кнопкой мыши на элементе CEmployeeView и выберите в раскрывшемся контекстном меню команду Add Virtual Function. В левом списке выберитe значение OnMove, а затем щелкните на кнопке Add and Edit. В результате в класс будет добавлена функция и можно будет немедленно отредактировать заготовку ее текста.

8. Отредактируйте функцию OnMove() так, чтобы она содержала текст программы, приведенный ниже.

9. Сделайте двойной щелчок на функции OnRecordDelete() и отредактируйте.

Анализ функции OnRecordAdd()

Функция OnRecordAdd()начинает свою работу с вызова метода AddNew() класса CEmployeeSet, производного от класса CRecordset. Вызванная ф-ция формирует пустую запись, предназначенную для заполнения пользователем. Однако эта запись не появится на экране до тех пор, пока не будет вызван метод UpdateData() класса представл-я. После того как польз-ль создаст новую запись, необходимо будет обновить БД. Установка в данной подпрогр-ме опред-го флажка позволит подпрограмме пересылки определить, какое именно действие польз-ля имеет место: перемещение к следующей записи БД от существовавшей ранее записи базы или же от вновь добавленной. Именно с этой целью переменной m_bAdding присваивается значение TRUE.

В данный момент, когда польз-лю предоставл-ся возм-ть ввести новую запись, необх-мо изменить статус поля кода служащего Employee ID, обычно имеющего атрибут "только чтение". Для снятия этого атрибута прогр-ме прежде всего необх-мо с пом-ю ф-ции GetDlgltem() получить ук-ль на соотв-й элемент упр-я, а затем вызвать метод SetReadOnly() для присвоения значения FALSE атрибуту "только чтение" этого элемента управления.

Анализ функции OnMove()

Теперь, когда пустая запись выведена на экран, польз-ль легко заполнит поля ввода. Для того чтобы новая запись действ-но была помещена в БД, польз-лю необх-мо выполнить переход к другой записи базы. При этом будет вызван метод OnMove() класса представления. Обычно функция OnMove() не выполняет ничего, кроме отображ-я след-й записи БД. Сделанное нами переопред-е этой ф-ции доп-но обесп-т и сохран-е новой записи.

При вызове ф-ция OnMove() прежде всего проверяет значение логич-ской перемен-й m_bAdding и т.о. выясняет, от какой записи происходит переход: от существовавшей или от вновь добавл-й. Если значение m_bAdding равно FALSE, то основное тело оператора if пропускается и выполняется фрагмент программы, следующий за else. При этом программа вызывает метод OnMove() базового класса (CRecordView), который выполняет обычный переход на следующую запись.

Если переменная m_bAdding имеет значение TRUE, выполняется основное тело оператора if. Здесь программа прежде всего сбрас-т флаг m_bAdding, а затем вызывает ф-цию UpdateData() для передачи данных из полей окна представления в буфер выбранных записей. Вызов функции CanUpdate() класса выборки данных определяет, можно ли обновлять источник данных, и, если можно, вызов ф-ции Update(), явл-ся членом этогоже класса, добавляет новую запись к источнику данных.

Для формирования новой выборкиданных программа должна вызвать функциюRequery(), являющуюся членом класса CRecordset, а затем вызовом метода класса окна представления UpdateData() поместить новые данные в элементы управления этого окна. Инаконец, программа восстанавливает дляполя кода служащего Employee IDатрибут "только чтение", еще раз вызвав функции GetDlgltemO и SetReadOnly().










Последнее изменение этой страницы: 2018-04-12; просмотров: 236.

stydopedya.ru не претендует на авторское право материалов, которые вылажены, но предоставляет бесплатный доступ к ним. В случае нарушения авторского права или персональных данных напишите сюда...