Создание приложений баз данных
Средства MFC Application Wizard позволяют практически без всякого программирования разрабатывать приложения, выполняющие подключение к таблице базы данных и отображение содержимого ее полей. При этом для реализации доступа к базе данных используется или механизм ODBC, или OLE DB.
Для того чтобы использовать ODBC-драйверы, первоначально следует создать источник данных DSN (Data Source Name). Это можно сделать как в момент формирования проекта с помощью MFC Application Wizard, так и используя ODBC32 панели управления Windows.
При создании источника данных определяется имя источника данных, используемое приложениями, выбирается требуемый для подключения к базе данных ODBC-драйвер и указывается местоположение самой базы данных. Определение имени источника данных выполняется только один раз и затем может быть многократно применяться для создания всех приложений, использующих этот же ODBC-драйвер для этой же базы данных.
Для того, чтобы создать приложение, реализующее доступ к базе данных, выполните следующие действия:
- Создайте новый проект. Выберите в качестве шаблона создаваемого проекта MFC Application.
- Автоматически формируемые приложения, реализующие работу с базой данных, должны поддерживать архитектуру "документ-отображение". (Выберите, например, тип приложения Single Document).
- Перейдите на страницу Database Support (рис. 10.1) и определите поддержку работы с базой данных. Опция Database view without file support обеспечивает формирование кода, выполняющего подключение к источнику данных, но без поддержки механизма сериалицации. Опция Bind all columns доступна только для ODBC и обеспечивает автоматическое связывание полей результирующего набора с переменными членами класса, наследуемого от CRecordset.
Рис. 10.1. Страница Database Support мастера MFC Application Wizard - Выберите механизм доступа (Client type):
- опция ODBC обеспечивает включение в проект заголовочного файла AFXDB.H и линкуемых библиотек;
- опция OLE DB обеспечивает включение в проект заголовочных файлов ATLBASE.H, AFXOLEDB.H и ATLPLUS.H.
Если для Database Support была установлена опция Database view without file support или Database view with file support, то для механизма ODBC создаваемый класс отображения будет наследоваться от CRecordView и будет ассоциирован с классом результирующего набора, наследуемого от CRecordset. Для механизма OLE DB класс отображения наследуется от COleDBRecordView и ассоциируется с классом, наследуемым от CTable или CCommand. - Далее, если используется механизм ODBC, то следует выбрать источник данных, с которым устанавливается соединение. По щелчку мышью на командной кнопке Data Source отображается диалог для выбора источника данных (рис. 10.2).
Рис. 10.2. Диалог для выбора источника данных (для ODBC) - При использовании механизма OLE DB также следует определить источник данных, используя или имя источника данных, или строку подключения (рис. 10.3)
Рис. 10.3. Диалог для выбора источника данных (для OLE DB) - После определения используемого источника данных и идентификации пользователя отображается диалог (рис. 10.4) со всеми таблицами, представлениями и хранимыми процедурами (только для OLE DB) источника данных, которые доступны данному пользователю. В этом диалоге следует выбрать таблицу базы данных, используемую для формирования результирующего набора.
Рис. 10.4. Диалог Select Database Object - На странице Generated Classes отображается список классов, автоматически создаваемый MFC Application Wizard. Класс отображения будет наследован от класса СRecordView, а класс результирующего набора – от класса CRecordset.
Созданное AppWizard приложение будет содержать панель инструментов с кнопками для перехода между записями таблицы базы данных, но не будет содержать элементов управления для отображения полей таблицы базы данных.
Мастер MFC Application Wizard создает в классе, наследуемом от Crecordset, переменные члены класса для каждого поля таблицы подключаемой базы данных.
Для того чтобы отобразить в форме поля базы данных, следует:
- Расположить в редакторе ресурсов для каждого поля таблицы соответствующий ему элемент управления.
Вставить в метод DoDataExchange класса отображения вызовы методов DDX_FieldText (или DDX_FieldCheck, DDX_FieldRadio, DDX_FieldSlider и т.п.), выполняющие связь между идентификатором ресурса и переменной – членом класса результирующего набора.
Например:
void CP2View::DoDataExchange(CDataExchange* pDX) { CRecordView::DoDataExchange(pDX); DDX_FieldText(pDX, IDC_EDIT1, // Идентификатор ресурса m_pSet->m_f1, // Переменная — член // класса, наследуемого // от CRecordset m_pSet); // Член класса, наследуемого // от CRecordView: CP2Set* m_pSet; // Член класса, наследуемого от // CDocument: CP2Set m_P2Set; // Метод OnInitialUpdate класса // наследуемого от CRecordView : // CDocument: CP2Set m_P2Set; // m_pSet = &GetDocument()->m_P2Set; DDX_FieldText(pDX, IDC_EDIT2, m_pSet->m_f2, m_pSet); }
В результате выполненных действий записи базы данных будут отображаться в окне документа в соответствующих элементах управления.