Реализация доступа к базам данных в среде VISUAL STUDIO.NET на языке С++ с применением MFC
Создание приложений баз данных
Средства 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.
- Выберите механизм доступа (Client type):
- опция ODBC обеспечивает включение в проект заголовочного файла AFXDB.H и линкуемых библиотек;
- опция OLE DB обеспечивает включение в проект заголовочных файлов ATLBASE.H, AFXOLEDB.H и ATLPLUS.H.
- Далее, если используется механизм ODBC, то следует выбрать источник данных, с которым устанавливается соединение. По щелчку мышью на командной кнопке Data Source отображается диалог для выбора источника данных (рис. 10.2).
- При использовании механизма OLE DB также следует определить источник данных, используя или имя источника данных, или строку подключения (рис. 10.3)
- После определения используемого источника данных и идентификации пользователя отображается диалог (рис. 10.4) со всеми таблицами, представлениями и хранимыми процедурами (только для OLE DB) источника данных, которые доступны данному пользователю. В этом диалоге следует выбрать таблицу базы данных, используемую для формирования результирующего набора.
- На странице 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); }
В результате выполненных действий записи базы данных будут отображаться в окне документа в соответствующих элементах управления.