MFC. Использование классов базы данных без документов и представлений
Обновлен: Ноябрь 2007
В некоторых случаях может потребоваться не использовать архитектуру "документ/представление" платформы в приложениях базы данных. В данном разделе рассматриваются следующие вопросы.
Случаи, когда нет необходимости использовать документы (например, сериализация документов).
Параметры мастера приложений, необходимые для поддержки приложений без сериализации и связанных с документом команд меню Файл, таких как Создать, Открыть, Сохранить и Сохранить как.
Способы работы с приложением, использующим минимальный документ.
Способы организации приложения без документов или представлений.
Случаи, когда нет необходимости использовать документы
Некоторые приложения имеют особое понятие документа. Как правило, эти приложения загружают из хранилища весь файл или большую его часть в память с помощью команды Открыть файл. Они записывают обновленный файл обратно в хранилище при выполнении команды Сохранить файл или Сохранить как. Пользователю в это время отображается файл данных.
Для некоторых категорий приложений, однако, документ не требуется. Приложения баз данных выполняются как транзакции. Приложение выбирает записи из базы данных и представляет их пользователю (как правило, по одной). Пользователь обычно видит только текущую запись, которая может быть единственной записью, загруженной в память.
Если приложению для хранения данных не требуются документы, можно избавиться от всей архитектуры "документ/представление" платформы или ее части. От какой именно части можно обойтись зависит от выбранного подхода. Можно выполнить следующие действия.
Избавиться от обычных функций документа, таких как сериализация, и использовать минимальный документ в качестве места для хранения подключения к источнику данных. Этот подход используется, если необходимо, чтобы данные имели несколько представлений, синхронизованных и обновляемых одновременно и т. д.
Использовать вместо представления фреймовое окно, в которое можно заносить объекты напрямую. В этом случае можно "пропустить" документ и сохранять любые данные и подключения к источникам данных в объекте фреймового окна.
Параметры мастера приложений для документов и представлений
Мастер приложений MFC имеет несколько параметров в меню Выбор поддержки баз данных, которые перечислены в следующей таблице. При использовании мастера приложений MFC для создания приложения выбор любого из этих параметров приведет к созданию приложения с документами и представлениями. Некоторые параметры создают документы и представления, в которых отсутствуют ненужные функции документов. Дополнительные сведения см. в разделе Поддержка базы данных, мастер приложений MFC.
Параметр |
Представление |
Документ |
---|---|---|
Нет |
Производное от CView. |
Поддержка баз данных отсутствует. Этот параметр используется по умолчанию. При выборе параметра Поддержка архитектуры "документ/представление" на странице Тип приложения, мастер приложений MFC приложение будет включать полную поддержку документов, включая сериализацию, а также команды Создать, Открыть, Сохранить и Сохранить как в меню Файл. Дополнительные сведения см. в разделе Приложения без поддержки документов |
Только файлы заголовков |
Производное от CView. |
Предоставляет базовый уровень поддержки базы данных для приложения. Включает файл Afxdb.h. Добавляет библиотеки компоновки, но не создает классы, определяемые базой данных. Позднее можно создать наборы записей и использовать их для проверки и обновления записей. |
Представление баз данных без поддержки файлов |
Производное от CRecordView. |
Предоставляет поддержку документов, но не поддержку сериализации. Документ может сохранять наборы записей и управлять несколькими представлениями, но не поддерживает сериализацию и команды Создать, Открыть, Сохранить и Сохранить как. Дополнительные сведения см. в разделе Приложения с минимальными документами. При включении представления базы данных необходимо указать источник данных. Включает файлы заголовков баз данных, библиотеки компоновки, представление записей и набор записей (доступно только для приложений, для которых выбран параметр Поддержка архитектуры "документ/представление" на странице Тип приложения, мастер приложений MFC). |
Представление баз данных с поддержкой файлов |
Производное от CRecordView. |
Предоставляет полную поддержку документов, включая сериализацию и связанные с документами команды меню Файл. Приложения баз данных обычно выполняются на основе записей, а не файлов, поэтому сериализация не требуется. Тем не менее, можно найти особое применение и для сериализации. Дополнительные сведения см. в разделе Приложения с минимальными документами. При включении представления базы данных необходимо указать источник данных. Включает файлы заголовков баз данных, библиотеки компоновки, представление записей и набор записей (доступно только для приложений, для которых выбран параметр Поддержка архитектуры "документ/представление" на странице Тип приложения, мастер приложений MFC). |
Сведения об альтернативах сериализации и альтернативных вариантах использования сериализации см. в разделе Serialization: Serialization vs. Database Input/Output.
Приложения с минимальными документами
Мастер приложений MFC имеет два параметра, поддерживающие приложения для доступа к данным на основе форм. Каждый из них создает производный от CRecordView класс представления и документ. Они отличаются объектами, которые они пропускают в документе.
Документ без поддержки файлов
Следует выбирать параметр базы данных Представление базы данных без поддержки файлов в мастере приложений, если не требуется сериализация документов. При этом документ служит для следующих целей.
Он является удобным местом для хранения объекта CRecordset.
В этом он схож с понятием обычного документа: документ хранит данные (или, как в данном случае, набор записей), а представление является представлением документа.
При наличии в приложении нескольких представлений (например, нескольких представлений записей) документ поддерживает управление представлениями.
Если представления отображают одни и те же данные, можно использовать функцию члена CDocument::UpdateAllViews, чтобы при внесении изменений в одном представлении, данные автоматически обновлялись во всех остальных.
Этот параметр обычно используется для простых приложений на основе форм. Мастер приложений поддерживает автоматический выбор подходящей структуры для данных приложений.
Документ с поддержкой файлов
Следует выбирать параметр базы данных Представление базы данных с поддержкой файлов при наличии альтернативных вариантов использования связанных с документом команд меню Файл и сериализации документов. Что касается части программы, отвечающей за доступ к данным, документ можно использовать, как описано в разделе Документ без поддержки файлов. Сериализацию документов можно использовать, например, для чтения и записи сериализованного документа профиля пользователя, в котором хранятся пользовательские настройки и другие полезные сведения. Другие возможные варианты использования сериализации см. в разделе Serialization: Serialization vs. Database Input/Output.
Мастер приложений поддерживает этот вариант, однако необходимо записать код для сериализации документа. Сведения о сериализованных документах следует хранить в элементах данных документа.
Приложения без поддержки документов
В некоторых случаях может потребоваться написать приложение, в котором не используются документы и представления. При отсутствии документов данные (например, объект CRecordset) сохраняются в классе фреймового окна или приложения. Дополнительные требования зависят от того, предоставляет ли приложение пользовательский интерфейс.
Поддержка баз данных с пользовательским интерфейсом
При наличии пользовательского интерфейса (отличного от интерфейса командной строки), приложение взаимодействует напрямую с клиентской областью фреймового окна, а не с представлением. В таких приложениях не используются представления CRecordView, CFormView и CDialog для основного пользовательского интерфейса. Однако представление CDialog, как правило, используется для обычных диалоговых окон.
Написание приложений без документов
Поскольку мастер приложений не поддерживает создание приложений без документов, необходимо написать собственный класс, производный от класса CWinApp, и при необходимости создать класс CFrameWnd или CMDIFrameWnd. Следует переопределить CWinApp::InitInstance и объявить объект приложения следующим образом:
CYourNameApp theApp;
Платформа по-прежнему будет предоставлять механизм сопоставления сообщений и многие другие функции.
Независимая от пользовательского интерфейса поддержка баз данных
Для некоторых приложений требуется минимальный пользовательский интерфейс или не требуется вовсе. Предположим, вы создаете:
промежуточный объект доступа к данным, вызываемый другими приложениями (клиентами) для особой обработки данных между приложением и источником данных;
приложение, обрабатывающее данные без участия пользователя (например, приложение, которое перемещает данные из одного формата базы данных в другой либо вычисляет и выполняет пакетные обновления).
Поскольку ни один документ не является владельцем объекта CRecordset или CDaoRecordset, возможно, потребуется сохранить его как вложенный элемент данных в собственном классе приложения, производном от CWinApp. В качестве альтернативы можно использовать приведенные ниже варианты.
Не хранить объект CRecordset или CDaoRecordset на постоянной основе. Можно передать значение NULL в конструкторы классов наборов записей. В этом случае платформа создает временный объект CDatabase или CDaoDatabase с помощью функции элемента GetDefaultConnect набора записей. Это наиболее вероятный вариант.
Преобразовать объект CRecordset или CDaoRecordset в глобальную переменную. Эта переменная должна являться указателем на объект набора записей, создаваемый динамически в переопределенном методе CWinApp::InitInstance. Это помогает избежать попыток создать объект до инициализации платформы.
Использовать объекты наборов записей так же, как и в контексте документа или представления. Следует создать наборы записей в функциях элементов в объектах приложения или фреймового окна.