Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции ОТИ - копия.doc
Скачиваний:
3
Добавлен:
01.07.2025
Размер:
8.91 Mб
Скачать

Связывание отдельных частей

Для того чтобы заработал механизм передачи данных, потребуется связать, квждый элемент редактирования с переменной CMyFirstSet, представляющей поле базы данных. Выполняется это связывание за счет внешнего подключении (foreign connection) — косвенного отображения элемента управления Windows на переменную класса CMyFirstSet.

Вы уже знаете, как с помощью ClassWiZard можно связать элемент управления, например, IDC_CENA с переменной CString m_CENA. В таком случае любые изменения m_CENA копируются в элемент управления IDC_CENA или из него во время выполнения функции DoDataExchange().

Рис. 30.5. Добавление полей редактирования

При использовании CRecordView ClassWizard позволяет связать элемент управления с одной из переменных класса CMyFirstSet. Делается это через переменную m_pSet класса CMyFirstView, указывающую на объект CMyFirstSet. Выполним следующие шаги:

  1. Откроем ClassWizard, нажав Ctrl+W или выбрав из главного меню View | ClassWizard. В выпадающем списке Class Name выберем класс CMyFirstView. Перейдём на вкладку Member Variables, на которой отображаются идентификаторы только что добавленных элементов редактирования.

  2. Последовательно выбирая каждый из элементов, нажимаем Add Variable, как будто работаем с обычным диалоговым окном. Обратите внимание, что когда появляется диалоговое окно Add Member Variable, поле Member Variable Name уже не является обычным элементом редактирования — теперь оно представляет собой выпадающий список, содержащий косвенные ссылки на переменные типа m_pSet->m_CENA. Это показано на рис. 30.6. Свяжем каждый элемент управления с корректным полем CRecordSet, используя переменные типа Cstring и других соответственно, которые и будут содержать значения полей.

  3. Каждая внешняя переменная, добавленная ClassWizard, позволяет включить проверку длины вводимых данных. Это очень важно при создании приложения на основе CRecordView. При записи полей в базу данных следует проявить внимательность, чтобы не отослать символов больше, чем может разместиться в поле. Введём длины в поле Maximum Characters, чтобы установить проверку длины строки каждой внешней переменной, включенной в класс CMyFirstView (см. рис. 30.7). Теперь наше приложение перед отправкой данных в базу будет выполнять проверку их корректности.

Рис. 30.6. Создание в ClassWizard внешних подключений

Теперь откомпилируем и запустим программу. Из рис. 30.8 видно, что по базе данных можно передвигаться при помощи кнопок панели управления. Кроме того, перемещаться можно и с помощью команд меню Record. В случае изменения данных приложение запишет их в базу при перемещении к другой записи.

Для того чтобы сделать MyFirst полнофункциональной утилитой поддержки таблицы, придется добавить некоторый код. Далее будет показано, как фильтровать данные, таким образом отображая требуемые записи. Затем мы рассмотрим код для добавления и удаления записей.

Рис. 30.7. Установка в ClassWizard проверки корректности полей ввода

Рис. 30.8. Приложение MyFirst

Занятие №31

Добавление кода в созданный проект. Реализаци функций сортировки, фильтрации с помощью ClassWizard. Добавление и удаление записей.

Добавление кода в проект MyFirst

В приложении CRecordView класс документа практически ничего не делает, поскольку хранит и получает информацию сама база данных. Поэтому класс CMyFirstDoc, например, не имеет функции сериализации. Класс документа просто содержит объект CRecordSet как общедоступный элемент.

При запуске приложения функция класса представления OnInitialUpdate() сохраняет адрес объекта документа CRecordSet в своей переменной m_pSet следующим образом:

m_pSet = &GetDocument()->m_MyFirstSet;

Затем осуществляется вызов функции OnInitialUpdate() базового класса, которая заполняет набор записей данными из базы, создает на форме элементы управления и передает им данные из первой записи набора.

После того как класс представления получит объект CRecordSet, но прежде чем он вызовет CRecordView::OnInitialUpdate(), есть возможность определить, какие записи следует получить за счет установки значений полей m_strFilter и m_strSort объекта CRecordSet. m_strFilter определяет какие записи необходимо получить, а m_strSortв каком порядке.

Вот как это работает. Предположим, требуется вывести только товары корейского производства. Добавьте следующую строку непосредственно перед вызовом CRecordView::OnInitialUpdate():

m_pSet->m_strFilter = "Country = 'Корея'";

Аналогично, если необходимо отсортировать записи по значению CENA, следует добавить такую строку:

m_pSet->m_strSort = "CENA";

Если strFilter и m_strSort пусты (по умолчанию это так), набор запией будет содержать все записи таблицы без какого-либо порядка.