MFC. Использование классов базы данных с документами и представлениями
Обновлен: Ноябрь 2007
Классы MFC базы данных — DAO или ODBC — можно использовать как с документами и представлениями, так и без них. В этом разделе будет уделено особое внимание работе с документами и представлениями. В нем поясняются следующие вопросы:
Как написать приложение на основе форм с помощью объекта CRecordView или CDaoRecordView в качестве основного представления документа.
Как использовать объекты наборов данных в документах и представлениях.
Другие вопросы.
Кроме того, альтернативные варианты представлены в разделе MFC: Использование классов базы данных без документов и представлений.
Создание приложений на основе форм
Многие приложения, осуществляющие доступ к данным, созданы на основе форм. Пользовательский интерфейс представляет собой форму, на которой размещены элементы управления процессами анализа, ввода и редактирования данных. Чтобы создать приложение на основе формы, используйте класс CRecordView или CDaoRecordView. При запуске Мастера приложений MFC и выборе типа клиента ODBC на странице Поддержка баз данных в проекте будет использоваться класс представления CRecordView. Мастеры больше не поддерживают DAO, поэтому если требуется использование CDaoRecordView, необходимо написать к нему код вручную.
В приложении, создаваемом на основе форм, каждый объект представления записей сохраняет указатель в объект CRecordset или CDaoRecordset. Механизм обмена данными с полями записей (RFX) обеспечивает обмен данными между набором записей и источником данных. Механизм обмена данными с диалоговым окном (DDX) обеспечивает обмен данными между элементами полей данных объекта набора записей и элементами управления на форме. Классы CRecordView или CDaoRecordView также предоставляют функции обработчиков команд по умолчанию для перемещения между записями на форме.
Описание процесса создания приложения на основе форм с помощью мастера приложений приведено в разделах Создание приложений MFC на основе форм и Поддержка баз данных, Мастер приложений MFC.
Подробное обсуждение форм представлено в разделе Просмотр записей.
Использование наборов записей в документах и представлениях
Во многих простых приложениях, созданных на основе форм, не требуется создание документов. Если ваше приложение более сложное, возможно вам потребуется использовать документ в качестве посредника между базой данных, а также хранить объекты CDatabase или CDaoDatabase, подключающиеся к источнику данных. Приложения, создаваемые на основе форм, обычно сохраняют указатель на объект набора записей в представлении. Другие приложения баз данных сохраняют наборы записей и объекты CDatabase или CDaoDatabase в документе. Далее рассматриваются некоторые возможности использования документов в приложениях баз данных:
Если вы обращаетесь к набору записей в локальном контексте, создайте объект CRecordset или CDaoRecordset локально в функциях-членах документа или представления по мере необходимости.
Объявите объект набора записей как локальную переменную в функции. Передайте NULL конструктору, после чего платформа создаст и откроет временный объект CDatabase или CDaoDatabase. Как альтернативный вариант, передайте указатель объекту CDatabase или CDaoDatabase. Используйте этот набор записей в функции и задайте его автоматическое удаление по прекращении выполнения функции.
При передаче NULL конструктору набора записей платформа использует информацию, возвращаемую функцией-членом GetDefaultConnect этого набора записей, для создания и открытия объекта CDatabase или CDaoDatabase. Мастер выполнит реализацию GetDefaultConnect.
Если вы обращаетесь к набору записей во время существования документа, внедрите в документ один или более объектов CRecordset или CDaoRecordset.
Создайте объекты набора записей либо при инициализации документа, либо по мере необходимости. Можно написать функцию, возвращающую указатель в набор записей, если он уже существует, либо создающую и открывающую набор записей, если он еще не существует. Закройте, удалите или повторно создайте набор записей по мере необходимости, либо вызовите его функцию-член Requery для обновления записей.
Если вы обращаетесь к источнику данных во время существования документа, внедрите объект CDatabase или CDaoDatabase, либо сохраните указатель в объект CDatabase или CDaoDatabase внутри него.
Объект CDatabase или CDaoDatabase управляет подключением к источнику данных. Объект будет создан автоматически во время создания документа. Вызовите его функцию-член Open при инициализации документа. При создании объектов наборов записей в функциях-членах документа передайте указатель объекту CDatabase или CDaoDatabase этого документа. Тем самым каждый набор записей будет ассоциирован со своим источником данных. Объект базы данных обычно удаляется при закрытии документа. Объекты набора записей обычно удаляются при выходе за пределы области действия функции.
Прочие факторы
В приложениях, созданных на основе форм, обычно не требуется механизм сериализации документа, предоставляемый платформой, поэтому может потребоваться удаление, отключение или замена команд New и Открыть в меню Файл. См. статью Сериализация и ввод/вывод в базы данных.
Вам также могут потребоваться многие возможности пользовательского интерфейса, поддерживаемые платформой. Например, можно использовать несколько объектов CRecordView или CDaoRecordView в разделяемом окне, открыть несколько наборов записей в разных дочерних окнах многодокументного интерфейса (MDI) и т. д.
Вам может потребоваться реализация функций печати содержимого окна представления, будь то форма, реализованная с помощью CRecordView или CDaoRecordView, либо другие возможности. Классы, производные от CFormView, CRecordView и CDaoRecordView, не поддерживают печать. Но вы можете переопределить функцию-член OnPrint, чтобы разрешить печать. Дополнительные сведения см. в описании класса CFormView.
Возможно, что вам совсем не потребуются документы и представления. В этом случае см. раздел MFC: Использование классов базы данных без документов и представлений.